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