Home | History | Annotate | Download | only in Sema
      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