6

expected top-level entityフレームワークで実行lliしているときに、どのようにしてエラーをパススルーできましたllvmか?

4

2 に答える 2

5

このエラーは通常、トップレベルのエンティティとしてカウントされない一部のIRコードの一部をコピーして貼り付けたことを意味します。つまり、関数でも、型でも、グローバル変数でもありません。比較のために、Cでも同じエラーが発生する可能性があります。

x = 8;

割り当てステートメントは有効な最上位エンティティではないため、Cファイルの有効なコンテンツではありません。それを有効にするには、関数に入れます。

void foo() {
  x = 8;   /* assuming x is global and visible here */
}

同じエラーがLLVMIRでも発生します。

于 2013-01-30T16:38:18.883 に答える
4

の問題:.llファイル形式は「BOMなしのUTF-8」ではなく「BOM付きのUTF-8」でした。

修正: notepad ++の場合、エンコードメニューで[BOMなしのUTF-8]を選択し、保存します。

クイックセットアップ: (Windows上のllvm3.4.0.llファイルの場合)

https://notepad-plus-plus.org/の高度なテキストエディタ

https://github.com/CRogers/LLVM-Windows-Binariesのllvmバイナリ

hello.ll as "UTF-8 without BOM"(このコードはllvm 3.4.0形式です):

@msg = internal constant [13 x i8] c"Hello World!\00"
declare i32 @puts(i8*)
define i32 @main() {
    call i32 @puts(i8* getelementptr inbounds ([13 x i8]* @msg, i32 0, i32 0))
    ret i32 0
}

コマンドプロンプトの場合:

lli hello.ll

クイックセットアップ: (Windows上のllvm3.8.0.llファイルの場合)

https://notepad-plus-plus.org/の高度なテキストエディタ

clangバイナリ: http: //llvm.org/releases/download.html#3.8.0

hello.ll as "UTF-8 without BOM"(このコードはllvm 3.8.0形式です):

@msg = internal constant [13 x i8] c"Hello World!\00"
declare i32 @puts(i8*)
define i32 @main() {
    call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @msg, i32 0, i32 0))
    ret i32 0
}

コマンドプロンプトの場合:

clang hello.ll -o hello.exe
hello.exe

char16_t、u16Stringなどに関するエラーは、clangが必要であることを意味します:-fms-compatibility-version = 19

于 2016-03-18T20:27:50.707 に答える