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