OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [g++.old-deja/] [g++.abi/] [vbase4.C] - Blame information for rev 338

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 305 jeremybenn
// { dg-do run  }
2
// Copyright (C) 2001 Free Software Foundation, Inc.
3
// Contributed by Nathan Sidwell 9 Jun 2001 
4
 
5
// Bug 3089. We ICE'd in construction vtables.
6
 
7
int failed;
8
 
9
void fail (int val)
10
{
11
  if (!failed)
12
    failed = val;
13
}
14
 
15
struct A
16
{
17
  virtual ~A();
18
  A ();
19
  virtual void check (void *whole, void *base);
20
};
21
 
22
A::A ()
23
{
24
  check (this, this);
25
}
26
A::~A ()
27
{
28
  check (this, this);
29
}
30
 
31
void A::check (void *whole, void *base)
32
{
33
  if (dynamic_cast  (this) != whole)
34
    fail (1);
35
  else if (this != base)
36
    fail (2);
37
}
38
 
39
struct B
40
{
41
  virtual ~B ();
42
  B ();
43
  virtual void check (void *whole, void *base);
44
};
45
 
46
B::B ()
47
{
48
  check (this, this);
49
}
50
B::~B ()
51
{
52
  check (this, this);
53
}
54
void B::check (void *whole, void *base)
55
{
56
  if (dynamic_cast  (this) != whole)
57
    fail (3);
58
  else if (this != base)
59
    fail (4);
60
}
61
 
62
struct C : virtual public B, virtual public A
63
{
64
  virtual ~C ();
65
  C ();
66
  virtual void check (void *whole, void *base);
67
};
68
C::C ()
69
{
70
  check (this, this);
71
}
72
C::~C ()
73
{
74
  check (this, this);
75
}
76
void C::check (void *whole, void *base)
77
{
78
  if (dynamic_cast  (this) != whole)
79
    fail (5);
80
  else if (this != base)
81
    fail (6);
82
  A::check (whole, static_cast  (this));
83
  B::check (whole, static_cast  (this));
84
}
85
 
86
struct D : virtual public A
87
{
88
  virtual ~D ();
89
  D ();
90
  virtual void check (void *whole, void *base);
91
};
92
D::D ()
93
{
94
  check (this, this);
95
}
96
D::~D ()
97
{
98
  check (this, this);
99
}
100
void D::check (void *whole, void *base)
101
{
102
  if (dynamic_cast  (this) != whole)
103
    fail (5);
104
  else if (this != base)
105
    fail (6);
106
  A::check (whole, static_cast  (this));
107
}
108
 
109
struct E : virtual public C, virtual public D
110
{
111
  virtual ~E ();
112
  E ();
113
  virtual void check (void *whole, void *base);
114
};
115
E::E ()
116
{
117
  check (this, this);
118
}
119
E::~E ()
120
{
121
  check (this, this);
122
}
123
void E::check (void *whole, void *base)
124
{
125
  if (dynamic_cast  (this) != whole)
126
    fail (5);
127
  else if (this != base)
128
    fail (6);
129
  C::check (whole, static_cast  (this));
130
  D::check (whole, static_cast  (this));
131
}
132
 
133
struct F : virtual public E
134
{
135
  virtual ~F ();
136
  F ();
137
  virtual void check (void *whole, void *base);
138
};
139
F::F ()
140
{
141
  check (this, this);
142
}
143
F::~F ()
144
{
145
  check (this, this);
146
}
147
void F::check (void *whole, void *base)
148
{
149
  if (dynamic_cast  (this) != whole)
150
    fail (5);
151
  else if (this != base)
152
    fail (6);
153
  E::check (whole, static_cast  (this));
154
}
155
 
156
int main ()
157
{
158
  A a;
159
  B b;
160
  C c;
161
  D d;
162
  E e;
163
  F f;
164
 
165
  return failed;
166
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.