1/* PR tree-optimization/36038 */
2
3long long list[10];
4long long expect[10] = { 0, 1, 2, 3, 4, 4, 5, 6, 7, 9 };
5long long *stack_base;
6int indices[10];
7int *markstack_ptr;
8
9void
10doit (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
27int
28main ()
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}
44