// PR rtl-optimization/23299 | |
// { dg-do run } | |
// { dg-options "-Os" } | |
extern "C" void abort (); | |
struct A | |
{ | |
virtual int a () {} | |
}; | |
struct B : public A | |
{ | |
virtual int b () {} | |
}; | |
struct C : public A | |
{ | |
virtual int c () {} | |
}; | |
struct D | |
{ | |
D () { d = 64; } | |
~D (); | |
int d; | |
}; | |
int x; | |
D::~D () | |
{ | |
x |= 1; | |
if (d != 64) | |
abort (); | |
} | |
struct E : public B, public C | |
{ | |
E () {} | |
virtual int c (); | |
~E (); | |
D dv; | |
}; | |
E::~E () | |
{ | |
int r = c (); | |
} | |
int | |
E::c () | |
{ | |
if (x > 10) | |
throw 1; | |
x |= 2; | |
} | |
int | |
main (void) | |
{ | |
{ | |
E e; | |
} | |
if (x != 3) | |
abort (); | |
} |