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

时间:2017-12-01 21:16:21

标签: 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告诉我返回类型搞砸了?

1 个答案:

答案 0 :(得分:2)

问题是入口点函数(默认为main,但名称可以由-entry-function标志控制)预计会有一定的签名,类似于{{1}看起来像在C或C ++中。特别是,它应该返回main或整数类型。您可以阅读the implementation of the check以确保您生成的IR符合它。