> On Sun, Jul 24, 2011 at 7:12 PM, Eric Botcazou <ebotca...@adacore.com> wrote: > > Hi, > > > > we sometimes get messages like this in Ada: > > > > prime-mc2-other.adb: In function 'PRIME.MC2.OTHER.DO_SOMETHING': > > prime-mc2.adb:2:4: warning: inlining failed in call > > to 'PRIME.MC2.GET_INPUT_VALUE.PART': non-call exception handling mismatch > > [-Winline] > > prime-mc2-other.adb:3:4: warning: called from here [-Winline] > > > > Since this is for a pure Ada program, it's unexpected. This stems from > > virtual > > cloning: cgraph_create_virtual_clone creates the virtual clone and does: > > > > DECL_STRUCT_FUNCTION (new_decl) = NULL; > > > > so the can_throw_non_call_exceptions flag isn't preserved and > > can_inline_edge_p > > is fooled into thinking that it cannot inline. > > > > It's probably better not to fiddle with virtual cloning so the attached > > patch > > teaches can_inline_edge_p to look into DECL_STRUCT_FUNCTION of the original > > nodes if it is dealing with virtual clones. > > > > Tested on i586-suse-linux, OK for the mainline? > > Doesn't cgraph_function_or_thunk_node already deal with this? Honza?
No, the problem here is deciding whether we can inline a clone. We look into DECL_STRUCT_FUNCTION that we can't. The real fix is one commented in: /* Don't inline if the callee can throw non-call exceptions but the caller cannot. FIXME: this is obviously wrong for LTO where STRUCT_FUNCTION is missing. Move the flag into cgraph node or mirror it in the inline summary. */ I plan to look into this before next release. I would, for sure, welcome Eric beating me. If he don't have time to do so, I think the patch is OK as it is, since it improves the situation despite the fact that it won't fix the same problem with WPA. Honza > > Richard. > > > > > 2011-07-24 Eric Botcazou <ebotca...@adacore.com> > > > > * ipa-inline.c (can_inline_edge_p): Look into DECL_STRUCT_FUNCTION of > > original nodes if we are dealing with virtual clones. > > > > > > -- > > Eric Botcazou > >