1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -verify -fsyntax-only %s 25466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 35466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarstatic int g0; // expected-note{{previous definition}} 45466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarint g0; // expected-error{{non-static declaration of 'g0' follows static declaration}} 55466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 65466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarstatic int g1; 75466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarextern int g1; 85466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 95466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarstatic int g2; 105466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar__private_extern__ int g2; 115466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 125466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarint g3; // expected-note{{previous definition}} 135466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarstatic int g3; // expected-error{{static declaration of 'g3' follows non-static declaration}} 145466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 155466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarextern int g4; // expected-note{{previous definition}} 165466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarstatic int g4; // expected-error{{static declaration of 'g4' follows non-static declaration}} 175466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 185466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar__private_extern__ int g5; // expected-note{{previous definition}} 195466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarstatic int g5; // expected-error{{static declaration of 'g5' follows non-static declaration}} 205466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 215466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarvoid f0() { 226684d85e9075e3c1750d911c69a517145a82a410Argyrios Kyrtzidis int g6; // expected-note {{previous}} 236684d85e9075e3c1750d911c69a517145a82a410Argyrios Kyrtzidis extern int g6; // expected-error {{extern declaration of 'g6' follows non-extern declaration}} 245466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar} 255466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 265466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarvoid f1() { 276684d85e9075e3c1750d911c69a517145a82a410Argyrios Kyrtzidis int g7; // expected-note {{previous}} 286684d85e9075e3c1750d911c69a517145a82a410Argyrios Kyrtzidis __private_extern__ int g7; // expected-error {{extern declaration of 'g7' follows non-extern declaration}} 295466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar} 305466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 315466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarvoid f2() { 325466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar extern int g8; // expected-note{{previous definition}} 336684d85e9075e3c1750d911c69a517145a82a410Argyrios Kyrtzidis int g8; // expected-error {{non-extern declaration of 'g8' follows extern declaration}} 345466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar} 355466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 365466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarvoid f3() { 375466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar __private_extern__ int g9; // expected-note{{previous definition}} 386684d85e9075e3c1750d911c69a517145a82a410Argyrios Kyrtzidis int g9; // expected-error {{non-extern declaration of 'g9' follows extern declaration}} 395466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar} 405466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 415466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarvoid f4() { 425466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar extern int g10; 435466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar extern int g10; 445466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar} 455466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 465466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarvoid f5() { 475466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar __private_extern__ int g11; 485466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar __private_extern__ int g11; 495466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar} 505466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 515466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarvoid f6() { 525466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar // FIXME: Diagnose 535466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar extern int g12; 545466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar __private_extern__ int g12; 555466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar} 565466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 575466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarvoid f7() { 585466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar // FIXME: Diagnose 595466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar __private_extern__ int g13; 605466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar extern int g13; 615466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar} 625466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 635466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarstruct s0; 645466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarvoid f8() { 655466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar extern struct s0 g14; 665466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar __private_extern__ struct s0 g14; 675466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar} 685466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarstruct s0 { int x; }; 695466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 705466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarvoid f9() { 715466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar extern int g15 = 0; // expected-error{{'extern' variable cannot have an initializer}} 725466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar // FIXME: linkage specifier in warning. 735466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar __private_extern__ int g16 = 0; // expected-error{{'extern' variable cannot have an initializer}} 745466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar} 755466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 765466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarextern int g17; 775466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarint g17 = 0; 785466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 795466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarextern int g18 = 0; // expected-warning{{'extern' variable has an initializer}} 805466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 815466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar__private_extern__ int g19; 825466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbarint g19 = 0; 835466c7b0ca8ce662e2c0bc295cecba2b78d6957dDaniel Dunbar 84ee3899e1cabcbf70d9a316b33f9b79bf3189bd01Steve Naroff__private_extern__ int g20 = 0; 85