https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108296
--- Comment #2 from Nadav Har'El <nyh at math dot technion.ac.il> --- Thanks. Interesting. So __builtin_memcpy() is simply not supposed to work correctly for overlapping areas? I now realize that according to memcpy(3) documentation, memcpy() is also not guaranteed to work correctly in this case (and you should use memmove() in this case), but in practice it does work correctly when copying a higher address to a lower address.