1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li 3*67e74705SXin Li class V { 4*67e74705SXin Li public: 5*67e74705SXin Li int f(); 6*67e74705SXin Li int x; 7*67e74705SXin Li }; 8*67e74705SXin Li 9*67e74705SXin Li class W { 10*67e74705SXin Li public: 11*67e74705SXin Li int g(); // expected-note{{member found by ambiguous name lookup}} 12*67e74705SXin Li int y; // expected-note{{member found by ambiguous name lookup}} 13*67e74705SXin Li }; 14*67e74705SXin Li 15*67e74705SXin Li class B : public virtual V, public W 16*67e74705SXin Li { 17*67e74705SXin Li public: 18*67e74705SXin Li int f(); 19*67e74705SXin Li int x; 20*67e74705SXin Li int g(); // expected-note{{member found by ambiguous name lookup}} 21*67e74705SXin Li int y; // expected-note{{member found by ambiguous name lookup}} 22*67e74705SXin Li }; 23*67e74705SXin Li 24*67e74705SXin Li class C : public virtual V, public W { }; 25*67e74705SXin Li 26*67e74705SXin Li class D : public B, public C { void glorp(); }; 27*67e74705SXin Li glorp()28*67e74705SXin Livoid D::glorp() { 29*67e74705SXin Li x++; 30*67e74705SXin Li f(); 31*67e74705SXin Li y++; // expected-error{{member 'y' found in multiple base classes of different types}} 32*67e74705SXin Li g(); // expected-error{{member 'g' found in multiple base classes of different types}} 33*67e74705SXin Li } 34*67e74705SXin Li 35*67e74705SXin Li // PR6462 rdbufBaseIO36*67e74705SXin Listruct BaseIO { BaseIO* rdbuf() { return 0; } }; rdbufPcommon37*67e74705SXin Listruct Pcommon : virtual BaseIO { int rdbuf() { return 0; } }; 38*67e74705SXin Li struct P : virtual BaseIO, Pcommon {}; 39*67e74705SXin Li f()40*67e74705SXin Livoid f() { P p; p.rdbuf(); } 41