diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a1e3c97f76f..9ba9e7a46d0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-04-02 Richard Guenther + + PR tree-optimization/43629 + * tree-ssa-ccp.c (likely_value): Reset all_undefined_operands + if we have seen a constant value. + 2010-04-02 Joseph Myers * read-rtl.c (read_rtx_1): Give an error for EOF while looking for diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 16b901b8310..54ec0072334 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-04-02 Richard Guenther + + PR tree-optimization/43629 + * gcc.c-torture/execute/pr43629.c: New testcase. + 2010-04-01 Janne Blomqvist Dominique d'Humieres diff --git a/gcc/testsuite/gcc.c-torture/execute/pr43629.c b/gcc/testsuite/gcc.c-torture/execute/pr43629.c new file mode 100644 index 00000000000..10c0196c89b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr43629.c @@ -0,0 +1,13 @@ +int flag; +extern void abort (void); +int main() +{ + int x; + if (flag) + x = -1; + else + x &= 0xff; + if (x & ~0xff) + abort (); + return 0; +} diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index 03c35001718..fcfdd18d1bf 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -1,6 +1,6 @@ /* Conditional constant propagation pass for the GNU compiler. - Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 - Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, + 2010 Free Software Foundation, Inc. Adapted from original RTL SSA-CCP by Daniel Berlin Adapted to GIMPLE trees by Diego Novillo @@ -558,6 +558,9 @@ likely_value (gimple stmt) has_constant_operand = true; } + if (has_constant_operand) + all_undefined_operands = false; + /* If the operation combines operands like COMPLEX_EXPR make sure to not mark the result UNDEFINED if only one part of the result is undefined. */