1 // RUN: clang-cc -fsyntax-only -verify %s 2 3 namespace A { 4 short i; // expected-note 2{{candidate found by name lookup is 'A::i'}} 5 namespace B { 6 long i; // expected-note{{candidate found by name lookup is 'A::B::i'}} 7 void f() {} // expected-note{{candidate function}} 8 int k; 9 namespace E {} // \ 10 expected-note{{candidate found by name lookup is 'A::B::E'}} 11 } 12 13 namespace E {} // expected-note{{candidate found by name lookup is 'A::E'}} 14 15 namespace C { 16 using namespace B; 17 namespace E {} // \ 18 expected-note{{candidate found by name lookup is 'A::C::E'}} 19 } 20 21 void f() {} // expected-note{{candidate function}} 22 23 class K1 { 24 void foo(); 25 }; 26 27 void local_i() { 28 char i; 29 using namespace A; 30 using namespace B; 31 int a[sizeof(i) == sizeof(char)? 1 : -1]; // okay 32 } 33 namespace B { 34 int j; 35 } 36 37 void ambig_i() { 38 using namespace A; 39 using namespace A::B; 40 (void) i; // expected-error{{reference to 'i' is ambiguous}} 41 f(); // expected-error{{call to 'f' is ambiguous}} 42 (void) j; // okay 43 using namespace C; 44 (void) k; // okay 45 using namespace E; // expected-error{{reference to 'E' is ambiguous}} 46 } 47 48 struct K2 {}; // expected-note{{candidate found by name lookup is 'A::K2'}} 49 } 50 51 struct K2 {}; // expected-note{{candidate found by name lookup is 'K2'}} 52 53 using namespace A; 54 55 void K1::foo() {} // okay 56 57 // FIXME: Do we want err_ovl_no_viable_function_in_init here? 58 struct K2 k2; // expected-error{{reference to 'K2' is ambiguous}} \ 59 expected-error{{incomplete type}} 60 61 // FIXME: This case is incorrectly diagnosed! 62 //K2 k3; 63 64 65 class X { // expected-note{{candidate found by name lookup is 'X'}} 66 // FIXME: produce a suitable error message for this 67 using namespace A; // expected-error{{expected member name or}} 68 }; 69 70 namespace N { 71 struct K2; 72 struct K2 { }; 73 } 74 75 namespace Ni { 76 int i(); // expected-note{{candidate found by name lookup is 'Ni::i'}} 77 } 78 79 namespace NiTest { 80 using namespace A; 81 using namespace Ni; 82 83 int test() { 84 return i; // expected-error{{reference to 'i' is ambiguous}} 85 } 86 } 87 88 namespace OneTag { 89 struct X; // expected-note{{candidate found by name lookup is 'OneTag::X'}} 90 } 91 92 namespace OneFunction { 93 void X(); // expected-note{{candidate found by name lookup is 'OneFunction::X'}} 94 } 95 96 namespace TwoTag { 97 struct X; // expected-note{{candidate found by name lookup is 'TwoTag::X'}} 98 } 99 100 namespace FuncHidesTagAmbiguity { 101 using namespace OneTag; 102 using namespace OneFunction; 103 using namespace TwoTag; 104 105 void test() { 106 (void)X(); // expected-error{{reference to 'X' is ambiguous}} 107 } 108 } 109