2004-02-26 Alan Modra PR rtl-optimization/14279 * gcse.c (delete_null_pointer_checks_1): Do not delete CC setter unless HAVE_cc0. 2004-12-22 Jakub Jelinek * gcc.c-torture/execute/20041222-1.c: New test. --- gcc/gcse.c.jj 2003-03-10 17:42:09.000000000 +0100 +++ gcc/gcse.c 2004-12-22 12:03:32.272762070 +0100 @@ -5428,8 +5428,10 @@ delete_null_pointer_checks_1 (block_reg, } delete_insn (last_insn); +#ifdef HAVE_cc0 if (compare_and_branch == 2) delete_insn (earliest); +#endif purge_dead_edges (BASIC_BLOCK (bb)); /* Don't check this block again. (Note that BLOCK_END is --- gcc/testsuite/gcc.c-torture/execute/20041222-1.c.jj 2004-12-22 12:07:50.446611220 +0100 +++ gcc/testsuite/gcc.c-torture/execute/20041222-1.c 2004-12-22 11:34:45.000000000 +0100 @@ -0,0 +1,41 @@ +extern void abort (void); +extern void exit (int); + +struct S +{ + void *a; + unsigned int b; +}; + +void +__attribute__((noinline)) +bar (struct S *x) +{ + if (x->b != 2) + abort (); +} + +void +__attribute__((noinline)) +foo (struct S *x) +{ + if (! x->a) + { + struct S *y, *z; + y = x; + if (y) + ++y->b; + z = x; + if (z) + ++z->b; + bar (x); + } +} + +int +main (void) +{ + struct S s = { 0, 0 }; + foo (&s); + exit (0); +}