aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vrp.c
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@google.com>2007-03-26 21:43:30 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2007-03-26 21:43:30 +0000
commitfa6338517fd9e503ab4b634d9eec7c875fcea7ec (patch)
tree04800cbd7818dfff26637d50f412f6a224326008 /gcc/tree-vrp.c
parent0d67a675f058ea075a64d3675ca8b9b7322594fd (diff)
downloadgcc-fa6338517fd9e503ab4b634d9eec7c875fcea7ec.zip
gcc-fa6338517fd9e503ab4b634d9eec7c875fcea7ec.tar.gz
gcc-fa6338517fd9e503ab4b634d9eec7c875fcea7ec.tar.bz2
re PR tree-optimization/31345 (ICE in set_value_range, at tree-vrp.c:269)
./: PR tree-optimization/31345 * tree-vrp.c (extract_range_from_binary_expr): Turn ranges like [+INF, +INF(OVF)] into VARYING. testsuite/: PR tree-optimization/31345 * gcc.c-torture/compile/pr31345-1.c: New test. From-SVN: r123237
Diffstat (limited to 'gcc/tree-vrp.c')
-rw-r--r--gcc/tree-vrp.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 262eeb2..3b7358d 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -1982,10 +1982,18 @@ extract_range_from_binary_expr (value_range_t *vr, tree expr)
return;
}
+ /* We punt if:
+ 1) [-INF, +INF]
+ 2) [-INF, +-INF(OVF)]
+ 3) [+-INF(OVF), +INF]
+ 4) [+-INF(OVF), +-INF(OVF)]
+ We learn nothing when we have INF and INF(OVF) on both sides.
+ Note that we do accept [-INF, -INF] and [+INF, +INF] without
+ overflow. */
if ((min == TYPE_MIN_VALUE (TREE_TYPE (min))
- || is_negative_overflow_infinity (min))
+ || is_overflow_infinity (min))
&& (max == TYPE_MAX_VALUE (TREE_TYPE (max))
- || is_positive_overflow_infinity (max)))
+ || is_overflow_infinity (max)))
{
set_value_range_to_varying (vr);
return;