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