1 typedef __SIZE_TYPE__ size_t;
2 extern void *memcpy (void *__restrict, const void *__restrict, size_t);
3 extern void abort (void);
4 extern void exit (int);
5 
6 typedef struct t
7 {
8   unsigned a : 16;
9   unsigned b : 8;
10   unsigned c : 8;
11   long d[4];
12 } *T;
13 
14 typedef struct {
15   long r[3];
16 } U;
17 
18 T bar (U, unsigned int);
19 
foo(T x)20 T foo (T x)
21 {
22   U d, u;
23 
24   memcpy (&u, &x->d[1], sizeof u);
25   d = u;
26   return bar (d, x->b);
27 }
28 
baz(T x)29 T baz (T x)
30 {
31   U d, u;
32 
33   d.r[0] = 0x123456789;
34   d.r[1] = 0xfedcba987;
35   d.r[2] = 0xabcdef123;
36   memcpy (&u, &x->d[1], sizeof u);
37   d = u;
38   return bar (d, x->b);
39 }
40 
bar(U d,unsigned int m)41 T bar (U d, unsigned int m)
42 {
43   if (d.r[0] != 21 || d.r[1] != 22 || d.r[2] != 23)
44     abort ();
45   return 0;
46 }
47 
48 struct t t = { 26, 0, 0, { 0, 21, 22, 23 }};
49 
main(void)50 int main (void)
51 {
52   baz (&t);
53   foo (&t);
54   exit (0);
55 }
56