// PR tree-optimization/31769 // { dg-options "-O2 -fopenmp" } // { dg-do compile } struct B { B () {} virtual ~B () {} }; struct C { C (int x, int y) {} }; template struct D { D () {} ~D () {} }; struct E { E () {} ~E () {} D e; }; struct A { B *b; A () { b = __null; } ~A () { if (b != __null) delete b; } }; struct F : public A { explicit F (int x) { foo (0); } F (const F &x) {} F (F &x, C y) {} F operator () (C x) const { return F (const_cast(*this), x); } template F & operator+= (const U &); void foo (int); E f; }; int main () { try { F f (10); F g (10); C h (0, 9); #pragma omp parallel for for (int i = 0; i < 2; ++i) g += f (h); } catch (int &e) { } }