https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93369
--- Comment #17 from Jan Hubicka <hubicka at gcc dot gnu.org> --- Note that to fully fix the problem we need to resolve the way aliases works. In this case ODR violation makes one COMDAT section to contain only ctor, while other contains ctor and its thunk. The first COMDAT wins which makes the thunk to call alias of a symbol prevailed by different COMDAT. This still work w/o LTO and to immitate what happens in linker correctly we need ability to load both constructors https://gcc.gnu.org/pipermail/gcc-patches/2020-March/542733.html For invalid code like this that does not matter much, but the patch has also a valid testcase. I can also however patch around and silence the verifier ICE, but it would be just symptomatic workaround