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:
Richard Biener 2014-10-28 11:42:43 +00:00 committed by Richard Biener
parent e29dfbf07d
commit 9ccaac1188
4 changed files with 31 additions and 1 deletions

View File

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

View File

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

View File

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

View File

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