MSVC:无效的memcpy优化?

问题描述

考虑以下代码:

protected initialize<T>(props: Record<keyof typeof T,string>): void {
    for (const [key,value] of Object.entries(props)) {
        this.setAttribute(key.toLowerCase(),value);
    }
}

带有/ O2的MSVC(16.7.1)x86为该功能生成以下程序集:

void MemMove8(void* dst,void* src)
{
    char tmp[8];
    memcpy(tmp,src,8);
    memcpy(dst,tmp,8);
}

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

生成的代码对我来说似乎是错误的;还是这是有效的转换,我在这里缺少什么?

解决方法

这是一个错误。

https://developercommunity.visualstudio.com/content/problem/1151407/incorrect-memcpy-optimization.html

这似乎已在VS 16.8中得到解决。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...