On Mon, Mar 7, 2011 at 8:15 PM, Jakub Jelinek <ja...@redhat.com> wrote: > Hi! > > EQ/NE comparisons don't really assume that overflow doesn't happen unlike >>/>=/etc., so it is strange that we warn about it. > As the warning happens on simple strcmp uses when using glibc string.h, > it is extra annoying. > > Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for > trunk?
Ok. Thanks, Richard. > 2011-03-07 Jakub Jelinek <ja...@redhat.com> > > 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. > > --- gcc/fold-const.c.jj 2011-03-03 09:11:43.000000000 +0100 > +++ gcc/fold-const.c 2011-03-07 17:44:02.000000000 +0100 > @@ -8572,10 +8572,11 @@ fold_comparison (location_t loc, enum tr > && (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); > } > } > --- gcc/testsuite/gcc.dg/pr48022-1.c.jj 2011-03-07 17:46:55.000000000 +0100 > +++ gcc/testsuite/gcc.dg/pr48022-1.c 2011-03-07 17:47:18.000000000 +0100 > @@ -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; > +} > --- gcc/testsuite/gcc.dg/pr48022-2.c.jj 2011-03-07 17:47:26.000000000 +0100 > +++ gcc/testsuite/gcc.dg/pr48022-2.c 2011-03-07 17:47:45.000000000 +0100 > @@ -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, "/"); > +} > > Jakub >