// RUN: %clang_cc1 -fsyntax-only -verify %s void foo(); void foo() __attribute__((unused)); void foo() __attribute__((unused)); void foo(){} // expected-note {{previous definition is here}} void foo() __attribute__((constructor)); // expected-warning {{must precede definition}} void foo(); int bar; extern int bar; int bar; 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)); // 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}}