qualified-id-lookup.cpp revision 074149e11baf5f7db12f84efd5c34ba6e35d5cdf
144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor// RUN: clang -fsyntax-only -verify %s 244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns { 444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor int f(); // expected-note{{previous declaration is here}} 5074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor 6074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor enum E { 7074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor Enumerator 8074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor }; 944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 1044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns { 1144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor double f(); // expected-error{{functions that differ only in their return type cannot be overloaded}} 12074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor 13074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor int x = Enumerator; 1444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 1544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 1644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns2 { 1744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor float f(); 1844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 1944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 20074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregorint y = Ns::Enumerator; 21074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor 2244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns2 { 2344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor float f(int); // expected-note{{previous declaration is here}} 2444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 2544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 2644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns2 { 2744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor double f(int); // expected-error{{functions that differ only in their return type cannot be overloaded}} 2844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 2944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 3044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace N { 3144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor int& f1(); 3244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 3344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 3444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace N { 3544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor struct f1 { 3644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor static int member; 3744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor }; 3844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 3944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor void test_f1() { 4044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor int &i1 = f1(); 4144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor } 4244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 4344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 4444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace N { 4544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor float& f1(int); 4644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 4744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor struct f2 { 4844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor static int member; 4944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor }; 5044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor void f2(); 5144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 5244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 5344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregorint i1 = N::f1::member; 5444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregortypedef struct N::f1 type1; 5544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregorint i2 = N::f2::member; 5644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregortypedef struct N::f2 type2; 5744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor 5844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregorvoid test_f1(int i) { 5944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor int &v1 = N::f1(); 6044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor float &v2 = N::f1(i); 61a67865c64e2185817703b602ec24163b286abaabChris Lattner int v3 = ::i1; 6244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor} 63a67865c64e2185817703b602ec24163b286abaabChris Lattner 6483cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattnertypedef int f2_type; 6583cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattnernamespace a { 6683cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner typedef int f2_type(int, int); 6783cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner 6883cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner void test_f2() { 6983cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner ::f2_type(1, 2); // expected-error {{function-style cast to a builtin type can only take one argument}} 7083cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner } 7183cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner} 7283cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner 7383cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner 7483cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner 75