私は言語の作成とコンパイラの構築に興味があり、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 です。
ありがとう。