mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-21 22:51:06 +08:00
re PR middle-end/37861 (Bogus array bounds warning)
2008-12-02 Martin Jambor <mjambor@suse.cz> PR middle-end/37861 * tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Do not check for INDIRECT_REFs. (forward_propagate_addr_into_variable_array_index): Check that the offset is not computed from a MULT_EXPR, use is_gimple_assign rather than the gimple code directly. From-SVN: r142355
This commit is contained in:
parent
96e4a79fbd
commit
d47a01516c
@ -1,3 +1,12 @@
|
||||
2008-12-02 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
PR middle-end/37861
|
||||
* tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Do not check
|
||||
for INDIRECT_REFs.
|
||||
(forward_propagate_addr_into_variable_array_index): Check that the
|
||||
offset is not computed from a MULT_EXPR, use is_gimple_assign rather
|
||||
than the gimple code directly.
|
||||
|
||||
2008-12-02 Ben Elliston <bje@au.ibm.com>
|
||||
|
||||
* config/spu/float_disf.c (__floatdisf): Prototype.
|
||||
|
@ -613,19 +613,27 @@ forward_propagate_addr_into_variable_array_index (tree offset,
|
||||
tree index;
|
||||
gimple offset_def, use_stmt = gsi_stmt (*use_stmt_gsi);
|
||||
|
||||
/* 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. */
|
||||
/* Get the offset's defining statement. */
|
||||
offset_def = SSA_NAME_DEF_STMT (offset);
|
||||
|
||||
/* 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. In that case, however, we do not
|
||||
allow multiplications because they can be computing index to a higher
|
||||
level dimension (PR 37861). */
|
||||
if (integer_onep (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (def_rhs)))))
|
||||
index = offset;
|
||||
{
|
||||
if (is_gimple_assign (offset_def)
|
||||
&& gimple_assign_rhs_code (offset_def) == MULT_EXPR)
|
||||
return false;
|
||||
|
||||
index = offset;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Get the offset's defining statement. */
|
||||
offset_def = SSA_NAME_DEF_STMT (offset);
|
||||
|
||||
/* The statement which defines OFFSET before type conversion
|
||||
must be a simple GIMPLE_ASSIGN. */
|
||||
if (gimple_code (offset_def) != GIMPLE_ASSIGN)
|
||||
if (!is_gimple_assign (offset_def))
|
||||
return false;
|
||||
|
||||
/* The RHS of the statement which defines OFFSET must be a
|
||||
@ -805,9 +813,6 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs,
|
||||
array_ref = TREE_OPERAND (def_rhs, 0);
|
||||
if (TREE_CODE (array_ref) != ARRAY_REF
|
||||
|| TREE_CODE (TREE_TYPE (TREE_OPERAND (array_ref, 0))) != ARRAY_TYPE
|
||||
/* Avoid accessing hidden multidimensional arrays in this way or VRP
|
||||
might give out bogus warnings (see PR 37861) */
|
||||
|| TREE_CODE (TREE_OPERAND (array_ref, 0)) == INDIRECT_REF
|
||||
|| !integer_zerop (TREE_OPERAND (array_ref, 1)))
|
||||
return false;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user