1 // RUN: %clang_cc1 %s -fsyntax-only -Wprivate-extern -verify 2 3 // PR3310 4 struct a x1; // expected-note 2{{forward declaration of 'struct a'}} 5 static struct a x2; // expected-warning{{tentative definition of variable with internal linkage has incomplete non-array type 'struct a'}} 6 struct a x3[10]; // expected-error{{array has incomplete element type 'struct a'}} 7 struct a {int x;}; 8 static struct a x2_okay; 9 struct a x3_okay[10]; 10 struct b x4; // expected-error{{tentative definition has type 'struct b' that is never completed}} \ 11 // expected-note{{forward declaration of 'struct b'}} 12 13 const int a [1] = {1}; 14 extern const int a[]; 15 16 extern const int b[]; 17 const int b [1] = {1}; 18 19 extern const int c[] = {1}; // expected-warning{{'extern' variable has an initializer}} 20 const int c[]; 21 22 int i1 = 1; // expected-note {{previous definition is here}} 23 int i1 = 2; // expected-error {{redefinition of 'i1'}} 24 int i1; 25 int i1; 26 extern int i5; // expected-note {{previous declaration is here}} 27 static int i5; // expected-error{{static declaration of 'i5' follows non-static declaration}} 28 29 static int i2 = 5; // expected-note 1 {{previous definition is here}} 30 int i2 = 3; // expected-error{{non-static declaration of 'i2' follows static declaration}} 31 32 static int i3 = 5; 33 extern int i3; 34 35 // rdar://7703982 36 __private_extern__ int pExtern; // expected-warning {{use of __private_extern__ on a declaration may not produce external symbol private to the linkage unit and is deprecated}} \ 37 // expected-note {{use __attribute__((visibility("hidden"))) attribute instead}} 38 int pExtern = 0; 39 40 int i4; 41 int i4; 42 extern int i4; 43 44 int (*pToArray)[]; 45 int (*pToArray)[8]; 46 47 int redef[10]; 48 int redef[]; // expected-note {{previous definition is here}} 49 int redef[11]; // expected-error{{redefinition of 'redef'}} 50 51 void func() { 52 extern int i6; // expected-note {{previous declaration is here}} 53 static int i6; // expected-error{{static declaration of 'i6' follows non-static declaration}} 54 } 55 56 void func2(void) 57 { 58 extern double *p; 59 extern double *p; 60 } 61 62 // <rdar://problem/6808352> 63 static int a0[]; 64 static int b0; 65 66 static int a0[] = { 4 }; 67 static int b0 = 5; 68