]> granicus.if.org Git - clang/commitdiff
Treating the RegParmAttr as a TypeAttr because that is what it is.
authorAaron Ballman <aaron@aaronballman.com>
Wed, 8 Jan 2014 13:23:01 +0000 (13:23 +0000)
committerAaron Ballman <aaron@aaronballman.com>
Wed, 8 Jan 2014 13:23:01 +0000 (13:23 +0000)
Patch reviewed by Rafael Espindola.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198765 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/Attr.td
lib/Sema/SemaDeclAttr.cpp

index cd1cbb22183fddc541f469e2d9e5ccce0d77b32b..2ef3fb3853e55cc131cbf7c135eecb0ad3c32291 100644 (file)
@@ -779,9 +779,10 @@ def Pure : InheritableAttr {
   let Spellings = [GNU<"pure">, CXX11<"gnu", "pure">];
 }
 
-def Regparm : InheritableAttr {
+def Regparm : TypeAttr {
   let Spellings = [GNU<"regparm">, CXX11<"gnu", "regparm">];
   let Args = [UnsignedArgument<"NumParams">];
+  let ASTNode = 0;
 }
 
 def ReqdWorkGroupSize : InheritableAttr {
index 6b23dd669119356c617fa5216d21dc7816e4ee9a..23649c6694030e6d60ace23db4f1de20bf69b616 100644 (file)
@@ -3228,24 +3228,6 @@ bool Sema::CheckCallingConvAttr(const AttributeList &attr, CallingConv &CC,
   return false;
 }
 
-static void handleRegparmAttr(Sema &S, Decl *D, const AttributeList &Attr) {
-  if (hasDeclarator(D)) return;
-
-  unsigned numParams;
-  if (S.CheckRegparmAttr(Attr, numParams))
-    return;
-
-  if (!isa<ObjCMethodDecl>(D)) {
-    S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type)
-      << Attr.getName() << ExpectedFunctionOrMethod;
-    return;
-  }
-
-  D->addAttr(::new (S.Context)
-             RegparmAttr(Attr.getRange(), S.Context, numParams,
-                         Attr.getAttributeSpellingListIndex()));
-}
-
 /// Checks a regparm attribute, returning true if it is ill-formed and
 /// otherwise setting numParams to the appropriate value.
 bool Sema::CheckRegparmAttr(const AttributeList &Attr, unsigned &numParams) {
@@ -3799,6 +3781,7 @@ static void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D,
   case AttributeList::AT_Ptr64:
   case AttributeList::AT_SPtr:
   case AttributeList::AT_UPtr:
+  case AttributeList::AT_Regparm:
     // Ignore these, these are type attributes, handled by
     // ProcessTypeAttributes.
     break;
@@ -3963,7 +3946,6 @@ static void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D,
   case AttributeList::AT_NoDebug:     handleNoDebugAttr     (S, D, Attr); break;
   case AttributeList::AT_NoInline:
     handleSimpleAttribute<NoInlineAttr>(S, D, Attr); break;
-  case AttributeList::AT_Regparm:     handleRegparmAttr     (S, D, Attr); break;
   case AttributeList::IgnoredAttribute:
     // Just ignore
     break;