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

Reply via email to