aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vrp.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-03-19 14:11:05 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-03-19 14:11:05 +0000
commitbe742eb4d4a3295d6e07e4c8d66a5ab54a68ef2f (patch)
tree479d5e4e7e3568816973b2874c62f0be5fb17883 /gcc/tree-vrp.c
parent68d93a19c4d764012d947ef7c0ab8abbb0d72775 (diff)
downloadgcc-be742eb4d4a3295d6e07e4c8d66a5ab54a68ef2f.zip
gcc-be742eb4d4a3295d6e07e4c8d66a5ab54a68ef2f.tar.gz
gcc-be742eb4d4a3295d6e07e4c8d66a5ab54a68ef2f.tar.bz2
re PR tree-optimization/84933 (ICE in set_value_range, at tree-vrp.c:288 since r257852)
2018-03-19 Richard Biener <rguenther@suse.de> PR tree-optimization/84933 * tree-vrp.c (set_and_canonicalize_value_range): Treat out-of-bound values as -INF/INF when canonicalizing an ANTI_RANGE to a RANGE. * g++.dg/pr84933.C: New testcase. From-SVN: r258646
Diffstat (limited to 'gcc/tree-vrp.c')
-rw-r--r--gcc/tree-vrp.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 625e65b..aa53db6 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -386,8 +386,13 @@ set_and_canonicalize_value_range (value_range *vr, enum value_range_type t,
/* Anti-ranges that can be represented as ranges should be so. */
if (t == VR_ANTI_RANGE)
{
- bool is_min = vrp_val_is_min (min);
- bool is_max = vrp_val_is_max (max);
+ /* For -fstrict-enums we may receive out-of-range ranges so consider
+ values < -INF and values > INF as -INF/INF as well. */
+ tree type = TREE_TYPE (min);
+ bool is_min = (INTEGRAL_TYPE_P (type)
+ && tree_int_cst_compare (min, TYPE_MIN_VALUE (type)) <= 0);
+ bool is_max = (INTEGRAL_TYPE_P (type)
+ && tree_int_cst_compare (max, TYPE_MAX_VALUE (type)) >= 0);
if (is_min && is_max)
{