LLVM IR 主函数返回 void

Str*_*ger 6 llvm void

我正在测试一个仅返回 void 的主函数,并且在使用以下命令运行位码时出现核心转储错误(信号 65 或 73)lli

define void @main() {
entry:
  ret void
}
Run Code Online (Sandbox Code Playgroud)

这是 LLVM 的限制lli还是完全非法?

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

; Function Attrs: nounwind
define void @main() #0 {
entry:
  ret void
}
Run Code Online (Sandbox Code Playgroud)

Oak*_*Oak 5

它不会对我来说崩溃,所以罪魁祸首一定是其他东西:

$ echo "define void @main() {entry: ret void}" | lli -
$
Run Code Online (Sandbox Code Playgroud)

无论如何,lli 支持 void main 方法,如您在ExecutionEngine::runFunctionAsMain().