From d6063d7f3f4f244f1b52192152fd817e1f2b4afc Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 13 Oct 2009 11:41:56 -0700 Subject: re PR tree-optimization/41377 (gimple EH rewrite causes ICE with PPRE (enabled at -O3)) PR tree-optimization/41377 * tree-eh.c (unsplit_eh): Propagate degenerate PHIs. (cleanup_empty_eh_merge_phis): New change_region parameter; pass it on to redirect_eh_edge_1. Update callers. (cleanup_empty_eh_unsplit): Don't require an existing EH label at the destination block. From-SVN: r152728 --- gcc/testsuite/g++.dg/opt/eh5.C | 43 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 gcc/testsuite/g++.dg/opt/eh5.C (limited to 'gcc/testsuite') diff --git a/gcc/testsuite/g++.dg/opt/eh5.C b/gcc/testsuite/g++.dg/opt/eh5.C new file mode 100644 index 0000000..3557ab2 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/eh5.C @@ -0,0 +1,43 @@ +// PR 41377 +// { dg-do compile } +// { dg-options "-O3" } + +struct A +{ + bool foo(int*) const; +} a; + +struct B {}; + +struct B1 : B +{ + bool (A::*pmf)(int*) const; + const A* pa; + + B1() : pmf(&A::foo), pa(&a) {} + bool operator()() const { return (pa->*pmf)(new int); } +}; + +struct B2 : B +{ + B1 b1; + + B2(const B1& _b1) : b1(_b1) {} + bool operator()() const { return b1(); } +}; + +template struct C +{ + void bar(B2 b2) { while (b2()) ; } + C() { bar(B2(B1())); } +}; + +void baz(int i) +{ + switch(i) + { + case 0: new C<0>; + case 1: new C<1>; + case 2: new C<2>; + } +} -- cgit v1.1