https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116416
--- Comment #12 from Jakub Jelinek <jakub at gcc dot gnu.org> --- struct S { int a; }; struct T { struct S b; int c; struct S d; }; struct U { struct T e; int f; struct T g; }; void f0 (struct U *); void f1 (void) { struct U u = { { {}, 1, {} }, 2, { {}, 3, {} } }; f0 (&u); } void f2 (void) { struct U u = { { { 1 }, 2, { 3 } }, 4, { { 5 }, 6, {} } }; f0 (&u); } void f3 (void) { struct U u = { { { }, 2, { } }, 4, { { 5 }, 6, { 7 } } }; f0 (&u); } is a C23 testcase showing what it can do, for f1 there is no difference, for f2 - u = {}; u.e.b.a = 1; u.e.c = 2; u.e.d.a = 3; u.f = 4; u.g.b.a = 5; u.g.c = 6; + u.g.d = {}; f0 (&u); and for f3: - u = {}; + u.e = {}; u.e.c = 2; u.f = 4; u.g.b.a = 5; ...