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;
...