1
我在玩LLVM,並已開始使用簡單的Hello World。下面是我試圖運行代碼:錯誤:調用GEP指令時的期望值令牌
test.s:
; Declare the string constant as a global constant.
@.str = private unnamed_addr constant [13 x i8] c"Hello world!\00"
; External declaration of the puts function
declare i32 @puts(i8* nocapture) nounwind
; Definition of main function
define i32 @main() { ; i32()*
; Convert [13 x i8]* to i8 *...
%cast210 = getelementptr [13 x i8], [13 x i8]* @.str, i64 0, i64 0
; Call putr function to write out the string to stdout.
call i32 @puts(i8* %cast210)
ret i32 0
}
我把它從這裏:http://llvm.org/docs/LangRef.html#id610。當我運行它時,出現以下錯誤:
$lli test.s
lli: test.s:10:37: error: expected value token
%cast210 = getelementptr [13 x i8], [13 x i8]* @.str, i64 0, i64 0
^
當官方LLVM網站的代碼失敗時,有點令人困惑。
test_fixed.s:
; Declare the string constant as a global constant.
@.str = private unnamed_addr constant [13 x i8] c"Hello world!\00"
; External declaration of the puts function
declare i32 @puts(i8* nocapture) nounwind
; Definition of main function
define i32 @main() { ; i32()*
; Convert [13 x i8]* to i8 *...
%cast210 = getelementptr [13 x i8]* @.str, i64 0, i64 0
; Call putr function to write out the string to stdout.
call i32 @puts(i8* %cast210)
ret i32 0
}
我的問題是:什麼是怎麼回事但是,可以通過修改有問題的線路如下固定的嗎?當我檢查getelementptr文檔:http://llvm.org/docs/LangRef.html#id937時,我得到的印象是test.s的確是正確的。但它不起作用。請幫忙。
一些背景信息:
$ lli -version
LLVM (http://llvm.org/):
LLVM version 3.3
Optimized build.
Built Jun 18 2013 (05:58:10).
Default target: x86_64-pld-linux-gnu
Host CPU: bdver1
完全有道理,謝謝!我是LLVM的新手,並不總是在哪裏尋找答案。這非常有幫助! –
@ banach-space:嘿,我也遇到了同樣的錯誤。我正在使用llvm3.8.1來生成.ll文件,並且我正在使用該.ll文件傳遞給我的程序,該程序早先在llvm3.6上。我的程序從這個.ll文件獲取輸入,並且與llvm3.8.1成功編譯。所以我認爲沒有問題。如何解決這個問題?提前致謝。 – user413201