From 26d75703036bbdd170c157fd70a5ff1a29c27f22 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Fri, 30 Aug 2013 11:52:15 +0000 Subject: [PATCH] fold-const.c (fold_single_bit_test): Fix overflow test. 2013-08-30 Richard Biener * fold-const.c (fold_single_bit_test): Fix overflow test. From-SVN: r202103 --- gcc/ChangeLog | 4 ++++ gcc/fold-const.c | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 93213852706..c3d91d3ee4f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2013-08-30 Richard Biener + + * fold-const.c (fold_single_bit_test): Fix overflow test. + 2013-08-30 Eric Botcazou * function.c (assign_parm_setup_reg): For a parameter passed by pointer diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 1e0e7e5f985..f959f0a14a0 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -6634,10 +6634,10 @@ fold_single_bit_test (location_t loc, enum tree_code code, not overflow, adjust BITNUM and INNER. */ if (TREE_CODE (inner) == RSHIFT_EXPR && TREE_CODE (TREE_OPERAND (inner, 1)) == INTEGER_CST - && TREE_INT_CST_HIGH (TREE_OPERAND (inner, 1)) == 0 + && host_integerp (TREE_OPERAND (inner, 1), 1) && bitnum < TYPE_PRECISION (type) - && 0 > compare_tree_int (TREE_OPERAND (inner, 1), - bitnum - TYPE_PRECISION (type))) + && (TREE_INT_CST_LOW (TREE_OPERAND (inner, 1)) + < (unsigned) (TYPE_PRECISION (type) - bitnum))) { bitnum += TREE_INT_CST_LOW (TREE_OPERAND (inner, 1)); inner = TREE_OPERAND (inner, 0);