modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/pr43385.c (about)

     1  /* PR c/43385 */
     2  
     3  extern void abort (void);
     4  
     5  int e;
     6  
     7  __attribute__((noinline)) void
     8  foo (int x, int y)
     9  {
    10    if (__builtin_expect (x, 0) && y != 0)
    11      e++;
    12  }
    13  
    14  __attribute__((noinline)) int
    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
    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  }