LLVM 提供的 main() 返回类型无效

标签 llvm llvm-ir

我正在用 OCaml 编写一个编译器,可以编译为 LLVM IR。目前的程序很简单:

num main() {
    return 0;
}

当我使用编译器运行它时,我得到以下 LLVM IR 代码:

; ModuleID = 'PixMix'
source_filename = "PixMix"

@fmt = private unnamed_addr constant [4 x i8] c"%d\0A\00"
@fmt.1 = private unnamed_addr constant [4 x i8] c"%s\0A\00"

declare i32 @printf(i8*, ...)

define double @main() {
entry:
  ret double 0.000000e+00
}

但是,如果我将其传递给 lli,我会被告知返回类型无效。查看该代码,main 被定义为 double 并且它返回一个 double,那么为什么 lli 告诉我们我认为返回类型搞砸了?

最佳答案

问题是入口点函数(默认情况下是main,但名称可以由-entry-function标志控制)预计具有一定的签名,类似于 C 或 C++ 中的 main 。特别是,它应该返回 void 或整数类型。您可以阅读the implementation of the check以确保您生成的 IR 满足它。

关于LLVM 提供的 main() 返回类型无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47601603/

相关文章:

llvm - 确定模块的所有全局变量

llvm - 通过llvm pass识别用户定义函数

llvm - 如何在 LLVM 中将 genericValue 转换为 Value?

c++11 - 编译 Cortex M3 裸机

c++ - 如何在读取 STDIN 时获取 llvm::MemoryBuffer 的内容?

llvm - 如何使用 native 编译器 (g++) 编译和运行 llc-3.4 生成的 C++ 代码?

linux - LLDB 在内存转储中显示陷阱操作码

c++ - LLVM 用函数替换操作数

c++ - LLVM IR : Get LVALUE operand

java - 从 Java 使用 LLVM