From 7343ff45caa89102f6d804cb1763276355e94443 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 5 Mar 2007 18:01:00 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/tree-vrp.c | 14 ++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3c2a92e7d9d..a1a5e3cd41c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-03-05 Ian Lance Taylor + + 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 * config.gcc (bfin*-uclinux*): Use t-bfin-uclinux. diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index d3785a427e1..fd5ba643db0 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); -- 2.30.2