> Hi,
> 
> PR 94856 is a call graph verifier error.  We have a method which (in
> the course of IPA-CP) loses its this pointer because it is unused and
> the pass then does not clone all the this adjusting thunks and just
> makes the calls go straight to the new clone - and then the verifier
> complains that the edge does not seem to point to a clone of what it
> used to.  This looked weird because the verifier actually has logic
> detecting this case but it turns out that it is confused by inliner
> body-saving mechanism which invents a new decl for the base function.
> 
> Making the inlining body-saving mechanism to correctly set
> former_clone_of allows us to detect this case too.  Then we pass this
> particular round of verification but the subsequent one fails because
> we have inlined the function into its former thunk - which
> subsequently does not have any callees, but the verifier still access
> them and segfaults.  Therefore the patch also adds a test whether the
> a former hunk even has any call.
> 
> Passed bootstrap and testsuite on x86-64-linux, LTO bootstrap underway.
> OK for trunk (in time for GCC 10) if it passes it too?
> 
> Thanks,
> 
> Martin
> 
> 
> 2020-04-30  Martin Jambor  <mjam...@suse.cz>
> 
>       PR ipa/94856
>       * cgraph.c (clone_of_p): Also consider thunks whih had their bodies
>       saved by the inliner and thunks which had their call inlined.
>       * ipa-inline-transform.c (save_inline_function_body): Fill in
>       former_clone_of of new body holders.
> 
>       PR ipa/94856
>       * g++.dg/ipa/pr94856.C: New test.
OK,
thanks!

Honza

Reply via email to