https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61190
--- Comment #2 from Bernd Edlinger <bernd.edlinger at hotmail dot de> --- Created attachment 32883 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=32883&action=edit possible fix Well, the problem seems to be, that the thunk code is not emitted in the normal way using gimple code, but instead by the i386 back-end with a callback. This makes the thunk invisible to the ipa-pure-const pass, which assumes that all values just flow straight thu the thunk. See ipa-pure-const.c (analyze_function): if (fn->thunk.thunk_p || fn->alias) { /* Thunk gets propagated through, so nothing interesting happens. */ gcc_assert (ipa); return l; } But this is not true for a virtual base class: The thunk itself references the vtable, so if nothing else might need the vtable, the optimizer may remove the initalization of the vtable, which happened in this example. The most simple work around would be the attached patch, which simply falls back to emitting gimple code, if virtual base classes are used.