【发布时间】:2019-02-08 07:40:25
【问题描述】:
请考虑以下程序:
int main() {
int test = 17;
return test;
}
编译到 LLVM_IR:clang++ -S -emit-llvm test.cpp
看IR,函数main是这样定义的:
; Function Attrs: noinline norecurse nounwind optnone uwtable
define dso_local i32 @main() #0 {
%1 = alloca i32, align 4
%2 = alloca i32, align 4
store i32 0, i32* %1, align 4
store i32 17, i32* %2, align 4
%3 = load i32, i32* %2, align 4
ret i32 %3
}
我们可以看到%2 是我们的test 变量的分配,将17 加载到其中,%3 使用该变量作为函数的返回值(与我们编写的代码保持一致) .然而,我们看到 %1 定义了 another int 大小的变量,并将其初始化为 0,尽管从未使用它。这个额外的变量在 C++ 源代码中是看不到的。
我应该注意到,当我使用 clang 而不是 clang++ 进行编译时,我会看到同样的结果。
这个额外的变量是什么?
【问题讨论】:
标签: clang clang++ llvm-clang llvm-ir