1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 28d7ba402ba062994e242c97719685d6d66a056ddAnders Carlsson 3c67b03260dbf4127e09b03302ff844a24e41394fDouglas Gregornamespace N { struct X { }; }; 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; 14bf9658c3c200ee19bf0b6b157149f2376e39d270Richard Smithnamespace D = 15bf9658c3c200ee19bf0b6b157149f2376e39d270Richard Smithi; // expected-error {{expected namespace name}} 165721c68299edddd6d6dc32f6ea5441bcfa20dfd8Anders Carlsson 17bf9658c3c200ee19bf0b6b157149f2376e39d270Richard Smithnamespace E1 = N:: 18bf9658c3c200ee19bf0b6b157149f2376e39d270Richard SmithFoo; // expected-error {{expected namespace name}} 19bf9658c3c200ee19bf0b6b157149f2376e39d270Richard Smithnamespace E2 = N:: 20bf9658c3c200ee19bf0b6b157149f2376e39d270Richard SmithX; // expected-error {{expected namespace name}} 21a1a1b306946e5730f7a47f7be920061cfd7e7259Anders Carlsson 22a1a1b306946e5730f7a47f7be920061cfd7e7259Anders Carlssonnamespace F { 23a1a1b306946e5730f7a47f7be920061cfd7e7259Anders Carlsson namespace A { namespace B { } } // expected-note {{candidate found by name lookup is 'F::A::B'}} 24a1a1b306946e5730f7a47f7be920061cfd7e7259Anders Carlsson namespace B { } // expected-note {{candidate found by name lookup is 'F::B'}} 25a1a1b306946e5730f7a47f7be920061cfd7e7259Anders Carlsson using namespace A; 26a1a1b306946e5730f7a47f7be920061cfd7e7259Anders Carlsson namespace D = B; // expected-error {{reference to 'B' is ambiguous}} 27a1a1b306946e5730f7a47f7be920061cfd7e7259Anders Carlsson} 28dd729fce03899ed03a212a49d7b03e043ce6ed40Anders Carlsson 29dd729fce03899ed03a212a49d7b03e043ce6ed40Anders Carlssonnamespace G { 30dd729fce03899ed03a212a49d7b03e043ce6ed40Anders Carlsson namespace B = N; 31dd729fce03899ed03a212a49d7b03e043ce6ed40Anders Carlsson} 3281c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson 3381c85c421197a602523781a6ef730639c4c6ea51Anders Carlssonnamespace H { 3481c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace A1 { } 3581c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace A2 { } 3681c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson 3781c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson // These all point to A1. 3881c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace B = A1; // expected-note {{previous definition is here}} 3981c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace B = A1; 4081c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace C = B; 4181c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace B = C; 4281c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson 4381c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace B = A2; // expected-error {{redefinition of 'B' as different kind of symbol}} 4481c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson} 4581c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson 4681c85c421197a602523781a6ef730639c4c6ea51Anders Carlssonnamespace I { 4781c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace A1 { int i; } 4881c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson 4981c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson namespace A2 = A1; 5081c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson} 5181c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson 5281c85c421197a602523781a6ef730639c4c6ea51Anders Carlssonint f() { 5381c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson return I::A2::i; 5481c85c421197a602523781a6ef730639c4c6ea51Anders Carlsson} 55b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson 56b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlssonnamespace J { 57b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson namespace A { 58b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson namespace B { void func (); } 59b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson } 60b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson 61b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson namespace C = A; 62b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson 63b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson using namespace C::B; 64b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson 65b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson void g() { 66b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson func(); 67b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson } 68b73e75cfda58c89e6cb196668409daa3c7e45d7fAnders Carlsson} 693dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall 703dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCallnamespace K { 713dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall namespace KA { void func(); } 723dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall 733dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall void f() { 743dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall namespace KB = KA; 753dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall KB::func(); 763dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall } 773dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall 783dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall template <class T> void g() { 793dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall namespace KC = KA; 803dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall KC::func(); 813dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall } 823dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall template void g<int>(); 833dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall template void g<long>(); 843dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall 853dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall void h() { 863dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall KB::func(); // expected-error {{undeclared identifier 'KB'}} 873dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall KC::func(); // expected-error {{undeclared identifier 'KC'}} 883dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall } 893dbd3d5c04cd5abd7dfd83b15f51d7c610a3c512John McCall} 90c67b03260dbf4127e09b03302ff844a24e41394fDouglas Gregor 916ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattnernamespace { 926ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner class C1; 936ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner} 946ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattnernamespace { 956ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner class C1; 966ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner} 976ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris LattnerC1 *pc1 = 0; 986ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner 996ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattnernamespace N { 1006ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner namespace { 1016ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner class C2; 1026ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner } 1036ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner} 1046ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattnernamespace N { 1056ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner namespace { 1066ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner class C2; 1076ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner } 1086ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner} 1096ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris LattnerN::C2 *pc2 = 0; 1106ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner 111c67b03260dbf4127e09b03302ff844a24e41394fDouglas Gregor// PR6341 112c67b03260dbf4127e09b03302ff844a24e41394fDouglas Gregornamespace A = N; 113c67b03260dbf4127e09b03302ff844a24e41394fDouglas Gregornamespace N { } 114c67b03260dbf4127e09b03302ff844a24e41394fDouglas Gregornamespace A = N; 115c67b03260dbf4127e09b03302ff844a24e41394fDouglas Gregor 116c67b03260dbf4127e09b03302ff844a24e41394fDouglas GregorA::X nx; 117c67b03260dbf4127e09b03302ff844a24e41394fDouglas Gregor 118ae374759fce6c74d5be29dfe058d4a727154115cDouglas Gregornamespace PR7014 { 119ae374759fce6c74d5be29dfe058d4a727154115cDouglas Gregor namespace X 120ae374759fce6c74d5be29dfe058d4a727154115cDouglas Gregor { 121ae374759fce6c74d5be29dfe058d4a727154115cDouglas Gregor namespace Y {} 122ae374759fce6c74d5be29dfe058d4a727154115cDouglas Gregor } 123ae374759fce6c74d5be29dfe058d4a727154115cDouglas Gregor 124ae374759fce6c74d5be29dfe058d4a727154115cDouglas Gregor using namespace X; 125ae374759fce6c74d5be29dfe058d4a727154115cDouglas Gregor 126ae374759fce6c74d5be29dfe058d4a727154115cDouglas Gregor namespace Y = X::Y; 127ae374759fce6c74d5be29dfe058d4a727154115cDouglas Gregor} 128