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);