1 // { dg-do run  }
2 // { dg-options "-w -ansi -pedantic-errors" }
3 
4 // Copyright (C) 2000 Free Software Foundation, Inc.
5 // Contributed by Nathan Sidwell 20 June 2000 <nathan@codesourcery.com>
6 
7 // Origin GNATS bug report 143 from Carlo Wood <carlo@runaway.xs4all.nl>
8 // We were generating incorrect type_info structures, and hence breaking
9 // dynamic_cast.
10 
11 #include <stdio.h>
12 
bz()13 class OBASE { public: virtual void bz () {}};
by()14 class IBASE { public: virtual void by () {}};
15 
16 class V {public:int m; };
17 
18 class A : public virtual V { };
19 class AA : public A {};
20 
foo(void)21 class B : public OBASE, public A { public: virtual void foo(void) { } };
foo(void)22 class B1 : public OBASE, public AA { public: virtual void foo(void) { } };
23 
24 class C : public IBASE, public virtual V { };
25 
26 class D : public B, public C { };
27 
28 class E : public B, public virtual V { };
29 
30 class E1 : public B1, public virtual V {};
31 
32 class E2 : public B1, public A, public virtual V {};
33 
main(void)34 int main(void)
35 {
36   D d;
37   E e;
38   E1 e1;
39   E2 e2;
40   int code = 0;
41 
42   OBASE* osd = &d;
43   OBASE* ose = &e;
44   OBASE* ose1 = &e1;
45   OBASE* ose2 = &e2;
46 
47 
48   if (!dynamic_cast<V*>(osd))
49     {
50       printf ("fail osd\n");
51       code++;
52     }
53 
54   if (!dynamic_cast<V*>(ose))
55     {
56       printf ("fail ose\n");
57       code++;
58     }
59 
60   if (!dynamic_cast<V*>(ose1))
61     {
62       printf ("fail ose1\n");
63       code++;
64     }
65 
66   if (!dynamic_cast<V*>(ose2))
67     {
68       printf ("fail ose2\n");
69       code++;
70     }
71 
72   return code;
73 }
74