PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / pr43385.c
blobeeb9096a8e597f6cdd0ee894af98ae13fd3b1822
1 /* PR c/43385 */
3 extern void abort (void);
5 int e;
7 __attribute__((noinline)) void
8 foo (int x, int y)
10 if (__builtin_expect (x, 0) && y != 0)
11 e++;
14 __attribute__((noinline)) int
15 bar (int x, int y)
17 if (__builtin_expect (x, 0) && y != 0)
18 return 1;
19 else
20 return 0;
23 int
24 main (void)
26 int z = 0;
27 asm ("" : "+r" (z));
28 foo (z + 2, z + 1);
29 if (e != 1)
30 abort ();
31 foo (z + 2, z);
32 if (e != 1)
33 abort ();
34 foo (z + 1, z + 1);
35 if (e != 2)
36 abort ();
37 foo (z + 1, z);
38 if (e != 2)
39 abort ();
40 foo (z, z + 1);
41 if (e != 2)
42 abort ();
43 foo (z, z);
44 if (e != 2)
45 abort ();
46 if (bar (z + 2, z + 1) != 1)
47 abort ();
48 if (bar (z + 2, z) != 0)
49 abort ();
50 if (bar (z + 1, z + 1) != 1)
51 abort ();
52 if (bar (z + 1, z) != 0)
53 abort ();
54 if (bar (z, z + 1) != 0)
55 abort ();
56 if (bar (z, z) != 0)
57 abort ();
58 return 0;