http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48132
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-03-15 13:19:09 UTC --- Regressed (expectedly) with http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=166167 The problem seems to be that the middle-end relies on indexes being filled in in ctors for arrays, but the C++ FE in this case doesn't fill them in. For POD arrays the indexes are added by process_init_constructor_array, but that isn't called in this case (both because check_initializer will do: /* Don't call digest_init; it's unnecessary and will complain about aggregate initialization of non-aggregate classes. */ flags |= LOOKUP_ALREADY_DIGESTED; and also because it is called only for: if (BRACE_ENCLOSED_INITIALIZER_P (init) && !TYPE_NON_AGGREGATE_CLASS (type)) return process_init_constructor (type, init);