mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-18 23:51:08 +08:00
re PR tree-optimization/28230 (-O2 -fwrapv miscompiles gcc, binutils, gzip.)
2006-10-11 Richard Guenther <rguenther@suse.de> PR tree-optimization/28230 * tree-vrp.c (vrp_int_const_binop): Move flag_wrapv handling to the correct place. * gcc.dg/torture/pr28230.c: New testcase. From-SVN: r117637
This commit is contained in:
parent
d233eb7a05
commit
377d569bdb
@ -1,3 +1,9 @@
|
||||
2006-10-11 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/28230
|
||||
* tree-vrp.c (vrp_int_const_binop): Move flag_wrapv handling
|
||||
to the correct place.
|
||||
|
||||
2006-10-11 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR inline-asm/29119
|
||||
|
@ -1,3 +1,8 @@
|
||||
2006-10-11 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/28230
|
||||
* gcc.dg/torture/pr28230.c: New testcase.
|
||||
|
||||
2006-10-11 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR inline-asm/29119
|
||||
|
20
gcc/testsuite/gcc.dg/torture/pr28230.c
Normal file
20
gcc/testsuite/gcc.dg/torture/pr28230.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-fwrapv" } */
|
||||
|
||||
void foo( unsigned long long bb, unsigned short tn, unsigned e, unsigned* w );
|
||||
void foo( unsigned long long bb, unsigned short tn, unsigned e, unsigned* w )
|
||||
{
|
||||
unsigned n = tn + bb;
|
||||
do {
|
||||
e = (e > n) ? e : *w;
|
||||
n -= (e > n) ? n : e;
|
||||
if (*w)
|
||||
*w = 0;
|
||||
} while ( n );
|
||||
}
|
||||
int main()
|
||||
{
|
||||
unsigned w = 0;
|
||||
foo( 0, 0, 0, &w );
|
||||
return 0;
|
||||
}
|
@ -1235,14 +1235,12 @@ vrp_int_const_binop (enum tree_code code, tree val1, tree val2)
|
||||
{
|
||||
tree res;
|
||||
|
||||
if (flag_wrapv)
|
||||
return int_const_binop (code, val1, val2, 0);
|
||||
res = int_const_binop (code, val1, val2, 0);
|
||||
|
||||
/* If we are not using wrapping arithmetic, operate symbolically
|
||||
on -INF and +INF. */
|
||||
res = int_const_binop (code, val1, val2, 0);
|
||||
|
||||
if (TYPE_UNSIGNED (TREE_TYPE (val1)))
|
||||
if (TYPE_UNSIGNED (TREE_TYPE (val1))
|
||||
|| flag_wrapv)
|
||||
{
|
||||
int checkz = compare_values (res, val1);
|
||||
bool overflow = false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user