OSDN Git Service

PR tree-optimization/22230
authorsteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 14 Jul 2005 22:54:42 +0000 (22:54 +0000)
committersteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 14 Jul 2005 22:54:42 +0000 (22:54 +0000)
gcc/
* tree-vrp.c (extract_range_from_binary_expr): Fix logics thinko in
the computation of the four cross productions for "range op range".

testsuite/
* gcc.dg/tree-ssa/pr22230.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@102038 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/pr22230.c [new file with mode: 0644]
gcc/tree-vrp.c

index 1105727..2a13af2 100644 (file)
@@ -1,3 +1,9 @@
+2005-07-14  Steven Bosscher  <stevenb@suse.de>
+
+       PR tree-optimization/22230
+       * tree-vrp.c (extract_range_from_binary_expr): Fix logics thinko in
+       the computation of the four cross productions for "range op range".
+
 2005-07-14  Alexandre Oliva  <aoliva@redhat.com>
             Ulrich Weigand  <uweigand@de.ibm.com>
 
index 334e96e..2e5eee9 100644 (file)
@@ -1,3 +1,8 @@
+2005-07-15  Steven Bosscher  <stevenb@suse.de>
+
+       PR tree-optimization/22230
+       * gcc.dg/tree-ssa/pr22230.c: New test.
+
 2005-07-14  Jakub Jelinek  <jakub@redhat.com>
 
        * gfortran.dg/g77/cpp6.f: New test.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr22230.c b/gcc/testsuite/gcc.dg/tree-ssa/pr22230.c
new file mode 100644 (file)
index 0000000..4d65349
--- /dev/null
@@ -0,0 +1,21 @@
+/* { dg-do run } */
+/* { dg-options "-O1 -ftree-vrp" } */
+
+/* PR tree-optimization/22230
+
+   The meet of the ranges in "i*i" was not computed correctly, leading
+   gcc to believe that a was equal to 0 after the loop.  */
+
+extern void abort (void) __attribute__((noreturn));
+
+int main (void)
+{
+  long a, i;
+
+  for (i = 0; i < 5; i++)
+    a = i * i;
+  if (a != 16)
+    abort ();
+  return 0;
+}
+
index bcbc738..a42a21a 100644 (file)
@@ -1183,7 +1183,7 @@ extract_range_from_binary_expr (value_range_t *vr, tree expr)
               ? vrp_int_const_binop (code, vr0.max, vr1.min)
               : NULL_TREE;
 
-      val[3] = (vr0.min != vr1.min && vr0.max != vr1.max)
+      val[3] = (vr0.min != vr0.max && vr1.min != vr1.max)
               ? vrp_int_const_binop (code, vr0.max, vr1.max)
               : NULL_TREE;