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 = 15i; // expected-error {{expected namespace name}} 16 17namespace E1 = N:: 18Foo; // expected-error {{expected namespace name}} 19namespace E2 = N:: 20X; // expected-error {{expected namespace name}} 21 22namespace 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 29namespace G { 30 namespace B = N; 31} 32 33namespace 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 46namespace I { 47 namespace A1 { int i; } 48 49 namespace A2 = A1; 50} 51 52int f() { 53 return I::A2::i; 54} 55 56namespace 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 70namespace 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 91namespace { 92 class C1; 93} 94namespace { 95 class C1; 96} 97C1 *pc1 = 0; 98 99namespace N { 100 namespace { 101 class C2; 102 } 103} 104namespace N { 105 namespace { 106 class C2; 107 } 108} 109N::C2 *pc2 = 0; 110 111// PR6341 112namespace A = N; 113namespace N { } 114namespace A = N; 115 116A::X nx; 117 118namespace PR7014 { 119 namespace X 120 { 121 namespace Y {} 122 } 123 124 using namespace X; 125 126 namespace Y = X::Y; 127} 128 129namespace PR25731 { 130 void f() { 131 namespace X = PR25731; 132 namespace X = PR25731; 133 X::f(); 134 } 135} 136 137namespace MultipleUnambiguousLookupResults { 138 namespace A { int y; } 139 namespace B { 140 namespace X { int x; } 141 namespace Y = A; 142 namespace Z = A; // expected-note {{candidate}} 143 } 144 namespace C { 145 namespace X = B::X; 146 namespace Y = A; 147 namespace Z = X; // expected-note {{candidate}} 148 } 149 using namespace B; 150 using namespace C; 151 int x1 = X::x; // ok, unambiguous 152 int y1 = Y::y; // ok, unambiguous 153 int z1 = Z::x; // expected-error {{ambiguous}} 154 155 namespace X = C::X; 156 namespace Y = A; 157 int x2 = X::x; // ok, unambiguous 158 int y2 = Y::y; // ok, unambiguous 159} 160 161namespace RedeclOfNonNamespace { 162 int a; // expected-note {{previous}} 163 namespace X { int b; } 164 using X::b; // expected-note {{previous}} 165 namespace c {} // expected-note {{previous}} 166 167 namespace a = X; // expected-error {{different kind}} 168 namespace b = X; // expected-error {{different kind}} 169 namespace c = X; // expected-error-re {{redefinition of 'c'{{$}}}} 170} 171