diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2012-07-15 01:33:40 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2012-07-15 01:33:40 +0000 |
| commit | faf556b7456b1b8044b24cb9c60198ccae70ba65 (patch) | |
| tree | 7c862cf4a40ecebd0c49017cb04915cc98531d9f /clang/test/Sema/attr-decl-after-definition.c | |
| parent | a5bba70c9c7174837ed4f1fb828e7c1d8f078572 (diff) | |
| download | bcm5719-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.c | 19 |
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}} |

