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
foo()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
test()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
Baz()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;
mPR9160::S66 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
rdar8883302()77 void rdar8883302() {
78 extern int bob; // don't warn for shadowing.
79 }
80
test8()81 void test8() {
82 int bob; // expected-warning {{declaration shadows a variable in the global namespace}}
83 }
84