Hatena::ブログ(Diary)

miura1729の日記 このページをアンテナに追加 RSSフィード

2008-11-11

llvmrubyにinvoke/unwindを追加できました

17:59 |  llvmrubyにinvoke/unwindを追加できましたを含むブックマーク  llvmrubyにinvoke/unwindを追加できましたのブックマークコメント

昨日の日記のアサーションエラーが解決しました。原因はllvmrubyそのものでもLLVMでも無く、使い方の問題でした。

      b.invoke(f2, nd, ud)
      b.return(1.llvm)  # ここがだめ

と、invoke命令の後にreturnをつけていたのですが、これがいけなかったようです。invoke命令はreturnで戻ってくるブロック・unwindで戻ってくるブロックそれぞれ指定するため、invokeの後の命令を実行することはありません。ここにあえて命令を書いてはいけないようです。

追記

なんかunwindがcall _abortと変換されている(涙。llvm論文によるとinvoke/unwindはテーブルを使ったインプリメントとsetjmp/longjmpを使ったインプリメントがあるみたいだからオプションで切り替えられるのかなー。ちょっと調べてみます。

トラックバック - http://d.hatena.ne.jp/miura1729/20081111/1226393946