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