diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 127d213d799..5dd2a729c1f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-09-20 Andrew Pinski + + PR middle-end/40642 + * g++.dg/torture/pr40642.C: New testcase. + 2009-09-20 Kaveh R. Ghazi * gcc.dg/torture/builtin-math-7.c: Update for testing Annex G diff --git a/gcc/testsuite/g++.dg/torture/pr40642.C b/gcc/testsuite/g++.dg/torture/pr40642.C new file mode 100644 index 00000000000..3f545a89037 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr40642.C @@ -0,0 +1,26 @@ +// { dg-do compile } +// { dg-options "-fprofile-generate" } + +// GCC used to ICE with some EH edge missing. + +inline void* operator new(__SIZE_TYPE__, void* p) throw() { return p; } +inline void operator delete (void*, void*) throw() { } + +template void foo(void* p, T t) +{ + new(p) T(t); +} + +void bar(); + +template struct A +{ + T* p; + + A() { try { foo(p, T()); } catch(...) {} } + + A(const A&) { try { bar(); } catch(...) { throw; } } +}; + +A > a; +