From 9f9ca914cc827c34816c71afb04e920ad5243156 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Tue, 11 Jan 2011 07:10:54 -0700 Subject: [PATCH] re PR tree-optimization/47086 (ICE: verify_flow_info failed: BB 3 can not throw but has an EH edge with -O -fexceptions -fnon-call-exceptions -ftrapv) * PR tree-optimization/47086 * tree-ssa-loop-ivopts.c (find_givs_in_stmt_scev): Do not record IVs from statements that might throw. * PR tree-optimization/47086 * gcc.dg/pr47086.c: New test. From-SVN: r168659 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr47086.c | 14 ++++++++++++++ gcc/tree-ssa-loop-ivopts.c | 8 +++++++- 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr47086.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e565b2e92e57..b372b6c7e681 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-01-11 Jeff Law + + * PR tree-optimization/47086 + * tree-ssa-loop-ivopts.c (find_givs_in_stmt_scev): Do not record + IVs from statements that might throw. + 2011-01-10 Jan Hubicka PR lto/45375 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 64f7ad06be2b..710431c8424b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-01-11 Jeff Law + + * PR tree-optimization/47086 + * gcc.dg/pr47086.c: New test. + 2011-01-11 Jason Merrill PR c++/46658 diff --git a/gcc/testsuite/gcc.dg/pr47086.c b/gcc/testsuite/gcc.dg/pr47086.c new file mode 100644 index 000000000000..71743fe4fe5c --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr47086.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fexceptions -fnon-call-exceptions -ftrapv" } */ + +void +foo () +{ + int n = 0; + while (1) + { + int i[n % 1]; + n++; + } +} + diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c index 59e2fef5976b..479b46fb8dcd 100644 --- a/gcc/tree-ssa-loop-ivopts.c +++ b/gcc/tree-ssa-loop-ivopts.c @@ -1,5 +1,5 @@ /* Induction variable optimizations. - Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of GCC. @@ -1102,6 +1102,12 @@ find_givs_in_stmt_scev (struct ivopts_data *data, gimple stmt, affine_iv *iv) || contains_abnormal_ssa_name_p (iv->step)) return false; + /* If STMT could throw, then do not consider STMT as defining a GIV. + While this will suppress optimizations, we can not safely delete this + GIV and associated statements, even if it appears it is not used. */ + if (stmt_could_throw_p (stmt)) + return false; + return true; }