OSDN Git Service

* g++.old-deja/g++.other/init5.C: Remove xfail for powerpc-linux.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.old-deja / g++.other / rttid2.C
1 // { dg-do run  }
2 // { dg-options "-frtti" }
3 // test of rtti of single inheritance and multiple inheritance classes
4 // dynamic casting
5
6 #include <typeinfo>
7
8 extern "C" {
9   int printf(const char *, ...);
10   void exit(int);
11 }
12
13 class X {
14  public:
15   int xi;
16 };
17
18 class Y : public X {
19   short ys;
20 };
21
22 class Z : public Y {
23   int zi;
24 };
25
26 Z z;
27 Y y;
28 Y *yp = &z;
29 X *xp = &z;
30 Z *zp = &z;
31
32 class A {
33  public:
34   int Ai;
35 };
36
37 class B {
38  public:
39   int Bi;
40 };
41
42 class D : public A, public B {
43   int Di;
44 };
45
46 /*
47 class E : public D, public B {
48   int Ei;
49 };
50 */
51 class E {
52   int Ei;
53 };
54
55 class F : public E, public D {
56   int Fi;
57 };
58
59 D d;
60 A *ap = &d;
61 B *bp = &d;
62 F f;
63 F *fp = &f;
64 A *aap = &f;
65 D *dp = &f;
66 B *bbp = dp;
67
68 void *vp = zp;
69
70 /*
71 void error (int i)
72 {
73   printf("FAIL\n");
74   exit(i);
75 }
76 */
77
78 void error  (int i)
79 {
80   exit(i);
81 }
82
83 int main ()
84 {
85
86   vp = (void *)0;
87
88   vp = dynamic_cast<Y *> (&z);
89   if (vp == 0) error(11);
90
91   vp = dynamic_cast<X *> (yp);
92   if (vp == 0) error(12);
93
94   vp = dynamic_cast<D *> (dp);
95   if (vp != (void *)dp) error(21);
96
97   vp = dynamic_cast<B *> (fp);
98   if (vp != (void *)bbp) error(22);
99
100 }
101