diff options
author | Richard Guenther <rguenther@suse.de> | 2007-06-21 14:54:47 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2007-06-21 14:54:47 +0000 |
commit | 4228997795917ab648bc7b58b9497e877ae8b92a (patch) | |
tree | 30178c30f5f53ba548194c129e6273ceb7ad0460 /gcc/tree-vrp.c | |
parent | 461a73b5789a77c47ddc54e02358d92e13486098 (diff) | |
download | gcc-4228997795917ab648bc7b58b9497e877ae8b92a.zip gcc-4228997795917ab648bc7b58b9497e877ae8b92a.tar.gz gcc-4228997795917ab648bc7b58b9497e877ae8b92a.tar.bz2 |
re PR tree-optimization/32453 (ICE in build2_stat, at tree.c:3074 (extract_range_from_assert))
2007-06-21 Richard Guenther <rguenther@suse.de>
PR tree-optimization/32453
* tree-vrp.c (extract_range_from_assert): Build POINTER_PLUS_EXPR
for pointer anti-range.
* gcc.c-torture/compile/pr32453.c: New testcase.
From-SVN: r125922
Diffstat (limited to 'gcc/tree-vrp.c')
-rw-r--r-- | gcc/tree-vrp.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 8fba946..937a76b 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -1473,10 +1473,13 @@ extract_range_from_assert (value_range_t *vr_p, tree expr) } min = positive_overflow_infinity (TREE_TYPE (var_vr->min)); } - else + else if (!POINTER_TYPE_P (TREE_TYPE (var_vr->min))) min = fold_build2 (PLUS_EXPR, TREE_TYPE (var_vr->min), anti_max, build_int_cst (TREE_TYPE (var_vr->min), 1)); + else + min = fold_build2 (POINTER_PLUS_EXPR, TREE_TYPE (var_vr->min), + anti_max, size_int (1)); max = real_max; set_value_range (vr_p, VR_RANGE, min, max, vr_p->equiv); } |