https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118077
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Ted Rodgers from comment #1) For this, the exact situtation here is that einline inlines b::d into e::f and changes the virtual call into a direct call of b::c because e is final and it knows this can only be calling b::c here. And then EVRP comes along and changes call to b::c to 0 because its return value is always known to 0. And that bb becomes empty. EXCEPT it has 2 successor edges still, one for the abnormal edge (which is broken) and the normal edge. And this causes the crash. einline should have removed the abnormal edge as b::c is known to be const (which means it is also leaf) and can't call back into e::f nor could call longjmp.