Hi,
On 06/05/2014 03:20 PM, Richard Biener wrote:
I think the operands have to be reversed though - the type matches
that of op0. Sorry ;)
Something like this, then?
Thanks,
Paolo.
///////////////
Index: cp-gimplify.c
===================================================================
--- cp-gimplify.c (revision 211274)
+++ cp-gimplify.c (working copy)
@@ -629,19 +629,12 @@ cp_gimplify_expr (tree *expr_p, gimple_seq *pre_p,
Also drop volatile variables on the RHS to avoid infinite
recursion from gimplify_expr trying to load the value. */
- if (!TREE_SIDE_EFFECTS (op1)
- || (DECL_P (op1) && TREE_THIS_VOLATILE (op1)))
+ if (!TREE_SIDE_EFFECTS (op1))
*expr_p = op0;
- else if (TREE_CODE (op1) == MEM_REF
- && TREE_THIS_VOLATILE (op1))
- {
- /* Similarly for volatile MEM_REFs on the RHS. */
- if (!TREE_SIDE_EFFECTS (TREE_OPERAND (op1, 0)))
- *expr_p = op0;
- else
- *expr_p = build2 (COMPOUND_EXPR, TREE_TYPE (*expr_p),
- TREE_OPERAND (op1, 0), op0);
- }
+ else if (TREE_THIS_VOLATILE (op1)
+ && (REFERENCE_CLASS_P (op1) || DECL_P (op1)))
+ *expr_p = build2 (COMPOUND_EXPR, TREE_TYPE (*expr_p),
+ build_fold_addr_expr (op1), op0);
else
*expr_p = build2 (COMPOUND_EXPR, TREE_TYPE (*expr_p),
op0, op1);