Commit 25b6dd9c by Richard Guenther Committed by Richard Biener

re PR middle-end/34241 (ICE in forward_propagate_into_cond)

2007-11-27  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/34241
	* tree-ssa-forwprop.c (forward_propagate_addr_expr): Make sure
	to only delete real conversion chains.

	* g++.dg/torture/pr34241.C: New testcase.

From-SVN: r130468
parent cba04b96
2007-11-27 Richard Guenther <rguenther@suse.de>
PR tree-optimization/34241
* tree-ssa-forwprop.c (forward_propagate_addr_expr): Make sure
to only delete real conversion chains.
2007-11-27 Andreas Krebbel <krebbel1@de.ibm.com>
* config/s390/s390.opt (m31, m64, mesa, mzarch, msoft-float,
2007-11-27 Richard Guenther <rguenther@suse.de>
PR tree-optimization/34241
* g++.dg/torture/pr34241.C: New testcase.
2007-11-27 Richard Guenther <rguenther@suse.de>
* gcc.dg/builtins-error.c: New testcase.
2007-11-27 Jakub Jelinek <jakub@redhat.com>
/* { dg-do compile } */
inline void *operator new (__SIZE_TYPE__, void *__p) throw ()
{
return __p;
}
struct A
{
A(int, double);
inline explicit A (int pattern, bool cs)
{
new (this) A (pattern, double(cs));
}
};
A test ()
{
const A a (42, true);
}
......@@ -685,6 +685,7 @@ forward_propagate_addr_expr (tree name, tree rhs)
FOR_EACH_IMM_USE_STMT (use_stmt, iter, name)
{
bool result;
tree use_rhs;
/* If the use is not in a simple assignment statement, then
there is nothing we can do. */
......@@ -712,11 +713,13 @@ forward_propagate_addr_expr (tree name, tree rhs)
pop_stmt_changes (&use_stmt);
/* Remove intermediate now unused copy and conversion chains. */
use_rhs = GIMPLE_STMT_OPERAND (use_stmt, 1);
if (result
&& TREE_CODE (GIMPLE_STMT_OPERAND (use_stmt, 0)) == SSA_NAME
&& (TREE_CODE (GIMPLE_STMT_OPERAND (use_stmt, 1)) == SSA_NAME
|| TREE_CODE (GIMPLE_STMT_OPERAND (use_stmt, 1)) == NOP_EXPR
|| TREE_CODE (GIMPLE_STMT_OPERAND (use_stmt, 1)) == CONVERT_EXPR))
&& (TREE_CODE (use_rhs) == SSA_NAME
|| ((TREE_CODE (use_rhs) == NOP_EXPR
|| TREE_CODE (use_rhs) == CONVERT_EXPR)
&& TREE_CODE (TREE_OPERAND (use_rhs, 0)) == SSA_NAME)))
{
block_stmt_iterator bsi = bsi_for_stmt (use_stmt);
release_defs (use_stmt);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment