struct A { int a; char b[]; }; union B { struct A a; char b[sizeof (struct A) + 31]; }; union B b = { { 1, "123456789012345678901234567890" } }; union B c = { { 2, "123456789012345678901234567890" } }; __attribute__((noinline, noclone)) void foo (int *x[2]) { x[0] = &b.a.a; x[1] = &c.a.a; } int main () { int *x[2]; foo (x); if (*x[0] != 1 || *x[1] != 2) __builtin_abort (); return 0; }