diff options
author | Kazu Hirata <kazu@codesourcery.com> | 2005-06-23 16:04:09 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@codesourcery.com> | 2005-06-23 16:04:09 +0000 |
commit | c579979d6c2b0907a5a63a53206acbc5d67105a9 (patch) | |
tree | 4a87e6c81eafd68c0f78223179ac6386a7acd539 /gcc/tree-vrp.c | |
parent | 8471305a8fd00d3681f571498a6649d134a438e6 (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.c | 9 |
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 |