1 // RUN: %clang_cc1 -verify -fsyntax-only -Wno-private-extern %s 2 // RUN: %clang_cc1 -verify -fsyntax-only -Wno-private-extern -fmodules %s 3 4 static int g0; // expected-note{{previous definition}} 5 int g0; // expected-error{{non-static declaration of 'g0' follows static declaration}} 6 7 static int g1; 8 extern int g1; 9 10 static int g2; 11 __private_extern__ int g2; 12 13 int g3; // expected-note{{previous definition}} 14 static int g3; // expected-error{{static declaration of 'g3' follows non-static declaration}} 15 16 extern int g4; // expected-note{{previous declaration}} 17 static int g4; // expected-error{{static declaration of 'g4' follows non-static declaration}} 18 19 __private_extern__ int g5; // expected-note{{previous declaration}} 20 static int g5; // expected-error{{static declaration of 'g5' follows non-static declaration}} 21 22 void f0() { 23 int g6; // expected-note {{previous}} 24 extern int g6; // expected-error {{extern declaration of 'g6' follows non-extern declaration}} 25 } 26 27 void f1() { 28 int g7; // expected-note {{previous}} 29 __private_extern__ int g7; // expected-error {{extern declaration of 'g7' follows non-extern declaration}} 30 } 31 32 void f2() { 33 extern int g8; // expected-note{{previous declaration}} 34 int g8; // expected-error {{non-extern declaration of 'g8' follows extern declaration}} 35 } 36 37 void f3() { 38 __private_extern__ int g9; // expected-note{{previous declaration}} 39 int g9; // expected-error {{non-extern declaration of 'g9' follows extern declaration}} 40 } 41 42 void f4() { 43 extern int g10; 44 extern int g10; 45 } 46 47 void f5() { 48 __private_extern__ int g11; 49 __private_extern__ int g11; 50 } 51 52 void f6() { 53 // FIXME: Diagnose 54 extern int g12; 55 __private_extern__ int g12; 56 } 57 58 void f7() { 59 // FIXME: Diagnose 60 __private_extern__ int g13; 61 extern int g13; 62 } 63 64 struct s0; 65 void f8() { 66 extern struct s0 g14; 67 __private_extern__ struct s0 g14; 68 } 69 struct s0 { int x; }; 70 71 void f9() { 72 extern int g15 = 0; // expected-error{{'extern' variable cannot have an initializer}} 73 // FIXME: linkage specifier in warning. 74 __private_extern__ int g16 = 0; // expected-error{{'extern' variable cannot have an initializer}} 75 } 76 77 extern int g17; 78 int g17 = 0; 79 80 extern int g18 = 0; // expected-warning{{'extern' variable has an initializer}} 81 82 __private_extern__ int g19; 83 int g19 = 0; 84 85 __private_extern__ int g20 = 0; 86