From 0982a4b872aa0f8c0d3ec8f8cf66aeaf0be97380 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 11 May 1995 19:25:36 +0000 Subject: [PATCH] *** empty log message *** From-SVN: r9623 --- gcc/fold-const.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 7c137ec39a7..644807d0b43 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -1741,7 +1741,8 @@ operand_equal_for_comparison_p (arg0, arg1, other) if (operand_equal_p (arg0, arg1, 0)) return 1; - if (! INTEGRAL_TYPE_P (TREE_TYPE (arg0))) + if (! INTEGRAL_TYPE_P (TREE_TYPE (arg0)) + || ! INTEGRAL_TYPE_P (TREE_TYPE (arg1))) return 0; /* Duplicate what shorten_compare does to ARG1 and see if that gives the @@ -5053,16 +5054,29 @@ fold (expr) tree arg00 = TREE_OPERAND (arg0, 0); tree arg01; - if (kind0 == '1') + if (kind0 == '1' || code0 == TRUTH_NOT_EXPR) return fold (build1 (code0, type, fold (build1 (CLEANUP_POINT_EXPR, TREE_TYPE (arg00), arg00)))); - if ((kind0 == '<' || kind0 == '2') - && ! TREE_SIDE_EFFECTS (arg01 = TREE_OPERAND (arg0, 1))) - return fold (build (code0, type, - fold (build1 (CLEANUP_POINT_EXPR, - TREE_TYPE (arg00), arg00)), - arg01)); + + if (kind0 == '<' || kind0 == '2' + || code0 == TRUTH_ANDIF_EXPR || code0 == TRUTH_ORIF_EXPR + || code0 == TRUTH_AND_EXPR || code0 == TRUTH_OR_EXPR + || code0 == TRUTH_XOR_EXPR) + { + arg01 = TREE_OPERAND (arg0, 1); + + if (! TREE_SIDE_EFFECTS (arg00)) + return fold (build (code0, type, arg00, + fold (build1 (CLEANUP_POINT_EXPR, + TREE_TYPE (arg01), arg01)))); + + if (! TREE_SIDE_EFFECTS (arg01)) + return fold (build (code0, type, + fold (build1 (CLEANUP_POINT_EXPR, + TREE_TYPE (arg00), arg00)), + arg01)); + } return t; } -- 2.30.2