Hi again, now also CCing the mailing list, On Wed, Oct 30 2019, Jan Hubicka wrote: >> Hi, >> >> On Wed, Oct 30 2019, Jan Hubicka wrote: >> > Hi, >> > this patch fixes another place we may have missing argument summary. >> > Here the situation is that the call site being inlined has no jump >> > functions while function which is being inlines has another call with >> > jump function. This can validly happen when we inline into functions >> > with indirect inlining and ipa-cp disabled but I am not 100% why it >> > happens i.e. during Firefox builds. Martin, do you have any ideas? >> >> No, not without seeing what is going on. I think we compute jump >> functions also when we are inlining and IPA-CP is disabled, by the way. >> >> It looks like ipa_compute_jump_functions_for_edge was never called on >> that edge, so if the problem appeared in a non-LTO context the following >> might help? And I assume we want it either way, so OK for trunk after a >> bootstrap&testing? > > This is OK, though I think it will only result in fewer summaries, > because aliases are definitions, but that code is obviously broken. >
I have just committed it. Looking at PR 92278, I think I found the real problem. In ipa_read_edge_info, you added code to throw away jump functions of edges that do not pass possibly_call_in_translation_unit_p() test. But that predicate incorrectly - or at least I think so, see below - returns false for edges leading to interposable symbols. The reason why I think it is incorrect is because a node which is considered interposable before merging can apparently later on be upgraded to a local one by ipa-visibility. I am testing the following fix, is it OK if it passes? The testcase passes a version script to the linker, I guess our LTO testsuite does not support that, does it? Thanks, Martin 2019-10-30 Martin Jambor <mjam...@suse.cz> ipa/92278 * cgraph.c (cgraph_edge::possibly_call_in_translation_unit_p): Fix availability comparison. --- gcc/cgraph.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/cgraph.c b/gcc/cgraph.c index d47d4128b1c..8057ccdb7c0 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -3813,7 +3813,7 @@ cgraph_edge::possibly_call_in_translation_unit_p (void) if (node->previous_sharing_asm_name) node = symtab_node::get_for_asmname (DECL_ASSEMBLER_NAME (callee->decl)); gcc_assert (TREE_PUBLIC (node->decl)); - return node->get_availability () >= AVAIL_AVAILABLE; + return node->get_availability () >= AVAIL_INTERPOSABLE; } /* A stashed copy of "symtab" for use by selftest::symbol_table_test. -- 2.23.0