// RUN: %clang_cc1 -verify -fsyntax-only -Wshadow %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 ''}} int j; // expected-warning {{declaration shadows a variable in namespace 'one::two'}} int m; } class A { static int data; // expected-note {{previous declaration}} int field; // expected-note {{previous declaration}} 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, 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}} }