From: Jakub Jelinek Date: Sun, 16 Jan 2011 20:12:46 +0000 (+0100) Subject: backport: re PR tree-optimization/46864 (ICE: verify_stmts failed: statement marked... X-Git-Tag: releases/gcc-4.5.3~308 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4cf90673963ab12f0855527a5fda58baec6fb183;p=thirdparty%2Fgcc.git backport: re PR tree-optimization/46864 (ICE: verify_stmts failed: statement marked for throw, but doesn't with -fnon-call-exceptions) Backport from mainline 2010-12-10 Jakub Jelinek PR tree-optimization/46864 * tree-ssa-loop-im.c (loop_suitable_for_sm): Return false even when there are EDGE_EH exit edges. * g++.dg/opt/pr46864.C: New test. From-SVN: r168861 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3caa6c65a5e5..ed1b160e3b41 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,12 @@ 2011-01-16 Jakub Jelinek Backport from mainline + 2010-12-10 Jakub Jelinek + + PR tree-optimization/46864 + * tree-ssa-loop-im.c (loop_suitable_for_sm): Return false even + when there are EDGE_EH exit edges. + 2010-12-09 Jakub Jelinek PR target/41082 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 26b63f300ef8..8d011dd6e5ee 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2011-01-16 Jakub Jelinek + + Backport from mainline + 2010-12-10 Jakub Jelinek + + PR tree-optimization/46864 + * g++.dg/opt/pr46864.C: New test. + 2011-01-13 Rainer Orth * gfortran.dg/cray_pointers_2.f90: Use dg-timeout-factor 4. diff --git a/gcc/testsuite/g++.dg/opt/pr46864.C b/gcc/testsuite/g++.dg/opt/pr46864.C new file mode 100644 index 000000000000..0f7b7d2f5b4f --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr46864.C @@ -0,0 +1,26 @@ +// PR tree-optimization/46864 +// { dg-do compile } +// { dg-options "-O -fnon-call-exceptions" } + +int baz (); + +struct S +{ + int k; + bool bar () throw () + { + int m = baz (); + for (int i = 0; i < m; i++) + k = i; + return m; + } +}; + +extern S *s; + +void +foo () +{ + while (baz () && s->bar ()) + ; +} diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c index 90b3a38b448b..720159368381 100644 --- a/gcc/tree-ssa-loop-im.c +++ b/gcc/tree-ssa-loop-im.c @@ -2139,7 +2139,7 @@ loop_suitable_for_sm (struct loop *loop ATTRIBUTE_UNUSED, edge ex; for (i = 0; VEC_iterate (edge, exits, i, ex); i++) - if (ex->flags & EDGE_ABNORMAL) + if (ex->flags & (EDGE_ABNORMAL | EDGE_EH)) return false; return true;