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