// { dg-do assemble } // { dg-options "-O" } // GROUPS passed mentor struct Word { struct S1 *p1; }; struct S1 { Word o; void shift_left(int delta, int ct); }; inline void S1::shift_left(int delta, int ct) { int cnt = ct; for (S1 *to_p = this, *from_p = to_p + delta; cnt--;) *to_p++ = *from_p++; } void dispose_t(S1 *tp, int from_index, int ct, const int d_last_t) { int new_ct = d_last_t + 1 - ct; tp[0].o.p1[from_index].shift_left(ct, new_ct - from_index); }