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

Reply via email to