> 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