1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 3 void foo(); 4 void foo() __attribute__((unused)); 5 void foo() __attribute__((unused)); foo()6void 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