1*c87b03e5Sespie // Special g++ Options: -w
2*c87b03e5Sespie 
3*c87b03e5Sespie class A {
4*c87b03e5Sespie public:
~A()5*c87b03e5Sespie   virtual ~A(){};
type(void)6*c87b03e5Sespie   virtual int type(void) {
7*c87b03e5Sespie     return -1;
8*c87b03e5Sespie   }
9*c87b03e5Sespie };
10*c87b03e5Sespie 
11*c87b03e5Sespie class B : public A {
12*c87b03e5Sespie public:
~B()13*c87b03e5Sespie   virtual ~B(){};
14*c87b03e5Sespie };
15*c87b03e5Sespie 
16*c87b03e5Sespie 
17*c87b03e5Sespie class C0 : public B, public virtual A {
18*c87b03e5Sespie public:
type(void)19*c87b03e5Sespie   virtual int type(void) {
20*c87b03e5Sespie     return 0;
21*c87b03e5Sespie   }
22*c87b03e5Sespie };
23*c87b03e5Sespie 
24*c87b03e5Sespie class C1 : public C0
25*c87b03e5Sespie {
26*c87b03e5Sespie public:
type(void)27*c87b03e5Sespie   virtual int type(void) {
28*c87b03e5Sespie     return 1;
29*c87b03e5Sespie   }
30*c87b03e5Sespie };
31*c87b03e5Sespie 
32*c87b03e5Sespie class C2 : public C0 {
33*c87b03e5Sespie public:
type(void)34*c87b03e5Sespie   virtual int type(void) {
35*c87b03e5Sespie     return 2;
36*c87b03e5Sespie   }
37*c87b03e5Sespie };
38*c87b03e5Sespie 
main()39*c87b03e5Sespie main() {
40*c87b03e5Sespie   C1 *one = new C1;
41*c87b03e5Sespie 
42*c87b03e5Sespie   if (one->type() != 1)
43*c87b03e5Sespie     return 1;
44*c87b03e5Sespie }
45