mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-23 18:01:22 +08:00
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
This commit is contained in:
parent
a67e7daab5
commit
9f9ca914cc
@ -1,3 +1,9 @@
|
||||
2011-01-11 Jeff Law <law@redhat.com>
|
||||
|
||||
* 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 <jh@suse.cz>
|
||||
|
||||
PR lto/45375
|
||||
|
@ -1,3 +1,8 @@
|
||||
2011-01-11 Jeff Law <law@redhat.com>
|
||||
|
||||
* PR tree-optimization/47086
|
||||
* gcc.dg/pr47086.c: New test.
|
||||
|
||||
2011-01-11 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/46658
|
||||
|
14
gcc/testsuite/gcc.dg/pr47086.c
Normal file
14
gcc/testsuite/gcc.dg/pr47086.c
Normal file
@ -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++;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user