aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-6.c
blob: db1f00eca737ff6df9af460af6a50bd602c1235b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/* 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;
}