aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vrp.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-09-03 09:50:46 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2019-09-03 09:50:46 +0200
commit3729852e407e5e1c4f1bbacea1b53e61d7609dad (patch)
tree1dcd10f803b96abc9205d08fe36771644ea96fc8 /gcc/tree-vrp.c
parente4a8d4a7ec496dbd6602e373dcfcb72c25c60f86 (diff)
downloadgcc-3729852e407e5e1c4f1bbacea1b53e61d7609dad.zip
gcc-3729852e407e5e1c4f1bbacea1b53e61d7609dad.tar.gz
gcc-3729852e407e5e1c4f1bbacea1b53e61d7609dad.tar.bz2
re PR tree-optimization/91597 (GCC miscompiles a branch depending on a pointer tag)
PR tree-optimization/91597 * tree-vrp.c (extract_range_from_binary_expr): Remove unsafe BIT_AND_EXPR optimization for pointers, even if both operand ranges don't include NULL, the result can be NULL. * gcc.c-torture/execute/pr91597.c: New test. Co-Authored-By: Richard Biener <rguenther@suse.de> From-SVN: r275330
Diffstat (limited to 'gcc/tree-vrp.c')
-rw-r--r--gcc/tree-vrp.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index bc06480..0a7e7c7 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -1741,9 +1741,7 @@ extract_range_from_binary_expr (value_range_base *vr,
{
/* For pointer types, we are really only interested in asserting
whether the expression evaluates to non-NULL. */
- if (!range_includes_zero_p (&vr0) && !range_includes_zero_p (&vr1))
- vr->set_nonzero (expr_type);
- else if (vr0.zero_p () || vr1.zero_p ())
+ if (vr0.zero_p () || vr1.zero_p ())
vr->set_zero (expr_type);
else
vr->set_varying (expr_type);