https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88223

            Bug ID: 88223
           Summary: Wrong code for intrinsic memmove
           Product: gcc
           Version: 8.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: fuz at fuz dot su
  Target Milestone: ---

Created attachment 45103
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=45103&action=edit
preprocessed test case

A user on reddit has pointed out that gcc 8 generates wrong code
for intrinsic memmove() when compiling with optimisations:

    https://www.reddit.com/r/C_Programming/comments/a0tdux

The following minimal reproduction was provided:

    char s[] = "12345";
    memmove(s + 1, s, 4);    /* 11234 */
    memmove(s + 1, s, 4);    /* 11123 */
    memmove(s + 1, s, 4);    /* 11112 */
    puts(s);

Without optimisations, this prints "11112" as expected whereas
with optimisations, it prints "11123".

I was able to reproduce this problem on FreeBSD with gcc 8.2.0.
The relevant files are attached.

Reply via email to