On Tue, Nov 3, 2015 at 3:13 PM, Martin Liška <mli...@suse.cz> wrote: > On 11/03/2015 02:46 PM, Richard Biener wrote: >> On Fri, Oct 30, 2015 at 1:53 PM, Martin Liška <mli...@suse.cz> wrote: >>> On 10/30/2015 01:13 PM, Richard Biener wrote: >>>> So I suggest to do the push/pop of cfun there. >>>> do_per_function_toporder can be made static btw. >>>> >>>> Richard. >>> >>> Right, I've done that and it works (bootstrap has been currently running), >>> feasible for HSA branch too. >>> >>> tree-pass.h: >>> >>> /* Declare for plugins. */ >>> extern void do_per_function_toporder (void (*) (function *, void *), void >>> *); >>> >>> Attaching the patch that I'm going to test. >> >> Err. >> >> + cgraph_node::get (current_function_decl)->release_body (); >> + >> + current_function_decl = NULL; >> + set_cfun (NULL); >> >> I'd have expected >> >> tree fn = cfun->decl; >> pop_cfun (); >> gcc_assert (!cfun); >> cgraph_node::get (fn)->release_body (); >> >> here. > > Yeah, that works, but we have to add following hunk: > > diff --git a/gcc/function.c b/gcc/function.c > index aaf49a4..4718fe1 100644 > --- a/gcc/function.c > +++ b/gcc/function.c > @@ -4756,6 +4756,13 @@ push_cfun (struct function *new_cfun) > void > pop_cfun (void) > { > + if (cfun_stack.is_empty ()) > + { > + set_cfun (NULL); > + current_function_decl = NULL_TREE; > + return; > + } > + > struct function *new_cfun = cfun_stack.pop (); > /* When in_dummy_function, we do have a cfun but current_function_decl is > NULL. We also allow pushing NULL cfun and subsequently changing
Why again? cfun should be set via push_cfun here so what's having cfun == NULL at the pop_cfun point? Or rather, what code used set_cfun () instead of push_cfun ()? > > If you are fine with that, looks we've fixed all issues related to the > change, right? > Updated version of the is attached. > > Martin > >> >>> Martin >>> >