Home | History | Annotate | Download | only in SemaCXX
      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 
     59 // http://llvm.org/PR9160
     60 namespace PR9160 {
     61 struct V {
     62   V(int);
     63 };
     64 struct S {
     65   V v;
     66   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
     77 void rdar8883302() {
     78   extern int bob; // don't warn for shadowing.
     79 }
     80 
     81 void test8() {
     82   int bob; // expected-warning {{declaration shadows a variable in the global namespace}}
     83 }
     84