Home | History | Annotate | Download | only in Sema
      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 definition}}
     17 static int g4; // expected-error{{static declaration of 'g4' follows non-static declaration}}
     18 
     19 __private_extern__ int g5; // expected-note{{previous definition}}
     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 definition}}
     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 definition}}
     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