// PR rtl-optimization/23299 // { dg-do run } // { dg-options "-Os" } extern "C" void abort (); struct A { virtual int a () { return 0; } }; struct B : public A { virtual int b () { return 0; } }; struct C : public A { virtual int c () { return 0; } }; 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; return 0; } int main (void) { { E e; } if (x != 3) abort (); }