diff options
author | Ian Lance Taylor <iant@google.com> | 2007-03-05 18:01:00 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2007-03-05 18:01:00 +0000 |
commit | 7343ff45caa89102f6d804cb1763276355e94443 (patch) | |
tree | c9f92192867005cede3b191cf655a7c041ddda8e /gcc/tree-vrp.c | |
parent | 666ff4f65d256dec0974941605cf76db0b138a76 (diff) | |
download | gcc-7343ff45caa89102f6d804cb1763276355e94443.zip gcc-7343ff45caa89102f6d804cb1763276355e94443.tar.gz gcc-7343ff45caa89102f6d804cb1763276355e94443.tar.bz2 |
re PR tree-optimization/31034 (ICE in set_value_range, at tree-vrp.c:267)
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
Diffstat (limited to 'gcc/tree-vrp.c')
-rw-r--r-- | gcc/tree-vrp.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index d3785a4..fd5ba64 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -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); |