1 /* PR rtl-optimization/49390 */
3 struct S
{ unsigned int s1
; unsigned int s2
; };
4 struct T
{ unsigned int t1
; struct S t2
; };
5 struct U
{ unsigned short u1
; unsigned short u2
; };
6 struct V
{ struct U v1
; struct T v2
; };
9 union { char b
[64]; struct V v
; } u
;
11 extern void abort (void);
13 __attribute__((noinline
, noclone
)) void
14 foo (int x
, void *y
, unsigned int z
, unsigned int w
)
16 if (x
!= 4 || y
!= (void *) &u
.v
.v2
)
22 __attribute__((noinline
, noclone
)) void
29 __attribute__((noinline
, noclone
)) int
38 __attribute__((noinline
, noclone
)) void
48 if (c
->s2
% 8192 <= 15 || (8192 - c
->s2
% 8192) <= 31)
49 foo (1, 0, c
->s1
, c
->s2
);
53 g
= (((struct U
*) b
)->u2
& 2) ? 32 : __builtin_offsetof (struct V
, v2
);
62 foo (2, 0, c
->s1
, c
->s2
);
65 if ((((struct U
*) b
)->u2
& 1) && f
== g
)
68 foo (3, 0, c
->s1
, c
->s2
);
71 d
= (struct T
*) (b
+ c
->s2
% 8192);
72 if (d
->t2
.s1
>= c
->s1
&& (d
->t2
.s1
!= c
->s1
|| d
->t2
.s2
>= c
->s2
))
73 foo (4, d
, c
->s1
, c
->s2
);
81 asm ("" : "+r" (c
) : "r" (&a
));