https://gcc.gnu.org/bugzilla/show_bug.cgi?id=128440
Gabriel Ravier <gabravier at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|FIXED |---
Status|RESOLVED |REOPENED
--- Comment #6 from Gabriel Ravier <gabravier at gmail dot com> ---
The case of:
long buf[4];
void f (void) { __builtin_memmove (&buf[1], &buf[0], 12); }
...appears to be still rather quite broken.
-O2, trunk bf136cb56:
f:
r0 = buf+8 ll
r1 = buf ll
if r1 >= r0 goto .L2
r2 = *(u64 *) (r1+4)
*(u64 *) (r0+4) = r2
r3 = *(u32 *) (r1+-4)
*(u32 *) (r0+-4) = r3
exit
(dst+0...3 fails to be copied and 4 bytes are read from before buf onto the top
half of buf[0])