/* { dg-do run } */ /* PR/107115 */ /* { dg-additional-options "-fno-schedule-insns -fno-schedule-insns2" } */ #include void test1(long *p1) { p1[0] = 1; } long test2(long long *p2, int index1, int index2) { p2[index1] = 2; return p2[index2]; } long test3(long *p3, int index2, long value) { p3[index2] = 3; p3[index2] = value; return p3[0]; } long test4(void *p4, int index1, int index2) { test1(p4); long temp = test2(p4, index1, index2); return test3(p4, index2, temp); } long (*volatile vtest)(void *, int, int) = test4; int main(void) { void *pp = malloc(sizeof (long) + sizeof(long long)); if (!pp) abort(); long result = vtest(pp, 0, 0); if (*(long *)pp != 2 || result != 2) __builtin_abort (); return 0; }