xref: /llvm-project/clang/test/Sema/attr-decl-after-definition.c (revision e765e0bc8ed06ebb186a9905227273517f0b7240)
1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 
3 void foo(void);
4 void foo(void) __attribute__((unused));
5 void foo(void) __attribute__((unused));
foo(void)6 void foo(void){} // expected-note {{previous definition is here}}
7 void foo(void) __attribute__((constructor)); // expected-warning {{must precede definition}}
8 void foo(void);
9 
10 int bar;
11 extern int bar;
12 int bar;
13 int bar __attribute__((weak));
14 int bar __attribute__((used));
15 extern int bar __attribute__((weak));
16 int bar = 0; // expected-note {{previous definition is here}}
17 int bar __attribute__((weak)); // no warning as it matches the existing
18                                // attribute.
19 int bar __attribute__((used,
20                        visibility("hidden"))); // expected-warning {{must precede definition}}
21 int bar;
22 
23 struct zed {  // expected-note {{previous definition is here}}
24 };
25 struct __attribute__((visibility("hidden"))) zed; // expected-warning {{must precede definition}}
26 
27 struct __attribute__((visibility("hidden"))) zed2 {
28 };
29 struct __attribute__((visibility("hidden"))) zed2;
30 
31 struct __attribute__((visibility("hidden"))) zed3 {  // expected-note {{previous definition is here}}
32 };
33 struct __attribute__((visibility("hidden"),
34                      packed  // expected-warning {{must precede definition}}
35                      )) zed3;
36 
37 struct __attribute__((visibility("hidden"))) zed4 {  // expected-note {{previous attribute is here}}
38 };
39 struct __attribute__((visibility("default"))) zed4; // expected-error {{visibility does not match previous declaration}}
40