aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vrp.c
diff options
context:
space:
mode:
authorKazu Hirata <kazu@codesourcery.com>2005-06-23 16:04:09 +0000
committerKazu Hirata <kazu@codesourcery.com>2005-06-23 16:04:09 +0000
commitc579979d6c2b0907a5a63a53206acbc5d67105a9 (patch)
tree4a87e6c81eafd68c0f78223179ac6386a7acd539 /gcc/tree-vrp.c
parent8471305a8fd00d3681f571498a6649d134a438e6 (diff)
gcc/
PR tree-optimization/22117 * tree-vrp.c (extract_range_from_binary_expr): Compute a correct range when adding two pointers. testsuite/ PR tree-optimization/22117 * gcc.dg/tree-ssa/pr22117.c: New. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@101272 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-vrp.c')
-rw-r--r--gcc/tree-vrp.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 81b0c0a471e..284208b1692 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -1073,7 +1073,14 @@ extract_range_from_binary_expr (value_range_t *vr, tree expr)
ivopts is generating expressions with pointer multiplication
in them. */
if (code == PLUS_EXPR)
- set_value_range_to_nonnull (vr, TREE_TYPE (expr));
+ {
+ if (range_is_nonnull (&vr0) || range_is_nonnull (&vr1))
+ set_value_range_to_nonnull (vr, TREE_TYPE (expr));
+ else if (range_is_null (&vr0) && range_is_null (&vr1))
+ set_value_range_to_null (vr, TREE_TYPE (expr));
+ else
+ set_value_range_to_varying (vr);
+ }
else
{
/* Subtracting from a pointer, may yield 0, so just drop the