* cp-gimplify.c (cp_fold): If COMPOUND_EXPR or MODIFY_EXPR
folded operands have side-effects, but folding changed any of them,
build a new tree with the folded operands instead of returning the
unfolded tree.
* g++.dg/opt/pr69211.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@232237
138bc75d-0d04-0410-961f-
82ee72b054a4
+2016-01-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/69211
+ * cp-gimplify.c (cp_fold): If COMPOUND_EXPR or MODIFY_EXPR
+ folded operands have side-effects, but folding changed any of them,
+ build a new tree with the folded operands instead of returning the
+ unfolded tree.
+
2016-01-09 Marek Polacek <polacek@redhat.com>
PR c++/69113
if ((code == COMPOUND_EXPR || code == MODIFY_EXPR)
&& ((op1 && TREE_SIDE_EFFECTS (op1))
|| (op0 && TREE_SIDE_EFFECTS (op0))))
- break;
+ {
+ if (op0 != TREE_OPERAND (x, 0) || op1 != TREE_OPERAND (x, 1))
+ x = build2_loc (loc, code, TREE_TYPE (x), op0, op1);
+ break;
+ }
if (TREE_CODE (x) == COMPOUND_EXPR && !op0)
op0 = build_empty_stmt (loc);
2016-01-11 Jakub Jelinek <jakub@redhat.com>
+ PR c++/69211
+ * g++.dg/opt/pr69211.C: New test.
+
PR tree-optimization/69214
* gcc.c-torture/compile/pr69214.c: New test.
--- /dev/null
+// PR c++/69211
+// { dg-do compile }
+
+int a, b;
+
+int
+foo ()
+{
+ return (a & 5UL | (b = 4, 4L)) > 4;
+}