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