diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c4189f893e6..32fb7e8d364 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-06-16 Jan Hubicka + + * cgraph.c (cgraph_add_new_function): When in expansion state, do + lowering. + 2008-06-16 Jan Hubicka * tree-outof-ssa.c (pass_out_of_ssa): Do not depend on PROP_alias. diff --git a/gcc/cgraph.c b/gcc/cgraph.c index e6910b5d27b..df214d1dba5 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -1052,6 +1052,21 @@ cgraph_add_new_function (tree fndecl, bool lowered) node->local.local = false; node->local.finalized = true; node->reachable = node->needed = true; + if (!lowered && cgraph_state == CGRAPH_STATE_EXPANSION) + { + push_cfun (DECL_STRUCT_FUNCTION (fndecl)); + current_function_decl = fndecl; + tree_register_cfg_hooks (); + tree_lowering_passes (fndecl); + bitmap_obstack_initialize (NULL); + if (!gimple_in_ssa_p (DECL_STRUCT_FUNCTION (fndecl))) + execute_pass_list (pass_early_local_passes.pass.sub); + bitmap_obstack_release (NULL); + pop_cfun (); + current_function_decl = NULL; + + lowered = true; + } if (lowered) node->lowered = true; node->next_needed = cgraph_new_nodes; diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index bd2c0dec2fe..636ee6aa9d6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2008-06-16 Jan Hubicka + + * method.c: Include cgraph.h. + (use_thunk): Use cgraph_add_new_function instead of calling backend + directly. + 2008-06-15 Ralf Wildenhues * parser.c: Fix comment typo. diff --git a/gcc/cp/method.c b/gcc/cp/method.c index 45358b2c5f4..bd63d0cba52 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -38,6 +38,7 @@ along with GCC; see the file COPYING3. If not see #include "target.h" #include "tree-pass.h" #include "diagnostic.h" +#include "cgraph.h" /* Various flags to control the mangling process. */ @@ -523,8 +524,7 @@ use_thunk (tree thunk_fndecl, bool emit_p) pop_deferring_access_checks (); thunk_fndecl = finish_function (0); - tree_lowering_passes (thunk_fndecl); - tree_rest_of_compilation (thunk_fndecl); + cgraph_add_new_function (thunk_fndecl, false); } pop_from_top_level ();