diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f3a30d97222..ead7b5a701c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-09-06 Jan Hubicka + + PR tree-optimization/14703 + * tree-ssa-live.c (remove_unused_scope_block_p): Remove ignored declarations. + * passes.c (init_optimization_passes): Recompute inline parameters. + 2008-09-06 Richard Sandiford * config/mips/mips.c (mips_function_ok_for_sibcall): Check for diff --git a/gcc/passes.c b/gcc/passes.c index 36c107e852a..69d484b0226 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -565,6 +565,7 @@ init_optimization_passes (void) } NEXT_PASS (pass_release_ssa_names); NEXT_PASS (pass_rebuild_cgraph_edges); + NEXT_PASS (pass_inline_parameters); } NEXT_PASS (pass_ipa_increase_alignment); NEXT_PASS (pass_ipa_matrix_reorg); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index aaeb46c1464..3185f30b73b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2008-09-06 Jan Hubicka + + * g++.dg/tree-ssa-pr14703.C: New testcase. + 2008-09-06 Tobias Burnus PR fortran/36153 diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr14703.C b/gcc/testsuite/g++.dg/tree-ssa/pr14703.C new file mode 100644 index 00000000000..58705277ec5 --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr14703.C @@ -0,0 +1,49 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized -fno-ipa-reference" } */ +#include + +namespace { +template class fib { + public: + static const unsigned long long value = fib::value + fib::value; +}; + +template <> class fib<0> { + public: + static const unsigned long long value = 1; +}; + +template <> class fib<1> { + public: + static const unsigned long long value = 1; +}; + +template inline unsigned long long fibconst() +{ + return fibconst() + fibconst(); +} + +template <> inline unsigned long long fibconst<0>() +{ + return 1ull; +} + +template <> inline unsigned long long fibconst<1>() +{ + return 1ull; +} + +template <> inline unsigned long long fibconst<2>() +{ + return 2ull; +} + +} + +int main() +{ + ::std::cerr << "fib<90>::value == " << fib<90>::value << "\n"; + ::std::cerr << "fibcst<90>() == " << fibconst<90>() << "\n"; +} +// { dg-final { scan-tree-dump-not "fibconst" "optimized" } } +// { dg-final { cleanup-tree-dump "optimized" } } diff --git a/gcc/tree-ssa-live.c b/gcc/tree-ssa-live.c index fa3834d21c5..859c0c7427d 100644 --- a/gcc/tree-ssa-live.c +++ b/gcc/tree-ssa-live.c @@ -489,6 +489,13 @@ remove_unused_scope_block_p (tree scope) if (TREE_CODE (*t) == FUNCTION_DECL) unused = false; + /* Remove everything we don't generate debug info for. */ + else if (DECL_IGNORED_P (*t)) + { + *t = TREE_CHAIN (*t); + next = t; + } + /* When we are outputting debug info, we usually want to output info about optimized-out variables in the scope blocks. Exception are the scope blocks not containing any instructions