https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100152
--- Comment #28 from Iain Sandoe <iains at gcc dot gnu.org> --- reduced test case: ___UTF_8_put(char *a, int b) { char *c = a; int bytes; if (b <= 15) bytes = 2; else if (b <= 255) bytes = 4; else if (b <= 4095) bytes = 5; else bytes = 6; c = *a = c; switch (bytes) { case 6: *--c = b >>= 6; case 5: *--c = b; b >>= 6; } *c = bytes + b; } ___SCMOBJ_to_NONNULLSTRING(d) { { unsigned long g, h; char c; h = ((long *)1)[1]; g = 0; for (; g < h; g++) i(); g = 0; for (; g < h; g++) ___UTF_8_put(c, (long)*((unsigned *)d + (g << 2 >> 2)) << 2 >> 2); } }