As noted by Kenny and Joern.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2013-08-30  Richard Biener  <rguent...@suse.de>

        * fold-const.c (fold_single_bit_test): Fix overflow test.

Index: gcc/fold-const.c
===================================================================
--- gcc/fold-const.c    (revision 202100)
+++ gcc/fold-const.c    (working copy)
@@ -6634,10 +6634,10 @@ fold_single_bit_test (location_t loc, en
         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);

Reply via email to