| typedef __SIZE_TYPE__ size_t; |
| extern void *memcpy (void *__restrict, const void *__restrict, size_t); |
| extern void abort (void); |
| extern void exit (int); |
| |
| typedef struct t |
| { |
| unsigned a : 16; |
| unsigned b : 8; |
| unsigned c : 8; |
| long d[4]; |
| } *T; |
| |
| typedef struct { |
| long r[3]; |
| } U; |
| |
| T bar (U, unsigned int); |
| |
| T foo (T x) |
| { |
| U d, u; |
| |
| memcpy (&u, &x->d[1], sizeof u); |
| d = u; |
| return bar (d, x->b); |
| } |
| |
| T baz (T x) |
| { |
| U d, u; |
| |
| d.r[0] = 0x123456789; |
| d.r[1] = 0xfedcba987; |
| d.r[2] = 0xabcdef123; |
| memcpy (&u, &x->d[1], sizeof u); |
| d = u; |
| return bar (d, x->b); |
| } |
| |
| T bar (U d, unsigned int m) |
| { |
| if (d.r[0] != 21 || d.r[1] != 22 || d.r[2] != 23) |
| abort (); |
| return 0; |
| } |
| |
| struct t t = { 26, 0, 0, { 0, 21, 22, 23 }}; |
| |
| int main (void) |
| { |
| baz (&t); |
| foo (&t); |
| exit (0); |
| } |