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
>>>
>

Reply via email to