]> gcc.gnu.org Git - gcc.git/commit
ipa: Release body of clone_of when removing its last clone (PR 100413)
authorMartin Jambor <mjambor@suse.cz>
Fri, 29 Apr 2022 15:38:15 +0000 (17:38 +0200)
committerMartin Jambor <mjambor@suse.cz>
Fri, 29 Apr 2022 15:38:41 +0000 (17:38 +0200)
commit27ee75dbe81bb781214c66a9e6a759c08b7deb60
treebe7d8a6d76b1bc5e8ae8a1e910d1e8b77d548b42
parent210cda732832ec589b02c722b2c73f7fa50b97ce
ipa: Release body of clone_of when removing its last clone (PR 100413)

In the PR, the verifier complains that we did not manage to remove the
body of a node and it is right.  The node is kept for materialization
of two clones but after one is materialized, the other one is removed
as unneeded (as a part of delete_unreachable_blocks_update_callgraph).
The problem is that the node removal does not check for this situation
and can leave the clone_of node there with a body attached to it even
though there is no use for it any more.  This patch does checks for it
and handles the situation in a simlar way that
cgraph_node::materialize_clone does it, except that it also has to be
careful that the removed node itself does not have any clones, which
would still need the clone_of's body.  Failing to do that results in a
bootstrap failure.

gcc/ChangeLog:

2022-04-27  Martin Jambor  <mjambor@suse.cz>

PR ipa/100413
* cgraph.cc (cgraph_node::remove): Release body of the node this
is clone_of if appropriate.

gcc/testsuite/ChangeLog:

2022-04-27  Martin Jambor  <mjambor@suse.cz>

PR ipa/100413
* g++.dg/ipa/pr100413.C: New test.
gcc/cgraph.cc
gcc/testsuite/g++.dg/ipa/pr100413.C [new file with mode: 0644]
This page took 0.056751 seconds and 5 git commands to generate.