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
glorp()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
rdbufBaseIO36 struct BaseIO { BaseIO* rdbuf() { return 0; } };
rdbufPcommon37 struct Pcommon : virtual BaseIO { int rdbuf() { return 0; } };
38 struct P : virtual BaseIO, Pcommon {};
39
f()40 void f() { P p; p.rdbuf(); }
41