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