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

     1  /* PR24716, scalar evolution returning the wrong result
     2     for pdest.  */
     3  
     4  int Link[] = { -1 };
     5  int W[] = { 2 };
     6  
     7  extern void abort (void);
     8  
     9  int f (int k, int p)
    10  {
    11    int pdest, j, D1361;
    12    j = 0;
    13    pdest = 0;
    14    for (;;) {
    15      if (pdest > 2)
    16        do
    17          j--, pdest++;
    18        while (j > 2);
    19  
    20      if (j == 1)
    21        break;
    22  
    23      while (pdest > p)
    24        if (j == p)
    25          pdest++;
    26  
    27      do
    28        {
    29          D1361 = W[k];
    30          do
    31            if (D1361 != 0)
    32              pdest = 1, W[k] = D1361 = 0;
    33          while (p < 1);
    34      } while (k > 0);
    35  
    36      do
    37        {
    38          p = 0;
    39          k = Link[k];
    40          while (p < j)
    41            if (k != -1)
    42              pdest++, p++;
    43        }
    44      while (k != -1);
    45      j = 1;
    46    }
    47  
    48    /* The correct return value should be pdest (1 in the call from main).
    49       DOM3 is mistaken and propagates a 0 here.  */
    50    return pdest;
    51  }
    52  
    53  int main ()
    54  {
    55    if (!f (0, 2))
    56      abort ();
    57    return 0;
    58  }
    59