Home | History | Annotate | Download | only in SemaCXX
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 
      3 namespace N { struct X { }; };
      4 
      5 namespace A = N;
      6 
      7 int B; // expected-note {{previous definition is here}}
      8 namespace B = N; // expected-error {{redefinition of 'B' as different kind of symbol}}
      9 
     10 namespace C { } // expected-note {{previous definition is here}}
     11 namespace C = N; // expected-error {{redefinition of 'C'}}
     12 
     13 int i;
     14 namespace D = i; // expected-error {{expected namespace name}}
     15 
     16 namespace E = N::Foo; // expected-error {{expected namespace name}}
     17 
     18 namespace F {
     19   namespace A { namespace B { } } // expected-note {{candidate found by name lookup is 'F::A::B'}}
     20   namespace B { } // expected-note {{candidate found by name lookup is 'F::B'}}
     21   using namespace A;
     22   namespace D = B; // expected-error {{reference to 'B' is ambiguous}}
     23 }
     24 
     25 namespace G {
     26   namespace B = N;
     27 }
     28 
     29 namespace H {
     30   namespace A1 { }
     31   namespace A2 { }
     32 
     33   // These all point to A1.
     34   namespace B = A1; // expected-note {{previous definition is here}}
     35   namespace B = A1;
     36   namespace C = B;
     37   namespace B = C;
     38 
     39   namespace B = A2; // expected-error {{redefinition of 'B' as different kind of symbol}}
     40 }
     41 
     42 namespace I {
     43   namespace A1 { int i; }
     44 
     45   namespace A2 = A1;
     46 }
     47 
     48 int f() {
     49   return I::A2::i;
     50 }
     51 
     52 namespace J {
     53   namespace A {
     54     namespace B { void func (); }
     55   }
     56 
     57   namespace C = A;
     58 
     59   using namespace C::B;
     60 
     61   void g() {
     62     func();
     63   }
     64 }
     65 
     66 namespace K {
     67   namespace KA { void func(); }
     68 
     69   void f() {
     70     namespace KB = KA;
     71     KB::func();
     72   }
     73 
     74   template <class T> void g() {
     75     namespace KC = KA;
     76     KC::func();
     77   }
     78   template void g<int>();
     79   template void g<long>();
     80 
     81   void h() {
     82     KB::func(); // expected-error {{undeclared identifier 'KB'}}
     83     KC::func(); // expected-error {{undeclared identifier 'KC'}}
     84   }
     85 }
     86 
     87 namespace {
     88   class C1;
     89 }
     90 namespace {
     91   class C1;
     92 }
     93 C1 *pc1 = 0;
     94 
     95 namespace N {
     96   namespace {
     97     class C2;
     98   }
     99 }
    100 namespace N {
    101   namespace {
    102     class C2;
    103   }
    104 }
    105 N::C2 *pc2 = 0;
    106 
    107 // PR6341
    108 namespace A = N;
    109 namespace N { }
    110 namespace A = N;
    111 
    112 A::X nx;
    113 
    114 namespace PR7014 {
    115   namespace X
    116   {
    117     namespace Y {}
    118   }
    119 
    120   using namespace X;
    121 
    122   namespace Y = X::Y;
    123 }
    124