https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117197
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
struct b {
__attribute__((vector_size(4))) int a;
};
int c;
void d() { struct b e = {0, 1, 2, 3}; }
shows
t.c: In function ‘d’:
t.c:5:29: warning: excess elements in struct initializer
5 | void d() { struct b e = {0, 1, 2, 3}; }
| ^
t.c:5:29: note: (near initialization for ‘e’)
t.c:5:32: warning: excess elements in struct initializer
5 | void d() { struct b e = {0, 1, 2, 3}; }
| ^
t.c:5:32: note: (near initialization for ‘e’)
t.c:5:35: warning: excess elements in struct initializer
5 | void d() { struct b e = {0, 1, 2, 3}; }
| ^
t.c:5:35: note: (near initialization for ‘e’)
and
struct b e = {.a={ 0 }};
and no ICE. clang diagnoses the original testcase with
t.c:5:34: warning: initializer overrides prior initialization of this subobject
[-Winitializer-overrides]
5 | void d() { struct b e = {c, .a = 2}; }
| ^
t.c:5:26: note: previous initialization is here
5 | void d() { struct b e = {c, .a = 2}; }
| ^