re PR tree-optimization/43000 (VRP miscompiles python with -fwrapv)
2010-02-09 Richard Guenther <rguenther@suse.de> PR tree-optimization/43000 * tree-vrp.c (vrp_int_const_binop): Only handle unsigned arithmetic manually. * gcc.dg/torture/pr43000.c: New testcase. * gcc.dg/torture/pr43002.c: Likewise. From-SVN: r156621
This commit is contained in:
parent
5e1d6b4c15
commit
9605a6060a
|
@ -1,3 +1,9 @@
|
||||||
|
2010-02-09 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/43000
|
||||||
|
* tree-vrp.c (vrp_int_const_binop): Only handle unsigned
|
||||||
|
arithmetic manually.
|
||||||
|
|
||||||
2010-02-08 Jakub Jelinek <jakub@redhat.com>
|
2010-02-08 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR tree-optimization/42931
|
PR tree-optimization/42931
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2010-02-09 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/43000
|
||||||
|
* gcc.dg/torture/pr43000.c: New testcase.
|
||||||
|
* gcc.dg/torture/pr43002.c: Likewise.
|
||||||
|
|
||||||
2010-02-09 Daniel Kraft <d@domob.eu>
|
2010-02-09 Daniel Kraft <d@domob.eu>
|
||||||
|
|
||||||
PR fortran/39171
|
PR fortran/39171
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
/* { dg-do run } */
|
||||||
|
/* { dg-options "-fwrapv" } */
|
||||||
|
|
||||||
|
int __attribute__((noinline))
|
||||||
|
foo (long i, long j)
|
||||||
|
{
|
||||||
|
if (i >= 1)
|
||||||
|
if (j > -(long)(((unsigned long)(long)-1)>>1))
|
||||||
|
{
|
||||||
|
long x;
|
||||||
|
j--;
|
||||||
|
x = i + j;
|
||||||
|
if (x >= 0)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
extern void abort (void);
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
if (foo (1, 1) != 1)
|
||||||
|
abort ();
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
/* { dg-do compile } */
|
||||||
|
/* { dg-options "-Wall -fwrapv" } */
|
||||||
|
|
||||||
|
long A[4], B[100];
|
||||||
|
|
||||||
|
void foo(void)
|
||||||
|
{
|
||||||
|
int i, j, k = 3;
|
||||||
|
while (A[k] && k > 0) k--; /* k = {0, 1, 2, 3} */
|
||||||
|
for (i = 3 - k; i >= 0; i--) /* i = {0..3-k} */
|
||||||
|
for (j = 0; j <= k; j++) { /* line 8; j = {0..k} */
|
||||||
|
B[i + j] = 0; /* line 9; i + j = {0..3-k+k} = {0..3} */
|
||||||
|
for (j = 0; j <= k; j++); /* only one iteration is done, with j == 0 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1898,9 +1898,9 @@ vrp_int_const_binop (enum tree_code code, tree val1, tree val2)
|
||||||
|
|
||||||
res = int_const_binop (code, val1, val2, 0);
|
res = int_const_binop (code, val1, val2, 0);
|
||||||
|
|
||||||
/* If we are not using wrapping arithmetic, operate symbolically
|
/* If we are using unsigned arithmetic, operate symbolically
|
||||||
on -INF and +INF. */
|
on -INF and +INF as int_const_binop only handles signed overflow. */
|
||||||
if (TYPE_OVERFLOW_WRAPS (TREE_TYPE (val1)))
|
if (TYPE_UNSIGNED (TREE_TYPE (val1)))
|
||||||
{
|
{
|
||||||
int checkz = compare_values (res, val1);
|
int checkz = compare_values (res, val1);
|
||||||
bool overflow = false;
|
bool overflow = false;
|
||||||
|
|
Loading…
Reference in New Issue