]> granicus.if.org Git - clang/commitdiff
Add some warning messages about invalid use of common/nocommon attributes.
authorEric Christopher <echristo@apple.com>
Fri, 3 Dec 2010 06:58:14 +0000 (06:58 +0000)
committerEric Christopher <echristo@apple.com>
Fri, 3 Dec 2010 06:58:14 +0000 (06:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120799 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDeclAttr.cpp

index ee03d1f7f18b9fee2077b1ca81fa82aa888b6668..ad0313d976c2c99841773b0cfa286ebbf0f5bb52 100644 (file)
@@ -745,12 +745,20 @@ static void HandleMayAliasAttr(Decl *d, const AttributeList &Attr, Sema &S) {
 
 static void HandleNoCommonAttr(Decl *d, const AttributeList &Attr, Sema &S) {
   assert(Attr.isInvalid() == false);
-  d->addAttr(::new (S.Context) NoCommonAttr(Attr.getLoc(), S.Context));
+  if (isa<VarDecl>(d))
+    d->addAttr(::new (S.Context) NoCommonAttr(Attr.getLoc(), S.Context));
+  else
+    S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type)
+      << Attr.getName() << 12 /* variable */;
 }
 
 static void HandleCommonAttr(Decl *d, const AttributeList &Attr, Sema &S) {
   assert(Attr.isInvalid() == false);
-  d->addAttr(::new (S.Context) CommonAttr(Attr.getLoc(), S.Context));
+  if (isa<VarDecl>(d))
+    d->addAttr(::new (S.Context) CommonAttr(Attr.getLoc(), S.Context));
+  else
+    S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type)
+      << Attr.getName() << 12 /* variable */;
 }
 
 static void HandleNoReturnAttr(Decl *d, const AttributeList &Attr, Sema &S) {