/* PR middle-end/115527 */ /* { dg-do run } */ struct T { struct S { double a; signed char b; long c; } d[3]; int e; } t1, t2; __attribute__((noipa)) void foo (struct T *t) { for (int i = 0; i < 3; ++i) { t->d[i].a = 1. + 3 * i; t->d[i].b = 2 + 3 * i; t->d[i].c = 3 + 3 * i; } t->e = 10; } int main () { __builtin_memset (&t2, -1, sizeof (t2)); foo (&t1); foo (&t2); __builtin_clear_padding (&t2); if (__builtin_memcmp (&t1, &t2, sizeof (t1))) __builtin_abort (); return 0; }