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