summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp22.c16
-rw-r--r--gcc/tree-vrp.c4
4 files changed, 29 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a06adad06ca..7cc52812c11 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2005-11-19 James A. Morrison <phython@gcc.gnu.org>
+
+ * tree-vrp.c (compare_ranges): Return false for EQ_EXPR if VR0 is less
+ than VR1 or vice-versa.
+
2005-11-19 Hans-Peter Nilsson <hp@axis.com>
PR middle-end/24912
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 89fdbeb9cb9..edc8723f020 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2005-11-19 James A. Morrison <phython@gcc.gnu.org>
+
+ * gcc.dg/tree-ssa/vrp22.c: New test.
+
2005-11-19 Hans-Peter Nilsson <hp@axis.com>
PR middle-end/24912
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp22.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp22.c
new file mode 100644
index 00000000000..1bb312a9f28
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp22.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -ftree-vrp -fdump-tree-vrp" } */
+
+extern void link_error ();
+
+void test02(unsigned int a, unsigned int b)
+{
+ unsigned int x = 0x80000000;
+ if (a > x)
+ if (b < x)
+ if (a == b)
+ link_error ();
+}
+
+/* { dg-final { scan-tree-dump-times "link_error" 0 "vrp" } } */
+/* { dg-final { cleanup-tree-dump "vrp" } } */
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index f88b23e1aeb..af632e6f6e2 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -1878,6 +1878,10 @@ compare_ranges (enum tree_code comp, value_range_t *vr0, value_range_t *vr1)
else if (cmp_min != -2 && cmp_max != -2)
return boolean_false_node;
}
+ /* If [V0_MIN, V1_MAX] < [V1_MIN, V1_MAX] then V0 != V1. */
+ else if (compare_values (vr0->min, vr1->max) == 1
+ || compare_values (vr1->min, vr0->max) == 1)
+ return boolean_false_node;
return NULL_TREE;
}