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; 39 namespace B = A1; 40 namespace C = B; 41 namespace B = C; // expected-note {{previously defined as an alias for 'A1'}} 42 43 namespace B = A2; // expected-error {{redefinition of 'B' as an alias for a different namespace}} 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