https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89336
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The ICE actually isn't when processing the loop, but later on when processing the VIEW_CONVERT_EXPR<struct A>({.a={0, 1, 2, 3, 4, 5, [8]=1, 2, 3, 4, 5, }}); expression. When using { r[i] = i; r[i + 8] = i; } as the loop body, I instead get: {.a={0, 1, 2, 3, 4, 5, [8]=0, 1, 2, 3, 4, 5}} In the bogus one, [8] doesn't have the value 0 but 1 and all the values are shifted by 1, with [13] having NULL value, just non-NULL purpose.