From: Jeff Law Date: Fri, 25 Jun 2004 18:31:56 +0000 (-0600) Subject: gimplify.c (gimplify_compound_lval): Reset TREE_SIDE_EFFECTS after gimplifying the... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=71f85957b6ec652431ca32b7de602167180b7fe0;p=gcc.git gimplify.c (gimplify_compound_lval): Reset TREE_SIDE_EFFECTS after gimplifying the innermost component. * gimplify.c (gimplify_compound_lval): Reset TREE_SIDE_EFFECTS after gimplifying the innermost component. In From-SVN: r83670 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 93329f92785..8866356f536 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-06-24 Jeff Law + + * gimplify.c (gimplify_compound_lval): Reset TREE_SIDE_EFFECTS + after gimplifying the innermost component. + 2004-06-25 Richard Sandiford PR target/16176 diff --git a/gcc/gimplify.c b/gcc/gimplify.c index a7960fde376..d34de91c0a3 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -1942,6 +1942,22 @@ gimplify_compound_lval (tree *expr_p, tree *pre_p, want_lvalue ? fb_lvalue : fb_rvalue); ret = MIN (ret, tret); + /* The innermost expression P may have originally had TREE_SIDE_EFFECTS + set which would have caused all the outer expressions in EXPR_P leading + to P to also have had TREE_SIDE_EFFECTS set. + + Gimplification of P may have cleared TREE_SIDE_EFFECTS on P, which should + be propagated to P's parents, innermost to outermost. */ + for (p = expr_p; handled_component_p (*p); p = &TREE_OPERAND (*p, 0)) + VARRAY_PUSH_TREE (stack, *p); + + for (; VARRAY_ACTIVE_SIZE (stack) > 0; ) + { + tree t = VARRAY_TOP_TREE (stack); + recalculate_side_effects (t); + VARRAY_POP (stack); + } + /* If the outermost expression is a COMPONENT_REF, canonicalize its type. */ if (!want_lvalue && TREE_CODE (*expr_p) == COMPONENT_REF) {