xref: /aosp_15_r20/external/clang/test/SemaCXX/warn-missing-variable-declarations.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang -Wmissing-variable-declarations -fsyntax-only -Xclang -verify %s
2*67e74705SXin Li 
3*67e74705SXin Li // Variable declarations that should trigger a warning.
4*67e74705SXin Li int vbad1; // expected-warning{{no previous extern declaration for non-static variable 'vbad1'}}
5*67e74705SXin Li int vbad2 = 10; // expected-warning{{no previous extern declaration for non-static variable 'vbad2'}}
6*67e74705SXin Li 
7*67e74705SXin Li namespace x {
8*67e74705SXin Li   int vbad3; // expected-warning{{no previous extern declaration for non-static variable 'vbad3'}}
9*67e74705SXin Li }
10*67e74705SXin Li 
11*67e74705SXin Li // Variable declarations that should not trigger a warning.
12*67e74705SXin Li static int vgood1;
13*67e74705SXin Li extern int vgood2;
14*67e74705SXin Li int vgood2;
15*67e74705SXin Li static struct {
16*67e74705SXin Li   int mgood1;
17*67e74705SXin Li } vgood3;
18*67e74705SXin Li 
19*67e74705SXin Li // Functions should never trigger a warning.
20*67e74705SXin Li void fgood1(void);
fgood2(void)21*67e74705SXin Li void fgood2(void) {
22*67e74705SXin Li   int lgood1;
23*67e74705SXin Li   static int lgood2;
24*67e74705SXin Li }
fgood3(void)25*67e74705SXin Li static void fgood3(void) {
26*67e74705SXin Li   int lgood3;
27*67e74705SXin Li   static int lgood4;
28*67e74705SXin Li }
29*67e74705SXin Li 
30*67e74705SXin Li // Structures, namespaces and classes should be unaffected.
31*67e74705SXin Li struct sgood1 {
32*67e74705SXin Li   int mgood2;
33*67e74705SXin Li };
34*67e74705SXin Li struct {
35*67e74705SXin Li   int mgood3;
36*67e74705SXin Li } sgood2;
37*67e74705SXin Li class CGood1 {
38*67e74705SXin Li   static int MGood1;
39*67e74705SXin Li };
40*67e74705SXin Li int CGood1::MGood1;
41*67e74705SXin Li namespace {
42*67e74705SXin Li   int mgood4;
43*67e74705SXin Li }
44*67e74705SXin Li 
45*67e74705SXin Li class C {
test()46*67e74705SXin Li   void test() {
47*67e74705SXin Li     static int x = 0; // no-warn
48*67e74705SXin Li   }
49*67e74705SXin Li };
50