1 // RUN: %clang_cc1 -fsyntax-only -verify %s
3 class B
: public A
{ };
4 class C
: public A
{ };
5 class D
: public B
, public C
{ };
9 a
= d
; // expected-error{{ambiguous conversion from derived class 'D' to base class 'A':}}
13 class A2
: public Object2
{ };
14 class B2
: public virtual A2
{ };
15 class C2
: virtual public A2
{ };
16 class D2
: public B2
, public C2
{ };
17 class E2
: public D2
, public C2
, public virtual A2
{ }; // expected-warning{{direct base 'C2' is inaccessible due to ambiguity:\n class E2 -> D2 -> C2\n class E2 -> C2}}
18 class F2
: public E2
, public A2
{ }; // expected-warning{{direct base 'A2' is inaccessible due to ambiguity:\n class F2 -> E2 -> D2 -> B2 -> A2\n class F2 -> A2}}
20 void g(E2
* e2
, F2
* f2
) {
23 o2
= f2
; // expected-error{{ambiguous conversion from derived class 'F2' to base class 'Object2':}}
26 // Test that ambiguous/inaccessibility checking does not trigger too
27 // early, because it should not apply during overload resolution.
28 void overload_okay(Object2
*);
29 void overload_okay(E2
*);
31 void overload_call(F2
* f2
) {