1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li class A { }; 3*67e74705SXin Li 4*67e74705SXin Li class B1 : A { }; 5*67e74705SXin Li 6*67e74705SXin Li class B2 : virtual A { }; 7*67e74705SXin Li 8*67e74705SXin Li class B3 : virtual virtual A { }; // expected-error{{duplicate 'virtual' in base specifier}} 9*67e74705SXin Li 10*67e74705SXin Li class C : public B1, private B2 { }; 11*67e74705SXin Li 12*67e74705SXin Li 13*67e74705SXin Li class D; // expected-note {{forward declaration of 'D'}} 14*67e74705SXin Li 15*67e74705SXin Li class E : public D { }; // expected-error{{base class has incomplete type}} 16*67e74705SXin Li 17*67e74705SXin Li typedef int I; 18*67e74705SXin Li 19*67e74705SXin Li class F : public I { }; // expected-error{{base specifier must name a class}} 20*67e74705SXin Li 21*67e74705SXin Li union U1 : public A { }; // expected-error{{unions cannot have base classes}} 22*67e74705SXin Li 23*67e74705SXin Li union U2 {}; 24*67e74705SXin Li 25*67e74705SXin Li class G : public U2 { }; // expected-error{{unions cannot be base classes}} 26*67e74705SXin Li 27*67e74705SXin Li typedef G G_copy; 28*67e74705SXin Li typedef G G_copy_2; 29*67e74705SXin Li typedef G_copy G_copy_3; 30*67e74705SXin Li 31*67e74705SXin Li class H : G_copy, A, G_copy_2, // expected-error{{base class 'G_copy' (aka 'G') specified more than once as a direct base class}} 32*67e74705SXin Li public G_copy_3 { }; // expected-error{{base class 'G_copy' (aka 'G') specified more than once as a direct base class}} 33*67e74705SXin Li 34*67e74705SXin Li struct J { char c; int i[]; }; 35*67e74705SXin Li struct K : J { }; // expected-error{{base class 'J' has a flexible array member}} 36