1// RUN: %clang_cc1 -fsyntax-only -verify %s 2 3namespace N { struct X { }; }; 4 5namespace A = N; 6 7int B; // expected-note {{previous definition is here}} 8namespace B = N; // expected-error {{redefinition of 'B' as different kind of symbol}} 9 10namespace C { } // expected-note {{previous definition is here}} 11namespace C = N; // expected-error {{redefinition of 'C'}} 12 13int i; 14namespace D = i; // expected-error {{expected namespace name}} 15 16namespace E = N::Foo; // expected-error {{expected namespace name}} 17 18namespace 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 25namespace G { 26 namespace B = N; 27} 28 29namespace 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 42namespace I { 43 namespace A1 { int i; } 44 45 namespace A2 = A1; 46} 47 48int f() { 49 return I::A2::i; 50} 51 52namespace 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 66namespace 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 87namespace { 88 class C1; 89} 90namespace { 91 class C1; 92} 93C1 *pc1 = 0; 94 95namespace N { 96 namespace { 97 class C2; 98 } 99} 100namespace N { 101 namespace { 102 class C2; 103 } 104} 105N::C2 *pc2 = 0; 106 107// PR6341 108namespace A = N; 109namespace N { } 110namespace A = N; 111 112A::X nx; 113 114namespace PR7014 { 115 namespace X 116 { 117 namespace Y {} 118 } 119 120 using namespace X; 121 122 namespace Y = X::Y; 123} 124