namespace-alias.cpp revision 3dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512
1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 28d7ba402ba062994e242c97719685d6d66a056ddAnders Carlsson 38d7ba402ba062994e242c97719685d6d66a056ddAnders Carlssonnamespace N { }; 48d7ba402ba062994e242c97719685d6d66a056ddAnders Carlsson 58d7ba402ba062994e242c97719685d6d66a056ddAnders Carlssonnamespace A = N; 68d7ba402ba062994e242c97719685d6d66a056ddAnders Carlsson 78d7ba402ba062994e242c97719685d6d66a056ddAnders Carlssonint B; // expected-note {{previous definition is here}} 88d7ba402ba062994e242c97719685d6d66a056ddAnders Carlssonnamespace B = N; // expected-error {{redefinition of 'B' as different kind of symbol}} 98d7ba402ba062994e242c97719685d6d66a056ddAnders Carlsson 108d7ba402ba062994e242c97719685d6d66a056ddAnders Carlssonnamespace C { } // expected-note {{previous definition is here}} 118d7ba402ba062994e242c97719685d6d66a056ddAnders Carlssonnamespace C = N; // expected-error {{redefinition of 'C'}} 125721c68299edddd6d6dc32f6ea5441bcfa20dfd8Anders Carlsson 135721c68299edddd6d6dc32f6ea5441bcfa20dfd8Anders Carlssonint i; 145721c68299edddd6d6dc32f6ea5441bcfa20dfd8Anders Carlssonnamespace D = i; // expected-error {{expected namespace name}} 155721c68299edddd6d6dc32f6ea5441bcfa20dfd8Anders Carlsson 165721c68299edddd6d6dc32f6ea5441bcfa20dfd8Anders Carlssonnamespace E = N::Foo; // expected-error {{expected namespace name}} 17a1a1b306946e5730f7a47f7be920061cfd7e7259Anders Carlsson 18a1a1b306946e5730f7a47f7be920061cfd7e7259Anders Carlssonnamespace F { 19a1a1b306946e5730f7a47f7be920061cfd7e7259Anders Carlsson namespace A { namespace B { } } // expected-note {{candidate found by name lookup is 'F::A::B'}} 20a1a1b306946e5730f7a47f7be920061cfd7e7259Anders Carlsson namespace B { } // expected-note {{candidate found by name lookup is 'F::B'}} 21a1a1b306946e5730f7a47f7be920061cfd7e7259Anders Carlsson using namespace A; 22a1a1b306946e5730f7a47f7be920061cfd7e7259Anders Carlsson namespace D = B; // expected-error {{reference to 'B' is ambiguous}} 23a1a1b306946e5730f7a47f7be920061cfd7e7259Anders Carlsson} 24dd729fce03899ed03a212a49d7b03e043ce6ed40Anders Carlsson 25dd729fce03899ed03a212a49d7b03e043ce6ed40Anders Carlssonnamespace G { 26dd729fce03899ed03a212a49d7b03e043ce6ed40Anders Carlsson namespace B = N; 27dd729fce03899ed03a212a49d7b03e043ce6ed40Anders Carlsson} 2881c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson 2981c85c421197a602523781a6ef730639c4c6ea51Anders Carlssonnamespace H { 3081c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace A1 { } 3181c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace A2 { } 3281c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson 3381c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson // These all point to A1. 3481c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace B = A1; // expected-note {{previous definition is here}} 3581c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace B = A1; 3681c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace C = B; 3781c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace B = C; 3881c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson 3981c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace B = A2; // expected-error {{redefinition of 'B' as different kind of symbol}} 4081c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson} 4181c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson 4281c85c421197a602523781a6ef730639c4c6ea51Anders Carlssonnamespace I { 4381c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace A1 { int i; } 4481c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson 4581c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace A2 = A1; 4681c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson} 4781c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson 4881c85c421197a602523781a6ef730639c4c6ea51Anders Carlssonint f() { 4981c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson return I::A2::i; 5081c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson} 51b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson 52b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlssonnamespace J { 53b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson namespace A { 54b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson namespace B { void func (); } 55b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson } 56b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson 57b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson namespace C = A; 58b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson 59b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson using namespace C::B; 60b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson 61b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson void g() { 62b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson func(); 63b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson } 64b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson} 653dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall 663dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCallnamespace K { 673dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall namespace KA { void func(); } 683dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall 693dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall void f() { 703dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall namespace KB = KA; 713dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall KB::func(); 723dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall } 733dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall 743dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall template <class T> void g() { 753dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall namespace KC = KA; 763dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall KC::func(); 773dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall } 783dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall template void g<int>(); 793dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall template void g<long>(); 803dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall 813dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall void h() { 823dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall KB::func(); // expected-error {{undeclared identifier 'KB'}} 833dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall KC::func(); // expected-error {{undeclared identifier 'KC'}} 843dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall } 853dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall} 86