]> gcc.gnu.org Git - gcc.git/blob - gcc/testsuite/g++.dg/vtgc1.C
791e4ceb6b88ffc57e8955e2e6d7ffb470517f29
[gcc.git] / gcc / testsuite / g++.dg / vtgc1.C
1 // { dg-do compile }
2 // { dg-options "-fvtable-gc" }
3 // Origin: Hans-Peter Nilsson <hp@bitrange.com>
4
5 class Base0
6 {
7 public:
8 Base0(); virtual ~Base0();
9 virtual void f1();
10 virtual void f2();
11 private:
12 int a_value;
13 };
14
15 class Base1 : public Base0
16 {
17 public:
18 Base1(); virtual ~Base1();
19 virtual void f1(), f2();
20 virtual void f3();
21 };
22
23 class Base2 : public Base1
24 {
25 public:
26 Base2(); virtual ~Base2();
27 virtual void f1(), f2();
28 virtual void f4();
29 };
30
31 class VbasedA : virtual public Base2
32 {
33 public:
34 VbasedA(); virtual ~VbasedA();
35 virtual void f1(), f2(), f3();
36 virtual void f6();
37 };
38
39 class Side0
40 {
41 public:
42 Side0(); virtual ~Side0();
43 virtual void x1();
44 virtual void xx();
45 private:
46 int ryan;
47 };
48
49 class Multisv0 : public Side0, virtual public Base2
50 {
51 public:
52 Multisv0(); virtual ~Multisv0();
53 virtual void f1(), f2();
54 virtual void f3();
55 virtual void f6();
56 virtual void xx();
57 };
58
59 class Multivs1 : public Base2, virtual public Side0
60 {
61 public:
62 Multivs1(); virtual ~Multivs1(); virtual void f1(); virtual void fx2();
63 virtual void fx4(), fx5();
64 virtual void f6();
65 virtual void xx();
66 };
67
68 class Multiss2 : public Base2, public Side0
69 {
70 public:
71 Multiss2(); virtual ~Multiss2(); virtual void f1(); virtual void fx2();
72 virtual void fx4();
73 virtual void f6();
74 virtual void xx();
75 };
76
77 class Multivv3 : virtual public Base2, virtual public Side0
78 {
79 public:
80 Multivv3(); virtual ~Multivv3(); virtual void f1(); virtual void fx2();
81 virtual void fx4(), fx5();
82 virtual void f6();
83 virtual void xx();
84 };
85
86 Base0::Base0() {}
87 Base0::~Base0() {}
88 Base1::Base1() {}
89 Base1::~Base1() {}
90 Base2::Base2() {}
91 Base2::~Base2() {}
92 VbasedA::VbasedA() {}
93 VbasedA::~VbasedA() {}
94 Multisv0::Multisv0() {}
95 Multisv0::~Multisv0() {}
96 Multivs1::Multivs1() {}
97 Multivs1::~Multivs1() {}
98 Multiss2::Multiss2() {}
99 Multiss2::~Multiss2() {}
100 Multivv3::Multivv3() {}
101 Multivv3::~Multivv3() {}
102 Side0::Side0() {}
103 Side0::~Side0() {}
104
105 extern void x (VbasedA *);
106 extern void x2 (Multisv0 *);
107 extern void x3 (Multivs1 *);
108 extern void x4 (Multiss2 *);
109 extern void x5 (Multivv3 *);
110 void y () { VbasedA ii; x(&ii);}
111 void y2 () { Multisv0 ii; x2(&ii);}
112 void y3 () { Multivs1 ii; x3(&ii);}
113 void y4 () { Multiss2 ii; x4(&ii);}
114 void y5 () { Multivv3 ii; x5(&ii);}
115 void x (VbasedA *ii) { ii->f2();}
116 void x2 (Multisv0 *ii) { ii->f2();}
117 void x3 (Multivs1 *ii) { ii->f2();}
118 void x4 (Multiss2 *ii) { ii->f2();}
119 void x5 (Multivv3 *ii) { ii->f2();}
120
121 // { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Multivv3, 0" } }
122 // { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*VTT for Multivv3, 0" } }
123 // { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Multiss2, vtable for Base2" } }
124 // { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Multivs1, vtable for Base2" } }
125 // { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*VTT for Multivs1, vtable for Base2" } }
126 // { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Multisv0, vtable for Side0" } }
127 // { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*VTT for Multisv0, vtable for Side0" } }
128 // { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Side0, 0" } }
129 // { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for VbasedA, 0" } }
130 // { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*VTT for VbasedA, 0" } }
131 // { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Base2, vtable for Base1" } }
132 // { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Base1, vtable for Base0" } }
133 // { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Base0, 0" } }
This page took 0.045313 seconds and 5 git commands to generate.