re PR tree-optimization/51466 (ICE in gimple_rhs_has_side_effects,)
PR tree-optimization/51466 * tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Also copy TREE_SIDE_EFFECTS. * gcc.c-torture/execute/pr51466.c: New test. From-SVN: r182136
This commit is contained in:
parent
3215710740
commit
4be257dcc4
|
@ -1,3 +1,9 @@
|
|||
2011-12-08 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/51466
|
||||
* tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Also copy
|
||||
TREE_SIDE_EFFECTS.
|
||||
|
||||
2011-12-08 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* tree-ssa-operands.c (add_stmt_operand): Do not mark stmts
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2011-12-08 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/51466
|
||||
* gcc.c-torture/execute/pr51466.c: New test.
|
||||
|
||||
2011-12-08 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/50815
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
/* PR tree-optimization/51466 */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
__attribute__((noinline, noclone)) int
|
||||
foo (int i)
|
||||
{
|
||||
volatile int v[4];
|
||||
int *p;
|
||||
v[i] = 6;
|
||||
p = (int *) &v[i];
|
||||
return *p;
|
||||
}
|
||||
|
||||
__attribute__((noinline, noclone)) int
|
||||
bar (int i)
|
||||
{
|
||||
volatile int v[4];
|
||||
int *p;
|
||||
v[i] = 6;
|
||||
p = (int *) &v[i];
|
||||
*p = 8;
|
||||
return v[i];
|
||||
}
|
||||
|
||||
__attribute__((noinline, noclone)) int
|
||||
baz (int i)
|
||||
{
|
||||
volatile int v[4];
|
||||
int *p;
|
||||
v[i] = 6;
|
||||
p = (int *) &v[0];
|
||||
*p = 8;
|
||||
return v[i];
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
if (foo (3) != 6 || bar (2) != 8 || baz (0) != 8 || baz (1) != 6)
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
|
@ -929,10 +929,12 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs,
|
|||
*def_rhs_basep = build2 (MEM_REF, TREE_TYPE (*def_rhs_basep),
|
||||
new_base, new_offset);
|
||||
TREE_THIS_VOLATILE (*def_rhs_basep) = TREE_THIS_VOLATILE (lhs);
|
||||
TREE_SIDE_EFFECTS (*def_rhs_basep) = TREE_SIDE_EFFECTS (lhs);
|
||||
TREE_THIS_NOTRAP (*def_rhs_basep) = TREE_THIS_NOTRAP (lhs);
|
||||
new_lhs = unshare_expr (TREE_OPERAND (def_rhs, 0));
|
||||
gimple_assign_set_lhs (use_stmt, new_lhs);
|
||||
TREE_THIS_VOLATILE (new_lhs) = TREE_THIS_VOLATILE (lhs);
|
||||
TREE_SIDE_EFFECTS (new_lhs) = TREE_SIDE_EFFECTS (lhs);
|
||||
*def_rhs_basep = saved;
|
||||
tidy_after_forward_propagate_addr (use_stmt);
|
||||
/* Continue propagating into the RHS if this was not the
|
||||
|
@ -1011,10 +1013,12 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs,
|
|||
*def_rhs_basep = build2 (MEM_REF, TREE_TYPE (*def_rhs_basep),
|
||||
new_base, new_offset);
|
||||
TREE_THIS_VOLATILE (*def_rhs_basep) = TREE_THIS_VOLATILE (rhs);
|
||||
TREE_SIDE_EFFECTS (*def_rhs_basep) = TREE_SIDE_EFFECTS (rhs);
|
||||
TREE_THIS_NOTRAP (*def_rhs_basep) = TREE_THIS_NOTRAP (rhs);
|
||||
new_rhs = unshare_expr (TREE_OPERAND (def_rhs, 0));
|
||||
gimple_assign_set_rhs1 (use_stmt, new_rhs);
|
||||
TREE_THIS_VOLATILE (new_rhs) = TREE_THIS_VOLATILE (rhs);
|
||||
TREE_SIDE_EFFECTS (new_rhs) = TREE_SIDE_EFFECTS (rhs);
|
||||
*def_rhs_basep = saved;
|
||||
fold_stmt_inplace (use_stmt_gsi);
|
||||
tidy_after_forward_propagate_addr (use_stmt);
|
||||
|
|
Loading…
Reference in New Issue