1 /* PR libstdc++/88101 */
3 union V
{ char a
; signed char b
; unsigned char c
; };
4 struct T
{ char a
; int b
; union V c
; };
5 union U
{ int a
; long double b
; struct T c
; };
6 struct S
{ char a
; union U b
; long long c
; char d
; } s1
, s2
;
8 __attribute__((noipa
)) void
9 foo (struct S
*s
, int x
)
11 s
->a
= -1; s
->c
= -1; s
->d
= -1;
31 __builtin_memset (&s1
, 0, sizeof (s1
));
32 __builtin_memset (&s2
, -1, sizeof (s2
));
35 __builtin_clear_padding (&s2
);
36 if (s2
.b
.a
!= (char) -1)
38 __builtin_clear_padding (&s2
.b
.a
);
39 __builtin_memset (&s2
.b
.a
+ 1, 0, sizeof (union U
) - sizeof (s2
.b
.a
));
40 if (__builtin_memcmp (&s1
, &s2
, sizeof (s1
)))
42 __builtin_memset (&s1
, 0, sizeof (s1
));
43 __builtin_memset (&s2
, -1, sizeof (s2
));
46 __builtin_clear_padding (&s2
);
47 if (s2
.b
.b
!= -12345.25L)
49 __builtin_clear_padding (&s2
.b
.b
);
50 __builtin_memset (&s2
.b
.b
+ 1, 0, sizeof (union U
) - sizeof (s2
.b
.b
));
51 if (__builtin_memcmp (&s1
, &s2
, sizeof (s1
)))
53 __builtin_memset (&s1
, 0, sizeof (s1
));
54 __builtin_memset (&s2
, -1, sizeof (s2
));
57 __builtin_clear_padding (&s2
);
58 if (s2
.b
.c
.a
!= (char) -1 || s2
.b
.c
.b
!= -1 || s2
.b
.c
.c
.b
!= -1)
60 __builtin_clear_padding (&s2
.b
.c
);
61 __builtin_memset (&s2
.b
.c
+ 1, 0, sizeof (union U
) - sizeof (s2
.b
.c
));
62 if (__builtin_memcmp (&s1
, &s2
, sizeof (s1
)))