OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [g++.dg/] [opt/] [pr23478.C] - Blame information for rev 693

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 693 jeremybenn
// PR rtl-optimization/23478
2
// { dg-do run }
3
// { dg-options "-O2" }
4
 
5
extern "C" void abort ();
6
bool tthrow;
7
struct C3 { int i; };
8
class C14 {};
9
struct C7
10
{
11
  virtual ~C7 ();
12
};
13
 
14
C7::~C7 ()
15
{
16
  asm volatile ("" : : : "memory");
17
}
18
class C2 : public C7 {};
19
 
20
template  class C13
21
{
22
  bool ma;
23
  X *mb;
24
public:
25
  explicit C13 (X *p = 0) throw () : ma (p != 0), mb (p) {}
26
  ~C13 ();
27
};
28
 
29
template 
30
C13::~C13 ()
31
{
32
  asm volatile ("" : : "r" (ma), "r" (mb) : "memory");
33
}
34
 
35
struct C1
36
{
37
  C1 (const C3 &, const C3 &, const C3 &, const C3 *&);
38
};
39
 
40
C1::C1 (const C3 &, const C3 &, const C3 &, const C3 *&)
41
{
42
  if (!tthrow)
43
    throw 24;
44
}
45
 
46
struct C8
47
{
48
  struct C15 {};
49
  typedef C15 *C9;
50
  virtual void f1 (C2 &, long *, void *, C3 &, void *, bool) = 0;
51
  virtual C13 f3 () const = 0;
52
  virtual ~C8 () {}
53
};
54
 
55
bool
56
xx14 ()
57
{
58
  bool b = false;
59
  if (tthrow)
60
    throw 6;
61
  asm volatile ("" : : "r" (&b) : "memory");
62
  return b;
63
}
64
 
65
bool
66
xx2 ()
67
{
68
  bool b = false;
69
  if (tthrow)
70
    throw 6;
71
  asm volatile ("" : : "r" (&b) : "memory");
72
  return b;
73
}
74
 
75
C13
76
xx9 ()
77
{
78
  return C13();
79
}
80
 
81
C2 &
82
xx10 ()
83
{
84
  static C2 c2;
85
  return c2;
86
}
87
 
88
C3 &
89
xx12 ()
90
{
91
  static C3 c3 = { 1 };
92
  return c3;
93
}
94
 
95
const C3 &
96
xx5 ()
97
{
98
  static const C3 c3 = { 2 };
99
  return c3;
100
}
101
 
102
const C3 *&
103
xx4 ()
104
{
105
  static const C3 *p;
106
  if (tthrow)
107
    throw 6;
108
  return p;
109
}
110
 
111
long ll13;
112
 
113
long
114
xx13 ()
115
{
116
  long ret;
117
  asm volatile ("" : "=r" (ret) : "r" (ll13));
118
  return ret;
119
}
120
 
121
void
122
xx15 (C3 &x, C13 &y)
123
{
124
  asm volatile ("" : : "r" (&x), "r" (&y) : "memory");
125
}
126
 
127
long
128
xx16 (const void *x)
129
{
130
  long ret;
131
  asm volatile ("" : "=r" (ret) : "0" (1), "r" (x) : "memory");
132
  return ret;
133
}
134
 
135
void
136
xx1 (C13 x)
137
{
138
  asm volatile ("" : : "r" (&x) : "memory");
139
  if (tthrow)
140
    throw 6;
141
}
142
 
143
void
144
xx3 (const C7 *x)
145
{
146
  if (x)
147
    abort ();
148
}
149
 
150
void
151
xx7 ()
152
{
153
  asm volatile ("" : : : "memory");
154
}
155
 
156
struct C5
157
{
158
  C13 f2 (C3 &v1, const void *v2, C8 *v6);
159
  C7 *m2[2];
160
  long m1[2];
161
};
162
 
163
C13
164
C5::f2 (C3 &v1, const void *v2, C8 *v6)
165
{
166
  C13 v13 = xx9 ();
167
  C2 &v9 = xx10 ();
168
  for (long i = 1; i < 2; i++)
169
    xx3 (m2[i]);
170
  const C3 &ld = xx5 ();
171
  xx7 ();
172
  if (xx2 ())
173
    throw "";
174
  xx4 ();
175
  C3 &si = xx12 ();
176
  for (long i = 0; i < xx16 (v2); ++i)
177
    {
178
      C13 sk (new C1 (xx5 (), ld, xx5 (), xx4 ()));
179
      xx15 (si, sk);
180
    }
181
  long v4 = xx13 ();
182
  for (long i = v4 - 1; i >= 0; --i)
183
    m1[i] = i;
184
  bool v8 = xx2 ();
185
  for (long i = 0; i < 2 && !xx14 (); i++)
186
    {
187
      v6[i].f1 (v9, 0, __null, v1, __null, v8);
188
      if (v8)
189
        xx1 (v6[i].f3 ());
190
    }
191
  return v13;
192
}
193
 
194
int
195
main (void)
196
{
197
  C5 c5 = { { __null, __null }, { 0, 0 } };
198
  bool seen = false;
199
  try
200
    {
201
      c5.f2 (xx12 (), __null, __null);
202
    }
203
  catch (int n)
204
    {
205
      if (n != 24)
206
        abort ();
207
      seen = true;
208
    }
209
  if (!seen)
210
    abort ();
211
}

powered by: WebSVN 2.1.0

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