【发布时间】:2020-03-20 04:35:39
【问题描述】:
我正在开发一个编译器来为一种玩具语言(一个类)生成 LLVM IR 代码。
但是,我不断收到一个奇怪的错误:“函数 Main_main 的重新定义无效”。这个函数只定义了一次,如 grepping for "Main_main" 所示:
$ grep "Main_main" test.ll
declare %Object* @Main_main(%Main*)
%Object* (%Main*) * @Main_main
%vtpm.1 = call %Object*(%Main* ) @Main_main( %Main* %vtpm.0 )
define %Object* @Main_main(%Main* %_self_var) {
第一行是声明它的位置,第二行是指向它的指针存储在 vtable 中的位置,第三行是调用它的位置,第四行是定义它的位置。肯定只有其中一个算作定义吗?
确切的错误信息:
$ llvm-as test.ll -o test.bc
llvm-as: test.ll:179:17: error: invalid redefinition of function 'Main_main'
define %Object* @Main_main(%Main* %_self_var) {
^
我做错了什么,让 LLVM 认为这是一个重新定义?
【问题讨论】:
-
请分享整个 test.ll,或者至少是调用和定义
Main_main的函数。
标签: llvm forward-declaration llvm-ir function-declaration function-definition