/* 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.
&& (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);
}
}
+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.
--- /dev/null
+/* 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;
+}