https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94730
--- Comment #3 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- I'd suspect the code in finish_decl that deals with types determined from array initializers ("For global variables, update the copy of the type that exists in the binding.") of being involved here. if (b_ext->u.type && comptypes (b_ext->u.type, type)) b_ext->u.type = composite_type (b_ext->u.type, type); else b_ext->u.type = type; If the new type isn't compatible with the existing type of the declaration, it should probably not be stored in b_ext->u.type.