我在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
告诉我返回类型搞砸了?
答案 0 :(得分:2)
问题是入口点函数(默认为main
,但名称可以由-entry-function
标志控制)预计会有一定的签名,类似于{{1}看起来像在C或C ++中。特别是,它应该返回main
或整数类型。您可以阅读the implementation of the check以确保您生成的IR符合它。