【发布时间】:2022-10-02 06:18:23
【问题描述】:
我正在使用 Clang++ 为 Cortex-M0+ 目标进行编译,并且在从版本 14 迁移到版本 15 时,我发现为本地静态变量的保护变量生成的代码有所不同。
因此,例如:
int foo()
{
static int x = 1;
...
}
Clang-14 生成以下内容:
ldr r0, .LCPI0_4
ldrb r0, [r0]
dmb sy
lsls r0, r0, #31
beq .LBB0_8
Clang-15 现在生成:
ldr r0, .LCPI0_4
movs r1, #2
bl __atomic_load_1
lsls r0, r0, #31
beq .LBB0_8
为什么改变? Clang 14 代码不正确吗?
标签: static clang atomic clang++ cortex-m