我对语言创建和编译器构造感兴趣,并且一直在研究这里的示例:http: //gnuu.org/2009/09/18/writing-your-own-toy-compiler/。作者使用的是 LLVM 2.6,在对 LLVM 2.7 进行了一些更改后,我得到了所有代码生成代码来编译。在向编译器提供测试代码时,
int do_math( int a ) {
int x = a * 5 + 3
}
do_math( 10 )
程序正常工作,直到它尝试运行代码,此时它会出现段错误。我正在我的系统上构建 LLDB,但与此同时,有人在这个 LLVM asm 中看到明显的段错误吗?
; ModuleID = 'main'
define internal void @main() {
entry:
%0 = call i64 @do_math(i64 10) ; <i64> [#uses=0]
ret void
}
define internal i64 @do_math(i64) {
entry:
%a = alloca i64 ; <i64*> [#uses=1]
%x = alloca i64 ; <i64*> [#uses=1]
%1 = add i64 5, 3 ; <i64> [#uses=1]
%2 = load i64* %a ; <i64> [#uses=1]
%3 = mul i64 %2, %1 ; <i64> [#uses=1]
store i64 %3, i64* %x
ret void
}
输出只是:
Segmentation fault
我的拱门是 OS X x86_64。
谢谢。