2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / 20011113-1.c
bloba2eb86b6df6dcd2eca954a0598fd3cf0f13e4016
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);
6 typedef struct t
8 unsigned a : 16;
9 unsigned b : 8;
10 unsigned c : 8;
11 long d[4];
12 } *T;
14 typedef struct {
15 long r[3];
16 } U;
18 T bar (U, unsigned int);
20 T foo (T x)
22 U d, u;
24 memcpy (&u, &x->d[1], sizeof u);
25 d = u;
26 return bar (d, x->b);
29 T baz (T x)
31 U d, u;
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);
41 T bar (U d, unsigned int m)
43 if (d.r[0] != 21 || d.r[1] != 22 || d.r[2] != 23)
44 abort ();
45 return 0;
48 struct t t = { 26, 0, 0, { 0, 21, 22, 23 }};
50 int main (void)
52 baz (&t);
53 foo (&t);
54 exit (0);