Commit ae818d3b by Erik Rozendaal Committed by Jason Merrill

typeck.c (unary_complex_lvalue): Do not duplicate the argument to modify...

        * typeck.c (unary_complex_lvalue): Do not duplicate the
        argument to modify, pre-, or post-increment when used as an
        lvalue and when the argument has side-effects.

From-SVN: r43884
parent d777856d
2001-07-09 Erik Rozendaal <dlr@acm.org>
* typeck.c (unary_complex_lvalue): Do not duplicate the
argument to modify, pre-, or post-increment when used as an
lvalue and when the argument has side-effects.
2001-07-08 Joseph S. Myers <jsm28@cam.ac.uk>
* decl.c (start_decl): Don't call SET_DEFAULT_DECL_ATTRIBUTES.
......
......@@ -4808,12 +4808,21 @@ unary_complex_lvalue (code, arg)
|| TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR)
return rationalize_conditional_expr (code, arg);
/* Handle (a = b), (++a), and (--a) used as an "lvalue". */
if (TREE_CODE (arg) == MODIFY_EXPR
|| TREE_CODE (arg) == PREINCREMENT_EXPR
|| TREE_CODE (arg) == PREDECREMENT_EXPR)
{
tree lvalue = TREE_OPERAND (arg, 0);
if (TREE_SIDE_EFFECTS (lvalue))
{
lvalue = stabilize_reference (lvalue);
arg = build (TREE_CODE (arg), TREE_TYPE (arg),
lvalue, TREE_OPERAND (arg, 1));
}
return unary_complex_lvalue
(code, build (COMPOUND_EXPR, TREE_TYPE (TREE_OPERAND (arg, 0)),
arg, TREE_OPERAND (arg, 0)));
(code, build (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue));
}
if (code != ADDR_EXPR)
return 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment