re PR tree-optimization/63665 (wrong code with signed overflow even with -fwrapv)
2014-10-28 Richard Biener <rguenther@suse.de> PR middle-end/63665 * fold-const.c (fold_comparison): Properly guard simplifying against INT_MAX/INT_MIN with !TYPE_OVERFLOW_WRAPS. * gcc.dg/pr63665.c: New testcase. From-SVN: r216781
This commit is contained in:
parent
e29dfbf07d
commit
9ccaac1188
|
@ -1,3 +1,9 @@
|
|||
2014-10-28 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/63665
|
||||
* fold-const.c (fold_comparison): Properly guard simplifying
|
||||
against INT_MAX/INT_MIN with !TYPE_OVERFLOW_WRAPS.
|
||||
|
||||
2014-10-28 Alan Lawrence <alan.lawrence@arm.com>
|
||||
|
||||
* expr.c (expand_expr_real_2): Remove code handling VEC_LSHIFT_EXPR.
|
||||
|
|
|
@ -8749,7 +8749,8 @@ fold_comparison (location_t loc, enum tree_code code, tree type,
|
|||
|
||||
/* If the constant operation overflowed this can be
|
||||
simplified as a comparison against INT_MAX/INT_MIN. */
|
||||
if (TREE_OVERFLOW (new_const))
|
||||
if (TREE_OVERFLOW (new_const)
|
||||
&& !TYPE_OVERFLOW_WRAPS (TREE_TYPE (arg0)))
|
||||
{
|
||||
int const1_sgn = tree_int_cst_sgn (const1);
|
||||
enum tree_code code2 = code;
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2014-10-28 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/63665
|
||||
* gcc.dg/pr63665.c: New testcase.
|
||||
|
||||
2014-10-28 Yury Gribov <y.gribov@samsung.com>
|
||||
|
||||
* c-c++-common/asan/kasan-recover-1.c: New test.
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-require-effective-target int32plus } */
|
||||
/* { dg-options "-O -fno-tree-ccp -fno-tree-fre -fno-tree-copy-prop -fwrapv" } */
|
||||
|
||||
static inline int
|
||||
test5 (int x)
|
||||
{
|
||||
int y = 0x80000000;
|
||||
return x + y;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
if (test5 (0x80000000) != 0)
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue