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