https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105469
--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> --- The original testcase has void lock() override = 0; void unlock() override = 0; void lock() final override void unlock() final override and a few more override. The reduced one has nothing like that (but maybe it's misreduced). Removing 'final' doesn't avoid the issue though. It might be this is a bad interaction of speculative devirt and inlining, -fno-devirtualize-speculatively is enough to prevent the bug.