MSVC:无效的 memcpy 优化?

Ale*_*lex 15 c++ x86 memcpy visual-c++ compiler-bug

考虑以下代码:

void MemMove8(void* dst, void* src)
{
    char tmp[8];
    memcpy(tmp, src, 8);
    memcpy(dst, tmp, 8);
}
Run Code Online (Sandbox Code Playgroud)

MSVC (16.7.1) x86 with /O2 为此函数生成以下程序集:

; _dst$ = ecx
; _src$ = edx
    mov eax, DWORD PTR [edx]
    mov DWORD PTR [ecx], eax
    mov eax, DWORD PTR [edx+4]
    mov DWORD PTR [ecx+4], eax
Run Code Online (Sandbox Code Playgroud)

但如果输入和输出缓冲区重叠,这将不起作用(在某些情况下)。

生成的代码对我来说似乎是错误的;或者这是一个有效的转换,我在这里遗漏了什么?