re PR tree-optimization/48022 (-Wstrict-overflow warning on code that doesn't have overflows)

PR tree-optimization/48022
	* fold-const.c (fold_comparison): Don't call fold_overflow_warning
	for EQ/NE_EXPR.

	* gcc.dg/pr48022-1.c: New test.
	* gcc.dg/pr48022-2.c: New test.

From-SVN: r170772
This commit is contained in:
Jakub Jelinek 2011-03-08 11:43:10 +01:00 committed by Jakub Jelinek
parent 93dd46fb79
commit 32bd240907
5 changed files with 43 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2011-03-08 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/48022
* fold-const.c (fold_comparison): Don't call fold_overflow_warning
for EQ/NE_EXPR.
2011-03-07 Jakub Jelinek <jakub@redhat.com>
PR debug/47991

View File

@ -1,6 +1,6 @@
/* Fold a constant sub-tree into a single node for C-compiler
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
This file is part of GCC.
@ -8572,10 +8572,11 @@ fold_comparison (location_t loc, enum tree_code code, tree type,
&& (TREE_CODE (lhs) != INTEGER_CST
|| !TREE_OVERFLOW (lhs)))
{
fold_overflow_warning ("assuming signed overflow does not occur "
"when changing X +- C1 cmp C2 to "
"X cmp C1 +- C2",
WARN_STRICT_OVERFLOW_COMPARISON);
if (code != EQ_EXPR && code != NE_EXPR)
fold_overflow_warning ("assuming signed overflow does not occur "
"when changing X +- C1 cmp C2 to "
"X cmp C1 +- C2",
WARN_STRICT_OVERFLOW_COMPARISON);
return fold_build2_loc (loc, code, type, variable, lhs);
}
}

View File

@ -1,3 +1,9 @@
2011-03-08 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/48022
* gcc.dg/pr48022-1.c: New test.
* gcc.dg/pr48022-2.c: New test.
2011-03-07 Jason Merrill <jason@redhat.com>
* g++.dg/template/nontype20.C: New.

View File

@ -0,0 +1,14 @@
/* PR tree-optimization/48022 */
/* { dg-do compile } */
/* { dg-options "-O2 -Wstrict-overflow" } */
int
foo (const char *x)
{
unsigned long l = 1;
const unsigned char *s = (const unsigned char *) (const char *) (x);
int r = s[0] - ((const unsigned char *) (const char *) ("/"))[0];
if (l > 0 && r == 0)
r = (s[1] - ((const unsigned char *) (const char *) ("/"))[1]);
return r;
}

View File

@ -0,0 +1,11 @@
/* PR tree-optimization/48022 */
/* { dg-do compile } */
/* { dg-options "-O2 -Wstrict-overflow" } */
#include <string.h>
int
foo (const char *x)
{
return strcmp (x, "/");
}