// RUN: %clang_cc1 -verify -fsyntax-only -Wshadow-all %s namespace { int i; // expected-note {{previous declaration is here}} } namespace one { namespace two { int j; // expected-note {{previous declaration is here}} } } namespace xx { int m; } namespace yy { int m; } using namespace one::two; using namespace xx; using namespace yy; void foo() { int i; // expected-warning {{declaration shadows a variable in namespace '(anonymous)'}} int j; // expected-warning {{declaration shadows a variable in namespace 'one::two'}} int m; } class A { static int data; // expected-note {{previous declaration}} // expected-note@+1 {{previous declaration}} int field; int f1, f2, f3, f4; // expected-note 8 {{previous declaration is here}} // The initialization is safe, but the modifications are not. A(int f1, int f2, int f3, int f4) // expected-note-re 4 {{variable 'f{{[0-4]}}' is declared here}} : f1(f1) { f1 = 3; // expected-warning {{modifying constructor parameter 'f1' that shadows a field of 'A'}} f1 = 4; // one warning per shadow f2++; // expected-warning {{modifying constructor parameter 'f2' that shadows a field of 'A'}} --f3; // expected-warning {{modifying constructor parameter 'f3' that shadows a field of 'A'}} f4 += 2; // expected-warning {{modifying constructor parameter 'f4' that shadows a field of 'A'}} } // The initialization is safe, but the modifications are not. // expected-warning-re@+1 4 {{constructor parameter 'f{{[0-4]}}' shadows the field 'f{{[0-9]}}' of 'A'}} A(int f1, int f2, int f3, int f4, double overload_dummy) {} void test() { char *field; // expected-warning {{declaration shadows a field of 'A'}} char *data; // expected-warning {{declaration shadows a static data member of 'A'}} } }; // TODO: this should warn, <rdar://problem/5018057> class B : A { int data; static int field; }; // rdar://8900456 namespace rdar8900456 { struct Foo { static void Baz(); private: int Bar; }; void Foo::Baz() { double Bar = 12; // Don't warn. } } // http://llvm.org/PR9160 namespace PR9160 { struct V { V(int); }; struct S { V v; static void m() { if (1) { V v(0); } } }; } extern int bob; // expected-note {{previous declaration is here}} // rdar://8883302 void rdar8883302() { extern int bob; // don't warn for shadowing. } void test8() { int bob; // expected-warning {{declaration shadows a variable in the global namespace}} }