(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
torture/
builtin-clear-padding-5.c
       1  /* PR libstdc++/88101 */
       2  
       3  struct S { char a; short b; char c; } s1[24], s2[24];
       4  struct T { char a; long long b; char c; struct S d[3]; long long e; char f; } t1, t2;
       5  struct U { char a; long long b; char c; struct S d[25]; long long e; char f; } u1, u2;
       6  
       7  __attribute__((noipa)) void
       8  foo (struct S *s, struct T *t, struct U *u)
       9  {
      10    int i;
      11    t->a = -1; t->b = -1; t->c = -1; t->e = -1; t->f = -1;
      12    u->a = -1; u->b = -1; u->c = -1; u->e = -1; u->f = -1;
      13    for (i = 0; i < 24; i++)
      14      {
      15        s[i].a = -1;
      16        s[i].b = -1;
      17        s[i].c = -1;
      18      }
      19    for (i = 0; i < 3; i++)
      20      {
      21        t->d[i].a = -1;
      22        t->d[i].b = -1;
      23        t->d[i].c = -1;
      24      }
      25    for (i = 0; i < 25; i++)
      26      {
      27        u->d[i].a = -1;
      28        u->d[i].b = -1;
      29        u->d[i].c = -1;
      30      }
      31  }
      32  
      33  int
      34  main ()
      35  {
      36    __builtin_memset (&s2, -1, sizeof (s2));
      37    __builtin_memset (&t2, -1, sizeof (t2));
      38    __builtin_memset (&u2, -1, sizeof (u2));
      39    foo (&s1[0], &t1, &u1);
      40    foo (&s2[0], &t2, &u2);
      41    __builtin_clear_padding (&s2);
      42    __builtin_clear_padding (&t2);
      43    __builtin_clear_padding (&u2);
      44    if (__builtin_memcmp (&s1, &s2, sizeof (s1))
      45        || __builtin_memcmp (&t1, &t2, sizeof (t1))
      46        || __builtin_memcmp (&u1, &u2, sizeof (u1)))
      47      __builtin_abort ();
      48    return 0;
      49  }