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