C++程序  |  36行  |  602 B

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