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.

Reply via email to