https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91223
--- Comment #1 from Dmitry G. Dyachenko <dimhen at gmail dot com> --- slightly reduced $ cat y.i int a, g; int *b, *f, *h; void *memcpy(void *, const void *, unsigned long); typedef struct { int b; } * c; int d(void); c e; int d() { char c[16]; bd: for (a = 0; a <= 1; a++) { *c = *f; *(c + 8 + 5) = *(c + 8 + 6) = g + 1; unsigned long d[2]; *d = c[0] + c[1]; *(d + 1) = *(b + c[0]) * *b; *d = *d ^ c[1]; *(d + 1) = *(d + 1) ^ (long)b ^ c[5] << 1 ^ *(unsigned long *)b ^ *c ^ *(b + c[1]); *d = *d ^ *(b + c[13]); *(d + 1) = *(d + 1) ^ *(b + c[13] + 1); *d = *d ^ *(b + 1) ^ c[14] * c[15]; *(d + 1) = *(d + 1) ^ *b; memcpy(c, d, 16); } *(c + 8) = *(c + 8) ^ *f ^ e->b; memcpy(h, c, 16); if (0) goto bd; return 0; }