aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/vtgc1.C
blob: 7006ddeec38b81d3aeece877222d22bac3d4cc72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
// { dg-do compile }
// { dg-options "-fvtable-gc" }
// { dg-excess-errors "-fvtable-gc unsupported" { xfail *-*-* } }
// Origin: Hans-Peter Nilsson <hp@bitrange.com>

class Base0
{
public:
  Base0(); virtual ~Base0();
  virtual void f1();
  virtual void f2();
private:
  int a_value;
};

class Base1 : public Base0
{
public:
  Base1(); virtual ~Base1();
  virtual void f1(), f2();
  virtual void f3();
};

class Base2 : public Base1
{
public:
  Base2(); virtual ~Base2();
  virtual void f1(), f2();
  virtual void f4();
};

class VbasedA : virtual public Base2
{
public:
  VbasedA(); virtual ~VbasedA();
  virtual void f1(), f2(), f3();
  virtual void f6();
};

class Side0
{
public:
  Side0(); virtual ~Side0();
  virtual void x1();
  virtual void xx();
private:
  int ryan;
};

class Multisv0 : public Side0, virtual public Base2
{
public:
  Multisv0(); virtual ~Multisv0();
  virtual void f1(), f2();
  virtual void f3();
  virtual void f6();
  virtual void xx();
};

class Multivs1 : public Base2, virtual public Side0
{
public:
  Multivs1(); virtual ~Multivs1(); virtual void f1(); virtual void fx2();
  virtual void fx4(), fx5();
  virtual void f6();
  virtual void xx();
};

class Multiss2 : public Base2, public Side0
{
public:
  Multiss2(); virtual ~Multiss2(); virtual void f1(); virtual void fx2();
  virtual void fx4();
  virtual void f6();
  virtual void xx();
};

class Multivv3 : virtual public Base2, virtual public Side0
{
public:
  Multivv3(); virtual ~Multivv3(); virtual void f1(); virtual void fx2();
  virtual void fx4(), fx5();
  virtual void f6();
  virtual void xx();
};

Base0::Base0() {}
Base0::~Base0() {}
Base1::Base1() {}
Base1::~Base1() {}
Base2::Base2() {}
Base2::~Base2() {}
VbasedA::VbasedA() {}
VbasedA::~VbasedA() {}
Multisv0::Multisv0() {}
Multisv0::~Multisv0() {}
Multivs1::Multivs1() {}
Multivs1::~Multivs1() {}
Multiss2::Multiss2() {}
Multiss2::~Multiss2() {}
Multivv3::Multivv3() {}
Multivv3::~Multivv3() {}
Side0::Side0() {}
Side0::~Side0() {}

extern void x (VbasedA *);
extern void x2 (Multisv0 *);
extern void x3 (Multivs1 *);
extern void x4 (Multiss2 *);
extern void x5 (Multivv3 *);
void y () { VbasedA ii; x(&ii);}
void y2 () { Multisv0 ii; x2(&ii);}
void y3 () { Multivs1 ii; x3(&ii);}
void y4 () { Multiss2 ii; x4(&ii);}
void y5 () { Multivv3 ii; x5(&ii);}
void x (VbasedA *ii) { ii->f2();}
void x2 (Multisv0 *ii) { ii->f2();}
void x3 (Multivs1 *ii) { ii->f2();}
void x4 (Multiss2 *ii) { ii->f2();}
void x5 (Multivv3 *ii) { ii->f2();}

// { dg-final { setup_xfail *-*-* } }
// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Multivv3, 0" } }
// { dg-final { setup_xfail *-*-* } }
// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*VTT for Multivv3, 0" } }
// { dg-final { setup_xfail *-*-* } }
// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Multiss2, vtable for Base2" } }
// { dg-final { setup_xfail *-*-* } }
// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Multivs1, vtable for Base2" } }
// { dg-final { setup_xfail *-*-* } }
// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*VTT for Multivs1, vtable for Base2" } }
// { dg-final { setup_xfail *-*-* } }
// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Multisv0, vtable for Side0" } }
// { dg-final { setup_xfail *-*-* } }
// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*VTT for Multisv0, vtable for Side0" } }
// { dg-final { setup_xfail *-*-* } }
// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Side0, 0" } }
// { dg-final { setup_xfail *-*-* } }
// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for VbasedA, 0" } }
// { dg-final { setup_xfail *-*-* } }
// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*VTT for VbasedA, 0" } }
// { dg-final { setup_xfail *-*-* } }
// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Base2, vtable for Base1" } }
// { dg-final { setup_xfail *-*-* } }
// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Base1, vtable for Base0" } }
// { dg-final { setup_xfail *-*-* } }
// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Base0, 0" } }