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);
21 void fgood2(void) {
22   int lgood1;
23   static int lgood2;
24 }
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 {
46   void test() {
47     static int x = 0; // no-warn
48   }
49 };
50