> I only updated
> - /* 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. */ - else if (callee_fun &&
> callee_fun->can_throw_non_call_exceptions - && !(caller_fun &&
> caller_fun->can_throw_non_call_exceptions)) - {
> - e->inline_failed = CIF_NON_CALL_EXCEPTIONS;
> - inlinable = false;
> - }
> to actually work with LTO where callee_fun/caller_fun is not always
> available (but sometimes, like when ICF requested the body or when we
> merged profiles, it is).
No, that's not true. Let's consider an Ada caller and a C callee. With the
old code (mine as you remarked): caller_fun->can_throw_non_call_exceptions is
true and callee_fun->can_throw_non_call_exceptions is false, so the above test
is false and we can inline. With the new code (yours): check_match is true
and opt_for_fn (callee->decl, flag_non_call_exceptions) is false, so we cannot
inline.
--
Eric Botcazou