diff options
-rw-r--r-- | clang/lib/Sema/SemaDeclAttr.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index ee03d1f7f18..ad0313d976c 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -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) { |