// 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 ();
}
