re PR tree-optimization/31034 (ICE in set_value_range, at tree-vrp.c:267)
authorIan Lance Taylor <iant@google.com>
Mon, 5 Mar 2007 18:01:00 +0000 (18:01 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Mon, 5 Mar 2007 18:01:00 +0000 (18:01 +0000)
PR tree-optimization/31034
* tree-vrp.c (extract_range_from_assert): Don't try to handle a
half-range if the other side is an overflow infinity.

From-SVN: r122562

gcc/ChangeLog
gcc/tree-vrp.c

index 3c2a92e7d9ddc93a2bfbe6c0ac47b3556fb323a8..a1a5e3cd41cbf21ca56a279c968161b597b92e58 100644 (file)
@@ -1,3 +1,9 @@
+2007-03-05  Ian Lance Taylor  <iant@google.com>
+
+       PR tree-optimization/31034
+       * tree-vrp.c (extract_range_from_assert): Don't try to handle a
+       half-range if the other side is an overflow infinity.
+
 2007-03-05  Bernd Schmidt  <bernd.schmidt@analog.com>
 
        * config.gcc (bfin*-uclinux*): Use t-bfin-uclinux.
index d3785a427e1ec11ce6f47847803fdead3b7f55ac..fd5ba643db09ed8fe3ab7cc2d08191c5e0fc010f 100644 (file)
@@ -1137,13 +1137,14 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
       /* If the maximum value forces us to be out of bounds, simply punt.
         It would be pointless to try and do anything more since this
         all should be optimized away above us.  */
-      if (cond_code == LT_EXPR && compare_values (max, min) == 0)
+      if ((cond_code == LT_EXPR
+          && compare_values (max, min) == 0)
+         || is_overflow_infinity (max))
        set_value_range_to_varying (vr_p);
       else
        {
          /* For LT_EXPR, we create the range [MIN, MAX - 1].  */
-         if (cond_code == LT_EXPR
-             && !is_positive_overflow_infinity (max))
+         if (cond_code == LT_EXPR)
            {
              tree one = build_int_cst (type, 1);
              max = fold_build2 (MINUS_EXPR, type, max, one);
@@ -1169,13 +1170,14 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
       /* If the minimum value forces us to be out of bounds, simply punt.
         It would be pointless to try and do anything more since this
         all should be optimized away above us.  */
-      if (cond_code == GT_EXPR && compare_values (min, max) == 0)
+      if ((cond_code == GT_EXPR
+          && compare_values (min, max) == 0)
+         || is_overflow_infinity (min))
        set_value_range_to_varying (vr_p);
       else
        {
          /* For GT_EXPR, we create the range [MIN + 1, MAX].  */
-         if (cond_code == GT_EXPR
-             && !is_negative_overflow_infinity (min))
+         if (cond_code == GT_EXPR)
            {
              tree one = build_int_cst (type, 1);
              min = fold_build2 (PLUS_EXPR, type, min, one);