1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
2 | |
3 | void foo(); |
4 | void foo() __attribute__((unused)); |
5 | void foo() __attribute__((unused)); |
6 | void foo(){} // expected-note {{previous definition is here}} |
7 | void foo() __attribute__((constructor)); // expected-warning {{must precede definition}} |
8 | void foo(); |
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 | |