https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96059
--- Comment #4 from Martin Jambor <jamborm at gcc dot gnu.org> --- ...and Honza correctly guessed that it is ICF that merges the two functions (virtual and non-virtual) and that is how we ended up in the situation that the devirtualizing machinery returns a non-virtual function cgraph_node.