https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70393
--- Comment #6 from Nathan Sidwell <nathan at gcc dot gnu.org> --- Indeed, manually editing the assembly to such an initializer results in a working program. The CONSTRUCTOR created for ab's DECL_INITIAL has the correct things in it, but in declaration order. I.e. it looks like: IDX=field-for-A-base VAL=CONSTRUCTOR (...) IDX=field-for-B-base VAL=CONSTRUCTOR (...) I think CONSTRUCTOR_ELTs are expected to be in ascending placement order?