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
doit(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
main()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 }
44