/* { dg-do compile } */ typedef struct { short a; short b; } c; c *d; int e, f, i, j, k, l, m, n, o, p; c g, h; void q() { do { if (o) { (*d).a = (*d).b = d[e].a = d[e].a * 3 + 1 >> 15; d[e].b = d[e].b * 3 + 1 >> 15; } n = -(d[e].b * g.b) >> 5; m = d[e].b * g.a + 1 >> 5; l = d[f].a * -d[f].b * h.b + 1 >> 5; k = d[f].a * h.b + d[f].b * h.a + 1 >> 5; j = n + l; i = m - k; (*d).a += j; d[e].a -= i; ++d; } while (--p); }