1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only -verify %s 2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct A { 3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao int a; // expected-note 4{{member found by ambiguous name lookup}} 4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao static int b; 5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao static int c; // expected-note 2{{member found by ambiguous name lookup}} 6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao enum E { enumerator }; 8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao typedef int type; 10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao static void f(int); 12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void f(float); // expected-note 2{{member found by ambiguous name lookup}} 13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao static void static_f(int); 15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao static void static_f(double); 16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct B : A { 19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao int d; // expected-note 2{{member found by ambiguous name lookup}} 20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao enum E2 { enumerator2 }; 22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao enum E3 { enumerator3 }; // expected-note 2{{member found by ambiguous name lookup}} 24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct C : A { 27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao int c; // expected-note 2{{member found by ambiguous name lookup}} 28ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao int d; // expected-note 2{{member found by ambiguous name lookup}} 29ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 30ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao enum E3 { enumerator3_2 }; // expected-note 2{{member found by ambiguous name lookup}} 31ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 32ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 33ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct D : B, C { 34ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void test_lookup(); 35ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 36ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 37ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid test_lookup(D d) { 38ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao d.a; // expected-error{{non-static member 'a' found in multiple base-class subobjects of type 'A':}} 39ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (void)d.b; // okay 40ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao d.c; // expected-error{{member 'c' found in multiple base classes of different types}} 41ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao d.d; // expected-error{{member 'd' found in multiple base classes of different types}} 42ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao d.f(0); // expected-error{{non-static member 'f' found in multiple base-class subobjects of type 'A':}} 43ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao d.static_f(0); // okay 44ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 45ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao D::E e = D::enumerator; // okay 46ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao D::type t = 0; // okay 47ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 48ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao D::E2 e2 = D::enumerator2; // okay 49ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 50ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao D::E3 e3; // expected-error{{multiple base classes}} 51ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 52ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 53ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid D::test_lookup() { 54ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao a; // expected-error{{non-static member 'a' found in multiple base-class subobjects of type 'A':}} 55ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (void)b; // okay 56ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao c; // expected-error{{member 'c' found in multiple base classes of different types}} 57ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao d; // expected-error{{member 'd' found in multiple base classes of different types}} 58ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao f(0); // expected-error{{non-static member 'f' found in multiple base-class subobjects of type 'A':}} 59ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao static_f(0); // okay 60ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 61ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao E e = enumerator; // okay 62ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao type t = 0; // okay 63ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 64ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao E2 e2 = enumerator2; // okay 65ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 66ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao E3 e3; // expected-error{{member 'E3' found in multiple base classes of different types}} 67ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 68ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 69ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct B2 : virtual A { 70ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao int d; // expected-note 2{{member found by ambiguous name lookup}} 71ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 72ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao enum E2 { enumerator2 }; 73ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 74ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao enum E3 { enumerator3 }; // expected-note 2 {{member found by ambiguous name lookup}} 75ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 76ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 77ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct C2 : virtual A { 78ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao int c; 79ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao int d; // expected-note 2{{member found by ambiguous name lookup}} 80ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 81ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao enum E3 { enumerator3_2 }; // expected-note 2{{member found by ambiguous name lookup}} 82ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 83ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 84ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct D2 : B2, C2 { 85ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void test_virtual_lookup(); 86ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 87ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 88ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct F : A { }; 89ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct G : F, D2 { 90ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void test_virtual_lookup(); 91ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 92ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 93ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid test_virtual_lookup(D2 d2, G g) { 94ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (void)d2.a; 95ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (void)d2.b; 96ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (void)d2.c; // okay 97ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao d2.d; // expected-error{{member 'd' found in multiple base classes of different types}} 98ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao d2.f(0); // okay 99ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao d2.static_f(0); // okay 100ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 101ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao D2::E e = D2::enumerator; // okay 102ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao D2::type t = 0; // okay 103ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 104ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao D2::E2 e2 = D2::enumerator2; // okay 105ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 106ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao D2::E3 e3; // expected-error{{member 'E3' found in multiple base classes of different types}} 107ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 108ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao g.a; // expected-error{{non-static member 'a' found in multiple base-class subobjects of type 'A':}} 109ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao g.static_f(0); // okay 110ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 111ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 112ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid D2::test_virtual_lookup() { 113ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (void)a; 114ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (void)b; 115ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (void)c; // okay 116ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao d; // expected-error{{member 'd' found in multiple base classes of different types}} 117ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao f(0); // okay 118ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao static_f(0); // okay 119ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 120ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao E e = enumerator; // okay 121ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao type t = 0; // okay 122ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 123ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao E2 e2 = enumerator2; // okay 124ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 125ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao E3 e3; // expected-error{{member 'E3' found in multiple base classes of different types}} 126ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 127ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 128ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid G::test_virtual_lookup() { 129ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao a; // expected-error{{non-static member 'a' found in multiple base-class subobjects of type 'A':}} 130ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao static_f(0); // okay 131ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 132ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 133ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 134ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct HasMemberType1 { 135ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao struct type { }; // expected-note{{member found by ambiguous name lookup}} 136ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 137ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 138ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct HasMemberType2 { 139ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao struct type { }; // expected-note{{member found by ambiguous name lookup}} 140ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 141ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 142ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct HasAnotherMemberType : HasMemberType1, HasMemberType2 { 143ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao struct type { }; 144ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 145ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 146ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct UsesAmbigMemberType : HasMemberType1, HasMemberType2 { 147ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao type t; // expected-error{{member 'type' found in multiple base classes of different types}} 148ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 149ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 150ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct X0 { 151ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao struct Inner { 152ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao static const int m; 153ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao }; 154ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 155ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao static const int n = 17; 156ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 157ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 158ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoconst int X0::Inner::m = n; 159