// RUN: clang-cc -fsyntax-only -verify %s namespace N { }; 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 E = N::Foo; // 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; // expected-note {{previous definition is here}} namespace B = A1; namespace C = B; namespace B = C; namespace B = A2; // expected-error {{redefinition of 'B' as different kind of symbol}} } 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(); } }