xref: /aosp_15_r20/external/clang/test/Sema/private-extern.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
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 Li void 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 Li void 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 Li void 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 Li void 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 Li void f4() {
43*67e74705SXin Li   extern int g10;
44*67e74705SXin Li   extern int g10;
45*67e74705SXin Li }
46*67e74705SXin Li 
f5()47*67e74705SXin Li void f5() {
48*67e74705SXin Li   __private_extern__ int g11;
49*67e74705SXin Li   __private_extern__ int g11;
50*67e74705SXin Li }
51*67e74705SXin Li 
f6()52*67e74705SXin Li void 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 Li void 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 Li void 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 Li void 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