2015-08-27 65 views
4

我測試,僅僅返回void和我與lli運行時位碼獲取核心轉儲的錯誤(信號65或73)主要功能:LLVM IR主要功能返回void

define void @main() { 
entry: 
    ret void 
} 

它是一個限制lli或只是在LLVM非法?

我很清楚,在C++中,返回void類型的主函數的聲明是不正確的。事實上,我已經用Clang(這只是一個警告)這樣做,並得到幾乎相同的代碼(由於#0屬性不完全相同,但足夠接近,我相信差異不會導致此問題):

; Function Attrs: nounwind 
define void @main() #0 { 
entry: 
    ret void 
} 
+6

@Bindind,所以你downvote,因爲你不知道什麼LLVM紅外線看起來像? –

回答

3

它不會崩潰對我來說,這樣的罪魁禍首必須是別的東西:

$ echo "define void @main() {entry: ret void}" | lli - 
$ 

在任何情況下,LLI支持無效的主要方法,因爲你可以看到ExecutionEngine::runFunctionAsMain()

+0

謝謝。我已經和你一樣直接測試了lli(而不是llvm),它仍然是隨機崩潰的。我在Windows 7 btw。 – Stringer

+0

@Stringer你成功地在任何東西上運行lli嗎?例如一個鏗鏘生成的紅外文件?如果你還沒有,就必須有一個更基本的問題 - 試着問一個新的問題,詳細說明錯誤和你的構建過程。爲了驗證它不是這個無效的東西,你也可以改變你的主要方法來返回一些int,看看它的行爲是否相同。 – Oak

+0

是的,我正在研究一種玩具語言,將其轉換爲LLVM IR。到目前爲止這麼好,因爲我所有的單元測試(68)總是從主體返回i32或i1。構建過程非常簡單:llvm-如lli(我不知道lli可以直接使用IR字符串)。 – Stringer