diff options
author | Jason Merrill <jason@redhat.com> | 2011-07-08 23:33:54 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-07-08 23:33:54 -0400 |
commit | 4063e61bc63c3803f8ab2d625ebe8432ac06b3da (patch) | |
tree | 2933e4a1c40cd6d7cb203f1eec34d632fcacf4b8 /gcc/gimplify.c | |
parent | 2fda8e144a7db5ba6025cfe643da0c6111cc2b0f (diff) | |
download | gcc-4063e61bc63c3803f8ab2d625ebe8432ac06b3da.zip gcc-4063e61bc63c3803f8ab2d625ebe8432ac06b3da.tar.gz gcc-4063e61bc63c3803f8ab2d625ebe8432ac06b3da.tar.bz2 |
re PR c++/45437 (Loses reference during update)
PR c++/45437
gcc/
* gimplify.c (goa_stabilize_expr): Handle RHS preevaluation in
compound assignment.
gcc/c-family/
* c-omp.c (check_omp_for_incr_expr): Handle preevaluation.
gcc/cp/
* typeck.c (cp_build_modify_expr): Preevaluate RHS.
From-SVN: r176072
Diffstat (limited to 'gcc/gimplify.c')
-rw-r--r-- | gcc/gimplify.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 4ff7e933..5a928be 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -6451,6 +6451,13 @@ goa_stabilize_expr (tree *expr_p, gimple_seq *pre_p, tree lhs_addr, saw_lhs |= goa_stabilize_expr (&TREE_OPERAND (expr, 0), pre_p, lhs_addr, lhs_var); break; + case COMPOUND_EXPR: + /* Break out any preevaluations from cp_build_modify_expr. */ + for (; TREE_CODE (expr) == COMPOUND_EXPR; + expr = TREE_OPERAND (expr, 1)) + gimplify_stmt (&TREE_OPERAND (expr, 0), pre_p); + *expr_p = expr; + return goa_stabilize_expr (expr_p, pre_p, lhs_addr, lhs_var); default: break; } |