summaryrefslogtreecommitdiffstats
path: root/clang/test/Sema/attr-decl-after-definition.c
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2012-07-15 01:33:40 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2012-07-15 01:33:40 +0000
commitfaf556b7456b1b8044b24cb9c60198ccae70ba65 (patch)
tree7c862cf4a40ecebd0c49017cb04915cc98531d9f /clang/test/Sema/attr-decl-after-definition.c
parenta5bba70c9c7174837ed4f1fb828e7c1d8f078572 (diff)
downloadbcm5719-llvm-faf556b7456b1b8044b24cb9c60198ccae70ba65.tar.gz
bcm5719-llvm-faf556b7456b1b8044b24cb9c60198ccae70ba65.zip
Without this patch clang warns on
struct __attribute__((visibility("hidden"))) zed { }; struct __attribute__((visibility("hidden"))) zed; Which is a bit silly and got a lot noisier now that we correctly handle visibility pragmas. This patch fixes that and also has some extra quality improvements: * We now produce an error instead of a warning for struct __attribute__((visibility("hidden"))) zed { }; struct __attribute__((visibility("default"))) zed; * The "after definition" warning now points to the new attribute that is ignored instead of pointing to the declaration. llvm-svn: 160227
Diffstat (limited to 'clang/test/Sema/attr-decl-after-definition.c')
-rw-r--r--clang/test/Sema/attr-decl-after-definition.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/clang/test/Sema/attr-decl-after-definition.c b/clang/test/Sema/attr-decl-after-definition.c
index ba6df590685..17b94cc47ec 100644
--- a/clang/test/Sema/attr-decl-after-definition.c
+++ b/clang/test/Sema/attr-decl-after-definition.c
@@ -14,9 +14,26 @@ int bar __attribute__((weak));
int bar __attribute__((used));
extern int bar __attribute__((weak));
int bar = 0; // expected-note {{previous definition is here}}
-int bar __attribute__((weak)); // expected-warning {{must precede definition}}
+int bar __attribute__((weak)); // no warning as it matches the existing
+ // attribute.
+int bar __attribute__((used,
+ visibility("hidden"))); // expected-warning {{must precede definition}}
int bar;
struct zed { // expected-note {{previous definition is here}}
};
struct __attribute__((visibility("hidden"))) zed; // expected-warning {{must precede definition}}
+
+struct __attribute__((visibility("hidden"))) zed2 {
+};
+struct __attribute__((visibility("hidden"))) zed2;
+
+struct __attribute__((visibility("hidden"))) zed3 { // expected-note {{previous definition is here}}
+};
+struct __attribute__((visibility("hidden"),
+ packed // expected-warning {{must precede definition}}
+ )) zed3;
+
+struct __attribute__((visibility("hidden"))) zed4 { // expected-note {{previous attribute is here}}
+};
+struct __attribute__((visibility("default"))) zed4; // expected-error {{visibility does not match previous declaration}}
OpenPOWER on IntegriCloud