LLVM IR 主函数返回 void

LLVM IR main function returning void

我正在测试一个主函数,它只是 return 无效,并且当 运行 位码 lli 时出现核心转储错误(信号 65 或 73):

define void @main() {
entry:
  ret void
}

它是 lli 的限制还是在 LLVM 中完全非法?

我很清楚在 C++ 中,return 类型为 void 的 main 函数的声明是不正确的。事实上,我已经用 Clang 尝试过这个(这只是一个警告)并得到几乎相同的代码(由于 #0 属性不完全相同,但足够接近以至于我相信差异不会导致这个问题):

; Function Attrs: nounwind
define void @main() #0 {
entry:
  ret void
}

我没有崩溃,所以罪魁祸首一定是别的东西:

$ echo "define void @main() {entry: ret void}" | lli -
$

在任何情况下,lli 都支持 void main 方法,如您在 ExecutionEngine::runFunctionAsMain().

中所见