173 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s2 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 namespace A3::extra::specifiers = A2; // expected-error {{alias must be a single identifier}}52}53 54int f() {55 return I::A2::i;56}57 58namespace J {59 namespace A { 60 namespace B { void func (); }61 }62 63 namespace C = A;64 65 using namespace C::B;66 67 void g() {68 func();69 }70}71 72namespace K {73 namespace KA { void func(); }74 75 void f() {76 namespace KB = KA;77 KB::func();78 }79 80 template <class T> void g() {81 namespace KC = KA;82 KC::func();83 }84 template void g<int>();85 template void g<long>();86 87 void h() {88 KB::func(); // expected-error {{undeclared identifier 'KB'}}89 KC::func(); // expected-error {{undeclared identifier 'KC'}}90 }91}92 93namespace {94 class C1;95}96namespace {97 class C1;98}99C1 *pc1 = 0;100 101namespace N {102 namespace {103 class C2;104 }105}106namespace N {107 namespace {108 class C2;109 }110}111N::C2 *pc2 = 0;112 113// PR6341114namespace A = N;115namespace N { }116namespace A = N;117 118A::X nx;119 120namespace PR7014 {121 namespace X122 {123 namespace Y {}124 }125 126 using namespace X;127 128 namespace Y = X::Y;129}130 131namespace PR25731 {132 void f() {133 namespace X = PR25731;134 namespace X = PR25731;135 X::f();136 }137}138 139namespace MultipleUnambiguousLookupResults {140 namespace A { int y; }141 namespace B {142 namespace X { int x; }143 namespace Y = A;144 namespace Z = A; // expected-note {{candidate}}145 }146 namespace C {147 namespace X = B::X;148 namespace Y = A;149 namespace Z = X; // expected-note {{candidate}}150 }151 using namespace B;152 using namespace C;153 int x1 = X::x; // ok, unambiguous154 int y1 = Y::y; // ok, unambiguous155 int z1 = Z::x; // expected-error {{ambiguous}}156 157 namespace X = C::X;158 namespace Y = A;159 int x2 = X::x; // ok, unambiguous160 int y2 = Y::y; // ok, unambiguous161}162 163namespace RedeclOfNonNamespace {164 int a; // expected-note {{previous}}165 namespace X { int b; }166 using X::b; // expected-note {{previous}}167 namespace c {} // expected-note {{previous}}168 169 namespace a = X; // expected-error {{different kind}}170 namespace b = X; // expected-error {{different kind}}171 namespace c = X; // expected-error-re {{redefinition of 'c'{{$}}}}172}173