PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / 20170401-1.c
blob191ea6d47bae66d11e8650d78ff8c62cb20ab7fa
1 /* PR45070 */
2 extern void abort(void);
4 struct packed_ushort {
5 unsigned short ucs;
6 } __attribute__((packed));
8 struct source {
9 int pos, length;
12 static int flag;
14 static void __attribute__((noinline)) fetch(struct source *p)
16 p->length = 128;
19 static struct packed_ushort __attribute__((noinline)) next(struct source *p)
21 struct packed_ushort rv;
23 if (p->pos >= p->length) {
24 if (flag) {
25 flag = 0;
26 fetch(p);
27 return next(p);
29 flag = 1;
30 rv.ucs = 0xffff;
31 return rv;
33 rv.ucs = 0;
34 return rv;
37 int main(void)
39 struct source s;
40 int i;
42 s.pos = 0;
43 s.length = 0;
44 flag = 0;
46 for (i = 0; i < 16; i++) {
47 struct packed_ushort rv = next(&s);
48 if ((i == 0 && rv.ucs != 0xffff)
49 || (i > 0 && rv.ucs != 0))
50 abort();
52 return 0;