xref: /llvm-project/clang/test/SemaCXX/warn-shadow.cpp (revision f46cc65f445e2f14ee842364a75b28596147686b)
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