https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88223
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- extern void *memmove(void *, const void *, __SIZE_TYPE__); extern void abort(void); extern int main(void) { char s[] = "12345"; memmove(s + 1, s, 4); memmove(s + 1, s, 4); memmove(s + 1, s, 4); if (s[0] != '1' || s[1] != '1' || s[2] != '1' || s[3] != '1' || s[4] != '2') abort (); return (0); }