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 <qing.z...@oracle.com> 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