From 32bd240907e86af72aac473508bd36349dcfd183 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 8 Mar 2011 11:43:10 +0100 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/fold-const.c | 11 ++++++----- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.dg/pr48022-1.c | 14 ++++++++++++++ gcc/testsuite/gcc.dg/pr48022-2.c | 11 +++++++++++ 5 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr48022-1.c create mode 100644 gcc/testsuite/gcc.dg/pr48022-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8b1b64fc47e..ece9ec1638e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-03-08 Jakub Jelinek + + PR tree-optimization/48022 + * fold-const.c (fold_comparison): Don't call fold_overflow_warning + for EQ/NE_EXPR. + 2011-03-07 Jakub Jelinek PR debug/47991 diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 07b59d89a32..957049c0a46 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -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); } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bdf3ccac070..7c8aad31abd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2011-03-08 Jakub Jelinek + + PR tree-optimization/48022 + * gcc.dg/pr48022-1.c: New test. + * gcc.dg/pr48022-2.c: New test. + 2011-03-07 Jason Merrill * g++.dg/template/nontype20.C: New. diff --git a/gcc/testsuite/gcc.dg/pr48022-1.c b/gcc/testsuite/gcc.dg/pr48022-1.c new file mode 100644 index 00000000000..14eb550307c --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48022-1.c @@ -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; +} diff --git a/gcc/testsuite/gcc.dg/pr48022-2.c b/gcc/testsuite/gcc.dg/pr48022-2.c new file mode 100644 index 00000000000..41fcb533819 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48022-2.c @@ -0,0 +1,11 @@ +/* PR tree-optimization/48022 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -Wstrict-overflow" } */ + +#include + +int +foo (const char *x) +{ + return strcmp (x, "/"); +} -- 2.30.2