// PR 14535
// { dg-do run }
// { dg-options "-O -finline" }
//
// Original test case failure required that Raiser constructor be inlined.

extern "C" void abort(); 
bool destructor_called = false; 

struct B { 
  virtual void Run(){}; 
}; 

  struct D : public B { 
    virtual void Run() 
    { 
      struct O { 
        ~O() { destructor_called = true; }; 
      } o; 

      struct Raiser { 
        Raiser()  throw( int ) {throw 1;}; 
      } raiser; 
    }; 
  }; 

int main() { 
  try { 
    D d; 
    static_cast<B&>(d).Run(); 
  } catch (...) {} 

  if (!destructor_called)
    abort (); 
} 
