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])

Reply via email to