PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / 20111208-1.c
blob470fca4fe901aaf740f17809c9c8557a6e7fd72d
1 /* PR tree-optimization/51315 */
2 /* Reported by Jurij Smakov <jurij@wooyd.org> */
4 typedef __SIZE_TYPE__ size_t;
6 extern void *memcpy (void *__restrict __dest,
7 __const void *__restrict __src, size_t __n)
8 __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
10 extern size_t strlen (__const char *__s)
11 __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
13 typedef __INT16_TYPE__ int16_t;
14 typedef __INT32_TYPE__ int32_t;
16 extern void abort (void);
18 int a;
20 static void __attribute__ ((noinline,noclone))
21 do_something (int item)
23 a = item;
26 int
27 pack_unpack (char *s, char *p)
29 char *send, *pend;
30 char type;
31 int integer_size;
33 send = s + strlen (s);
34 pend = p + strlen (p);
36 while (p < pend)
38 type = *p++;
40 switch (type)
42 case 's':
43 integer_size = 2;
44 goto unpack_integer;
46 case 'l':
47 integer_size = 4;
48 goto unpack_integer;
50 unpack_integer:
51 switch (integer_size)
53 case 2:
55 union
57 int16_t i;
58 char a[sizeof (int16_t)];
61 memcpy (v.a, s, sizeof (int16_t));
62 s += sizeof (int16_t);
63 do_something (v.i);
65 break;
67 case 4:
69 union
71 int32_t i;
72 char a[sizeof (int32_t)];
75 memcpy (v.a, s, sizeof (int32_t));
76 s += sizeof (int32_t);
77 do_something (v.i);
79 break;
81 break;
84 return (int) *s;
87 int
88 main (void)
90 int n = pack_unpack ("\200\001\377\376\035\300", "sl");
91 if (n != 0)
92 abort ();
93 return 0;