1 // RUN: %clang_cc1 -verify -fsyntax-only -Wshadow %s
2 
3 namespace {
4   int i; // expected-note {{previous declaration is here}}
5 }
6 
7 namespace one {
8 namespace two {
9   int j; // expected-note {{previous declaration is here}}
10 }
11 }
12 
13 namespace xx {
14   int m;
15 }
16 namespace yy {
17   int m;
18 }
19 
20 using namespace one::two;
21 using namespace xx;
22 using namespace yy;
23 
24 void foo() {
25   int i; // expected-warning {{declaration shadows a variable in namespace '<anonymous>'}}
26   int j; // expected-warning {{declaration shadows a variable in namespace 'one::two'}}
27   int m;
28 }
29 
30 class A {
31   static int data; // expected-note {{previous declaration}}
32   int field; // expected-note {{previous declaration}}
33 
34   void test() {
35     char *field; // expected-warning {{declaration shadows a field of 'A'}}
36     char *data; // expected-warning {{declaration shadows a static data member of 'A'}}
37   }
38 };
39 
40 // TODO: this should warn, <rdar://problem/5018057>
41 class B : A {
42   int data;
43   static int field;
44 };
45 
46 // rdar://8900456
47 namespace rdar8900456 {
48 struct Foo {
49   static void Baz();
50 private:
51   int Bar;
52 };
53 
54 void Foo::Baz() {
55   double Bar = 12; // Don't warn.
56 }
57 }
58 
59 // http://llvm.org/PR9160
60 namespace PR9160 {
61 struct V {
62   V(int);
63 };
64 struct S {
65   V v;
66   static void m() {
67     if (1) {
68       V v(0);
69     }
70   }
71 };
72 }
73 
74 extern int bob; // expected-note {{previous declaration is here}}
75 
76 // rdar://8883302
77 void rdar8883302() {
78   extern int bob; // don't warn for shadowing.
79 }
80 
81 void test8() {
82   int bob; // expected-warning {{declaration shadows a variable in the global namespace}}
83 }
84