OSDN Git Service

PR target/40668
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.c-torture / execute / 20011113-1.c
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
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
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
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
50 int main (void)
51 {
52   baz (&t);
53   foo (&t);
54   exit (0);
55 }