1 /* PR c/43385 */
2 
3 extern void abort (void);
4 
5 int e;
6 
7 __attribute__((noinline)) void
foo(int x,int y)8 foo (int x, int y)
9 {
10   if (__builtin_expect (x, 0) && y != 0)
11     e++;
12 }
13 
14 __attribute__((noinline)) int
bar(int x,int y)15 bar (int x, int y)
16 {
17   if (__builtin_expect (x, 0) && y != 0)
18     return 1;
19   else
20     return 0;
21 }
22 
23 int
main(void)24 main (void)
25 {
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;
59 }
60