我正在开发一个编译器来为一种玩具语言(一个类)生成 LLVM IR 代码。
但是,我不断收到一个奇怪的错误:“函数 Main_main 的重新定义无效”。此函数仅定义一次,如“Main_main”的 grepping 所示:
$ 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 认为这是一个重新定义?