diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7351294329b..8c463683805 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2010-11-04 Jakub Jelinek + PR tree-optimization/46233 + * ipa-pure-const.c (local_pure_const): Do noreturn discovery + after calling analyze_function, not before. + PR target/46234 * config/rs6000/rs6000.c (rs6000_va_start): Use build_simple_mem_ref instead of build_va_arg_indirect_ref. diff --git a/gcc/ipa-pure-const.c b/gcc/ipa-pure-const.c index d671643116e..c122435391f 100644 --- a/gcc/ipa-pure-const.c +++ b/gcc/ipa-pure-const.c @@ -1571,7 +1571,9 @@ local_pure_const (void) && skip) return 0; - /* First do NORETURN discovery. */ + l = analyze_function (node, false); + + /* Do NORETURN discovery. */ if (!skip && !TREE_THIS_VOLATILE (current_function_decl) && EDGE_COUNT (EXIT_BLOCK_PTR->preds) == 0) { @@ -1587,7 +1589,6 @@ local_pure_const (void) changed = true; } - l = analyze_function (node, false); switch (l->pure_const_state) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ddff9cf6ec5..90c2ed22046 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-11-04 Jakub Jelinek + + PR tree-optimization/46233 + * gcc.dg/pr46233.c: New test. + 2010-11-04 Iain Sandoe * objc.dg/property/property-2.m: Deleted. diff --git a/gcc/testsuite/gcc.dg/pr46233.c b/gcc/testsuite/gcc.dg/pr46233.c new file mode 100644 index 00000000000..8916e4bdd37 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr46233.c @@ -0,0 +1,11 @@ +/* PR tree-optimization/46233 */ +/* { dg-do compile } */ +/* { dg-options "-O -fno-tree-dce" } */ + +int +foo () +{ + int i = 0; + while (1) + i += foo (); +}