optimize.c (optimize_function): Push/pop ggc context around the call to optimize_inline_calls.

* optimize.c (optimize_function): Push/pop ggc context around
        the call to optimize_inline_calls.

From-SVN: r71034
This commit is contained in:
Richard Henderson 2003-09-03 14:38:26 -07:00 committed by Richard Henderson
parent 7dff32e660
commit 19a42e516f
2 changed files with 28 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2003-09-03 Richard Henderson <rth@redhat.com>
* optimize.c (optimize_function): Push/pop ggc context around
the call to optimize_inline_calls.
2003-09-02 Scott Brumbaugh <scottb.lists@verizon.net>
PR c++/11553

View File

@ -56,7 +56,30 @@ optimize_function (tree fn)
and (d) TARGET_ASM_OUTPUT_MI_THUNK is there to DTRT anyway. */
&& !DECL_THUNK_P (fn))
{
/* ??? Work around GC problem. Call stack is
-> instantiate_decl
-> expand_or_defer_fn
-> maybe_clone_body
-> expand_body
-> tree_rest_of_compilation
which of course collects. This used to be protected by the
"regular" nested call ggc_push_context that now lives in
tree_rest_of_compilation.
Two good fixes:
(1) Do inlining in tree_rest_of_compilation. This is good
in that this common optimization happens in common code.
(2) Don't nest compilation of functions. Instead queue the
new function to cgraph, and let it get picked up in the
next round of "emit everything that needs emitting".
For the nonce, just protect things here. */
ggc_push_context ();
optimize_inline_calls (fn);
ggc_pop_context ();
dump_function (TDI_inlined, fn);
}