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

     1  /* PR tree-optimization/36038 */
     2  
     3  long long list[10];
     4  long long expect[10] = { 0, 1, 2, 3, 4, 4, 5, 6, 7, 9 };
     5  long long *stack_base;
     6  int indices[10];
     7  int *markstack_ptr;
     8  
     9  void
    10  doit (void)
    11  {
    12    long long *src;
    13    long long *dst;
    14    long long *sp = stack_base + 5;
    15    int diff = 2;
    16    int shift;
    17    int count;
    18  
    19    shift = diff - (markstack_ptr[-1] - markstack_ptr[-2]);
    20    count = (sp - stack_base) - markstack_ptr[-1] + 2;
    21    src = sp;
    22    dst = (sp += shift);
    23    while (--count)
    24      *dst-- = *src--;
    25  }
    26  
    27  int
    28  main ()
    29  {
    30    int i;
    31    for (i = 0; i < 10; i++)
    32      list[i] = i;
    33  
    34    markstack_ptr = indices + 9;
    35    markstack_ptr[-1] = 2;
    36    markstack_ptr[-2] = 1;
    37  
    38    stack_base = list + 2;
    39    doit ();
    40    if (__builtin_memcmp (expect, list, sizeof (list)))
    41      __builtin_abort ();
    42    return 0;
    43  }