]> granicus.if.org Git - clang/commitdiff
Warn about visibility attributes in typedefs.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 10 May 2012 03:01:34 +0000 (03:01 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 10 May 2012 03:01:34 +0000 (03:01 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@156534 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDeclAttr.cpp
test/Sema/attr-visibility.c

index 280e3d7fca4191800eeb7a5ecb09c442f6b13845..9cd72b2e1ef8f7b962d918968d19cd5c7e1cf5a6 100644 (file)
@@ -1857,6 +1857,10 @@ static void handleAvailabilityAttr(Sema &S, Decl *D,
 bool Sema::mergeVisibilityAttr(Decl *D, SourceRange Range,
                                bool Inherited,
                                VisibilityAttr::VisibilityType Vis) {
+  if (isa<TypedefNameDecl>(D)) {
+    Diag(Range.getBegin(), diag::warn_attribute_ignored) << "visibility";
+    return false;
+  }
   VisibilityAttr *ExistingAttr = D->getAttr<VisibilityAttr>();
   if (ExistingAttr) {
     VisibilityAttr::VisibilityType ExistingVis = ExistingAttr->getVisibility();
index cc3c54a047bde1682c11209e629d302ff33b6831..77bc39c9e6e852af47ed185033957fe464d6e521 100644 (file)
@@ -20,3 +20,5 @@ void test6() __attribute__((visibility("hidden"), // expected-note {{previous at
 
 extern int test7 __attribute__((visibility("default"))); // expected-note {{previous attribute is here}}
 extern int test7 __attribute__((visibility("hidden"))); // expected-error {{visibility does not match previous declaration}}
+
+typedef int __attribute__((visibility("default"))) bar; // expected-warning {{visibility attribute ignored}}