Hi, Honza,
I have one question relate to whether to disable nothrow for -flive-patching as
following:
actually, there are two passes here:
1. local nothrow pass: in this pass, nothrow attribute is set locally after
analyzing every stmt of the function
body:
unsigned int
pass_nothrow::execute (function *)
{
struct cgraph_node *node;
basic_block this_block;
…
}
2. nothrow propagation pass: (it’s included in the ipa_pure_const pass as
following, propagate the nothrow
attribute along callcgraph)
unsigned int
pass_ipa_pure_const::
execute (function *)
{
bool remove_p;
/* Nothrow makes more function to not lead to return and improve
later analysis. */
propagate_nothrow ();
propagate_malloc ();
remove_p = propagate_pure_const ();
delete funct_state_summaries;
return remove_p ? TODO_remove_functions : 0;
}
the nothrow propagation pass is included in ipa_pure_const pass, and is guarded
by flag_ipa_pure_const,
this flag_ipa_pure_const is disabled when -flive-patching is ON.
So, my question is:
shall we disable local nothrow pass as well when -flive-patching is ON?
my understanding is: we should.
the reason is: the local nothrow pass is setting the nothrow attribute for
the current routine based on its
body, and this “nothrow” attribute will be used when generating EH code
around callsite from the caller
of the routine. so the nothrow attribute might impact other routines than the
current routine. as a result,
we should disable this pass?
what’s your opinion on this?
thanks.
Qing
> On Nov 28, 2018, at 2:24 PM, Qing Zhao <[email protected]> wrote:
>>
>> Shall we also disable nothrow or we will worry about C++ only ter?
>
> This is also mainly for C++ applications, so currently should not be a
> problem.
> But I can add a separate simple patch to add another flag to control nothrow
> propagation and disable it when -flive-patching is ON.
>
>>
>> Patch is OK,
>
> thanks for the review.
>
> I will commit the patch very soon.
>
> Qing
>> thanks!
>> Honza