From: Richard Kenner Date: Thu, 8 May 1997 17:20:18 +0000 (-0400) Subject: (fold, truth_andor): Disable optimization for side effects on RHS. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=96f06cb6dda0ad26a734dea2f05dd07a246b7ef1;p=gcc.git (fold, truth_andor): Disable optimization for side effects on RHS. From-SVN: r14047 --- diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 84e098a6c15..45311c91ed3 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -4791,12 +4791,14 @@ fold (expr) to A || (B && C). Note that either operator can be any of the four truth and/or operations and the transformation will still be valid. Also note that we only care about order for the - ANDIF and ORIF operators. */ + ANDIF and ORIF operators. If B contains side effects, this + might change the truth-value of A. */ if (TREE_CODE (arg0) == TREE_CODE (arg1) && (TREE_CODE (arg0) == TRUTH_ANDIF_EXPR || TREE_CODE (arg0) == TRUTH_ORIF_EXPR || TREE_CODE (arg0) == TRUTH_AND_EXPR - || TREE_CODE (arg0) == TRUTH_OR_EXPR)) + || TREE_CODE (arg0) == TRUTH_OR_EXPR) + && ! TREE_SIDE_EFFECTS (TREE_OPERAND (arg0, 1))) { tree a00 = TREE_OPERAND (arg0, 0); tree a01 = TREE_OPERAND (arg0, 1);