// RUN: %clang_cc1 -fsyntax-only -verify %s -Wshadow-field class V { public: int f(); int x; // expected-note {{declared here}} }; class W { public: int g(); // expected-note{{member found by ambiguous name lookup}} int y; // expected-note{{member found by ambiguous name lookup}} expected-note {{declared here}} }; class B : public virtual V, public W { public: int f(); int x; // expected-warning {{non-static data member 'x' of 'B' shadows member inherited from type 'V'}} int g(); // expected-note{{member found by ambiguous name lookup}} int y; // expected-note{{member found by ambiguous name lookup}} expected-warning {{non-static data member 'y' of 'B' shadows member inherited from type 'W'}} }; class C : public virtual V, public W { }; class D : public B, public C { void glorp(); }; void D::glorp() { x++; f(); y++; // expected-error{{member 'y' found in multiple base classes of different types}} g(); // expected-error{{member 'g' found in multiple base classes of different types}} } // PR6462 struct BaseIO { BaseIO* rdbuf() { return 0; } }; struct Pcommon : virtual BaseIO { int rdbuf() { return 0; } }; struct P : virtual BaseIO, Pcommon {}; void f() { P p; p.rdbuf(); }