// RUN: %clang_cc1 -fsyntax-only -verify %s namespace N { struct X { }; }; namespace A = N; int B; // expected-note {{previous definition is here}} namespace B = N; // expected-error {{redefinition of 'B' as different kind of symbol}} namespace C { } // expected-note {{previous definition is here}} namespace C = N; // expected-error {{redefinition of 'C'}} int i; namespace D = i; // expected-error {{expected namespace name}} namespace E1 = N:: Foo; // expected-error {{expected namespace name}} namespace E2 = N:: X; // expected-error {{expected namespace name}} namespace F { namespace A { namespace B { } } // expected-note {{candidate found by name lookup is 'F::A::B'}} namespace B { } // expected-note {{candidate found by name lookup is 'F::B'}} using namespace A; namespace D = B; // expected-error {{reference to 'B' is ambiguous}} } namespace G { namespace B = N; } namespace H { namespace A1 { } namespace A2 { } // These all point to A1. namespace B = A1; namespace B = A1; namespace C = B; namespace B = C; // expected-note {{previously defined as an alias for 'A1'}} namespace B = A2; // expected-error {{redefinition of 'B' as an alias for a different namespace}} } namespace I { namespace A1 { int i; } namespace A2 = A1; } int f() { return I::A2::i; } namespace J { namespace A { namespace B { void func (); } } namespace C = A; using namespace C::B; void g() { func(); } } namespace K { namespace KA { void func(); } void f() { namespace KB = KA; KB::func(); } template <class T> void g() { namespace KC = KA; KC::func(); } template void g<int>(); template void g<long>(); void h() { KB::func(); // expected-error {{undeclared identifier 'KB'}} KC::func(); // expected-error {{undeclared identifier 'KC'}} } } namespace { class C1; } namespace { class C1; } C1 *pc1 = 0; namespace N { namespace { class C2; } } namespace N { namespace { class C2; } } N::C2 *pc2 = 0; // PR6341 namespace A = N; namespace N { } namespace A = N; A::X nx; namespace PR7014 { namespace X { namespace Y {} } using namespace X; namespace Y = X::Y; } namespace PR25731 { void f() { namespace X = PR25731; namespace X = PR25731; X::f(); } } namespace MultipleUnambiguousLookupResults { namespace A { int y; } namespace B { namespace X { int x; } namespace Y = A; namespace Z = A; // expected-note {{candidate}} } namespace C { namespace X = B::X; namespace Y = A; namespace Z = X; // expected-note {{candidate}} } using namespace B; using namespace C; int x1 = X::x; // ok, unambiguous int y1 = Y::y; // ok, unambiguous int z1 = Z::x; // expected-error {{ambiguous}} namespace X = C::X; namespace Y = A; int x2 = X::x; // ok, unambiguous int y2 = Y::y; // ok, unambiguous } namespace RedeclOfNonNamespace { int a; // expected-note {{previous}} namespace X { int b; } using X::b; // expected-note {{previous}} namespace c {} // expected-note {{previous}} namespace a = X; // expected-error {{different kind}} namespace b = X; // expected-error {{different kind}} namespace c = X; // expected-error-re {{redefinition of 'c'{{$}}}} }