re PR tree-optimization/22230 (value range propagation error)

PR tree-optimization/22230

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.

From-SVN: r102038
This commit is contained in:
Steven Bosscher 2005-07-14 22:54:42 +00:00 committed by Steven Bosscher
parent e8f35d4dc7
commit 3c341936db
4 changed files with 33 additions and 1 deletions

View 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>

View 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.

View File

@ -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;
}

View 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;