From 150594ba69066ade4b78e51d0a20ef9a16029bc2 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Sat, 26 May 2007 03:29:58 +0000 Subject: re PR tree-optimization/32090 (ICE in forwprop with zero sized array) 2007-05-25 Andrew Pinski PR tree-opt/32090 * tree-ssa-forwprop.c (forward_propagate_addr_into_variable_array_index): Remove the lhs argument. Use the type of def_rhs instead of lhs. (forward_propagate_addr_expr_1): Update use of forward_propagate_addr_into_variable_array_index. 2007-05-25 Andrew Pinski PR tree-opt/32090 * g++.dg/opt/array2.C: New testcase. From-SVN: r125087 --- gcc/tree-ssa-forwprop.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'gcc/tree-ssa-forwprop.c') diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c index 143268e3..e42406c 100644 --- a/gcc/tree-ssa-forwprop.c +++ b/gcc/tree-ssa-forwprop.c @@ -478,8 +478,8 @@ tidy_after_forward_propagate_addr (tree stmt) mark_symbols_for_renaming (stmt); } -/* DEF_RHS defines LHS which is contains the address of the 0th element - in an array. USE_STMT uses LHS to compute the address of an +/* DEF_RHS contains the address of the 0th element in an array. + USE_STMT uses type of DEF_RHS to compute the address of an arbitrary element within the array. The (variable) byte offset of the element is contained in OFFSET. @@ -494,7 +494,7 @@ tidy_after_forward_propagate_addr (tree stmt) with the new address computation. */ static bool -forward_propagate_addr_into_variable_array_index (tree offset, tree lhs, +forward_propagate_addr_into_variable_array_index (tree offset, tree def_rhs, tree use_stmt) { tree index; @@ -516,7 +516,7 @@ forward_propagate_addr_into_variable_array_index (tree offset, tree lhs, /* Try to find an expression for a proper index. This is either a multiplication expression by the element size or just the ssa name we came along in case the element size is one. */ - if (integer_onep (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (lhs))))) + if (integer_onep (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (def_rhs))))) index = offset; else { @@ -531,7 +531,7 @@ forward_propagate_addr_into_variable_array_index (tree offset, tree lhs, if (TREE_CODE (offset) != MULT_EXPR || TREE_CODE (TREE_OPERAND (offset, 1)) != INTEGER_CST || !simple_cst_equal (TREE_OPERAND (offset, 1), - TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (lhs))))) + TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (def_rhs))))) return false; /* The first operand to the MULT_EXPR is the desired index. */ @@ -679,7 +679,7 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs, tree use_stmt, bool res; tree offset_stmt = SSA_NAME_DEF_STMT (TREE_OPERAND (rhs, 1)); - res = forward_propagate_addr_into_variable_array_index (offset_stmt, lhs, + res = forward_propagate_addr_into_variable_array_index (offset_stmt, def_rhs, use_stmt); return res; } @@ -694,7 +694,7 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs, tree use_stmt, { bool res; tree offset_stmt = SSA_NAME_DEF_STMT (TREE_OPERAND (rhs, 0)); - res = forward_propagate_addr_into_variable_array_index (offset_stmt, lhs, + res = forward_propagate_addr_into_variable_array_index (offset_stmt, def_rhs, use_stmt); return res; } -- cgit v1.1