1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns { 344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor int f(); // expected-note{{previous declaration is here}} 4074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor 5074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor enum E { 6074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor Enumerator 7074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor }; 844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns { 1044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor double f(); // expected-error{{functions that differ only in their return type cannot be overloaded}} 11074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor 12074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor int x = Enumerator; 1344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 1444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 1544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns2 { 1644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor float f(); 1744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 1844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 19074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregorint y = Ns::Enumerator; 20074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor 2144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns2 { 2244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor float f(int); // expected-note{{previous declaration is here}} 2344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 2444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 2544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns2 { 2644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor double f(int); // expected-error{{functions that differ only in their return type cannot be overloaded}} 2744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 2844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 2944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace N { 3044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor int& f1(); 3144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 3244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 3344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace N { 3444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor struct f1 { 3544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor static int member; 36518fda1d121dcba3ad7276f5e9a94f733f6e5ecdDouglas Gregor 37518fda1d121dcba3ad7276f5e9a94f733f6e5ecdDouglas Gregor typedef int type; 38518fda1d121dcba3ad7276f5e9a94f733f6e5ecdDouglas Gregor 39518fda1d121dcba3ad7276f5e9a94f733f6e5ecdDouglas Gregor void foo(type); 4044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor }; 4144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 4244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor void test_f1() { 4344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor int &i1 = f1(); 4444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor } 4544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 4644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 470b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregorvoid N::f1::foo(int i) { 480b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor f1::member = i; 490b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor f1::type &ir = i; 500b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor} 51518fda1d121dcba3ad7276f5e9a94f733f6e5ecdDouglas Gregor 5244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace N { 53518fda1d121dcba3ad7276f5e9a94f733f6e5ecdDouglas Gregor float& f1(int x) { 54518fda1d121dcba3ad7276f5e9a94f733f6e5ecdDouglas Gregor N::f1::type& i1 = x; 55eb11cd078ba8682bbb9b082f8f6ead8be5c98581Douglas Gregor f1::type& i2 = x; 56518fda1d121dcba3ad7276f5e9a94f733f6e5ecdDouglas Gregor } 5744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 5844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor struct f2 { 5944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor static int member; 6044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor }; 6144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor void f2(); 6244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 6344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 6444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregorint i1 = N::f1::member; 6544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregortypedef struct N::f1 type1; 6644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregorint i2 = N::f2::member; 6744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregortypedef struct N::f2 type2; 6844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 6944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregorvoid test_f1(int i) { 7044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor int &v1 = N::f1(); 7144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor float &v2 = N::f1(i); 72a67865c64e2185817703b602ec24163b286abaabChris Lattner int v3 = ::i1; 731a49af9681c350fef58e677f85ccb9a77e8e9d0aDouglas Gregor int v4 = N::f1::member; 7444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 75a67865c64e2185817703b602ec24163b286abaabChris Lattner 7683cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattnertypedef int f2_type; 7783cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattnernamespace a { 7883cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner typedef int f2_type(int, int); 7983cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner 8083cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner void test_f2() { 8119311e70edaa2d7bb0d709344aebea4fbbae2da4Douglas Gregor ::f2_type(1, 2); // expected-error {{excess elements in scalar initializer}} 8283cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner } 8383cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner} 8483cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner 85bc468ba19c0bad9bf4a40ff39d8fad7e471bfbf5Douglas Gregor// PR clang/3291 86bc468ba19c0bad9bf4a40ff39d8fad7e471bfbf5Douglas Gregornamespace a { 87bc468ba19c0bad9bf4a40ff39d8fad7e471bfbf5Douglas Gregor namespace a { // A1 88bc468ba19c0bad9bf4a40ff39d8fad7e471bfbf5Douglas Gregor namespace a { // A2 896e4f6f865010649bc3969e57436b5501544a0c39Kaelyn Uhrain int i; // expected-note{{'a::a::a::i' declared here}} 90bc468ba19c0bad9bf4a40ff39d8fad7e471bfbf5Douglas Gregor } 91bc468ba19c0bad9bf4a40ff39d8fad7e471bfbf5Douglas Gregor } 92bc468ba19c0bad9bf4a40ff39d8fad7e471bfbf5Douglas Gregor} 9383cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner 94bc468ba19c0bad9bf4a40ff39d8fad7e471bfbf5Douglas Gregorvoid test_a() { 956e4f6f865010649bc3969e57436b5501544a0c39Kaelyn Uhrain a::a::i = 3; // expected-error{{no member named 'i' in namespace 'a::a'; did you mean 'a::a::a::i'?}} 96bc468ba19c0bad9bf4a40ff39d8fad7e471bfbf5Douglas Gregor a::a::a::i = 4; 97651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines a::a::j = 3; // expected-error-re{{no member named 'j' in namespace 'a::a'{{$}}}} 98bc468ba19c0bad9bf4a40ff39d8fad7e471bfbf5Douglas Gregor} 99bc468ba19c0bad9bf4a40ff39d8fad7e471bfbf5Douglas Gregor 1007c2342dd4c9947806842e5aca3d2bb2e542853c9John McCallstruct Undef { // expected-note{{definition of 'Undef' is not complete until the closing '}'}} 1010b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor typedef int type; 1020b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor 1030b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor Undef::type member; 1040b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor 1057c2342dd4c9947806842e5aca3d2bb2e542853c9John McCall static int size = sizeof(Undef); // expected-error{{invalid application of 'sizeof' to an incomplete type 'Undef'}} 1060b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor 1070b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor int f(); 1080b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor}; 1090b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor 1100b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregorint Undef::f() { 1110b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor return sizeof(Undef); 1120b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor} 113336e7743b8e2222d8557e2cf7c100c8f878df630John McCall 114336e7743b8e2222d8557e2cf7c100c8f878df630John McCall// PR clang/5667 115336e7743b8e2222d8557e2cf7c100c8f878df630John McCallnamespace test1 { 116336e7743b8e2222d8557e2cf7c100c8f878df630John McCall template <typename T> struct is_class { 117336e7743b8e2222d8557e2cf7c100c8f878df630John McCall enum { value = 0 }; 118336e7743b8e2222d8557e2cf7c100c8f878df630John McCall }; 119336e7743b8e2222d8557e2cf7c100c8f878df630John McCall 120336e7743b8e2222d8557e2cf7c100c8f878df630John McCall template <typename T> class ClassChecker { 121336e7743b8e2222d8557e2cf7c100c8f878df630John McCall bool isClass() { 122336e7743b8e2222d8557e2cf7c100c8f878df630John McCall return is_class<T>::value; 123336e7743b8e2222d8557e2cf7c100c8f878df630John McCall } 124336e7743b8e2222d8557e2cf7c100c8f878df630John McCall }; 125336e7743b8e2222d8557e2cf7c100c8f878df630John McCall 126336e7743b8e2222d8557e2cf7c100c8f878df630John McCall template class ClassChecker<int>; 127336e7743b8e2222d8557e2cf7c100c8f878df630John McCall} 1284074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor 1294074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregornamespace PR6830 { 1304074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor namespace foo { 1314074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor 1324074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor class X { 1334074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor public: 1344074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor X() {} 1354074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor }; 1364074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor 1374074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor } // namespace foo 1384074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor 1394074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor class Z { 1404074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor public: 1414074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor explicit Z(const foo::X& x) {} 1424074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor 1434074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor void Work() {} 1444074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor }; 1454074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor 1464074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor void Test() { 1474074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor Z(foo::X()).Work(); 1484074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor } 1494074eefc4c2dc0c554f2e79f7114b309053f9885Douglas Gregor} 150173a37a57b79bd8f94b85c2273039e760b159922Nick Lewycky 151173a37a57b79bd8f94b85c2273039e760b159922Nick Lewyckynamespace pr12339 { 152aa71567ba4b8a10e9a7d668bf93e35413d7260a8David Majnemer extern "C" void i; // expected-error{{variable has incomplete type 'void'}} 153173a37a57b79bd8f94b85c2273039e760b159922Nick Lewycky pr12339::FOO // expected-error{{no type named 'FOO' in namespace 'pr12339'}} 154173a37a57b79bd8f94b85c2273039e760b159922Nick Lewycky} // expected-error{{expected unqualified-id}} 155