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