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:
Jeff Law 2011-01-11 07:10:54 -07:00 committed by Jeff Law
parent a67e7daab5
commit 9f9ca914cc
4 changed files with 32 additions and 1 deletions

View File

@ -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

View File

@ -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

View 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++;
}
}

View File

@ -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;
}