/* PR libstdc++/88101 */

struct S { char a; short b; char c; } s1[24], s2[24];
struct T { char a; long long b; char c; struct S d[3]; long long e; char f; } t1, t2;
struct U { char a; long long b; char c; struct S d[25]; long long e; char f; } u1, u2;

__attribute__((noipa)) void
foo (struct S *s, struct T *t, struct U *u)
{
  int i;
  t->a = -1; t->b = -1; t->c = -1; t->e = -1; t->f = -1;
  u->a = -1; u->b = -1; u->c = -1; u->e = -1; u->f = -1;
  for (i = 0; i < 24; i++)
    {
      s[i].a = -1;
      s[i].b = -1;
      s[i].c = -1;
    }
  for (i = 0; i < 3; i++)
    {
      t->d[i].a = -1;
      t->d[i].b = -1;
      t->d[i].c = -1;
    }
  for (i = 0; i < 25; i++)
    {
      u->d[i].a = -1;
      u->d[i].b = -1;
      u->d[i].c = -1;
    }
}

int
main ()
{
  __builtin_memset (&s2, -1, sizeof (s2));
  __builtin_memset (&t2, -1, sizeof (t2));
  __builtin_memset (&u2, -1, sizeof (u2));
  foo (&s1[0], &t1, &u1);
  foo (&s2[0], &t2, &u2);
  __builtin_clear_padding (&s2);
  __builtin_clear_padding (&t2);
  __builtin_clear_padding (&u2);
  if (__builtin_memcmp (&s1, &s2, sizeof (s1))
      || __builtin_memcmp (&t1, &t2, sizeof (t1))
      || __builtin_memcmp (&u1, &u2, sizeof (u1)))
    __builtin_abort ();
  return 0;
}
