// RUN: %clang_cc1 %s -emit-llvm-only -triple=i386-pc-win32 -verify -DTEST1
// RUN: %clang_cc1 %s -emit-llvm-only -triple=i386-pc-win32 -verify -DTEST2
#ifdef TEST1
structA{virtual A *foo();// in vftable slot #0.
virtual A *bar();// in vftable slot #1.
};structB:virtualA{// appended to the A subobject's vftable in slot #2.
virtual B *foo();// expected-note{{covariant thunk required by 'foo'}}
};structC:virtualA{// appended to the A subobject's vftable in slot #2.
virtual C *bar();// expected-note{{covariant thunk required by 'bar'}}
};structD:B,C{D();};// expected-error{{ambiguous vftable component}}
D::D(){}#endif#ifdef TEST2
structA{virtual A *foo();// in vftable slot #0
};structB:virtualA{// appended to the A subobject's vftable in slot #1.
virtual B *foo();// expected-note{{covariant thunk required by 'foo'}}
};structC:virtualA{// appended to the A subobject's vftable in slot #1.
virtual C *foo();// expected-note{{covariant thunk required by 'foo'}}
};structD:B,C{// expected-error{{ambiguous vftable component}}
virtual D *foo();D();};D::D(){}#endif