预期的顶级实体

spe*_*xvs 8 llvm

在框架中expected top-level entity执行时,您是如何设法克服错误的?llillvm

Eli*_*sky 5

此错误通常意味着您复制粘贴了某些 IR 代码的一部分,该代码不算作顶级实体。换句话说,它不是一个函数,不是一个类型,不是一个全局变量等等。在C中也会发生同样的错误,仅供比较:

x = 8;
Run Code Online (Sandbox Code Playgroud)

对于 C 文件来说不是有效内容,因为赋值语句不是有效的顶级实体。为了使其有效,您将其放入函数中:

void foo() {
  x = 8;   /* assuming x is global and visible here */
}
Run Code Online (Sandbox Code Playgroud)

同样的错误发生在 LLVM IR 中。


Mi *_*i G 5

我的问题: .ll 文件格式是“UTF-8 with BOM”而不是“UTF-8 without BOM”。

修复:使用notepad++,在编码菜单中选择“UTF-8 without BOM”,然后保存。

快速设置:(适用于 Windows 上的 llvm 3.4.0 .ll 文件)

来自https://notepad-plus-plus.org/的高级文本编辑器

来自https://github.com/CRogers/LLVM-Windows-Binaries的 llvm 二进制文件

hello.ll 为“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
}
Run Code Online (Sandbox Code Playgroud)

在命令提示符下:

lli hello.ll
Run Code Online (Sandbox Code Playgroud)

快速设置:(适用于 Windows 上的 llvm 3.8.0 .ll 文件)

来自https://notepad-plus-plus.org/的高级文本编辑器

clang 二进制文件来自:http ://llvm.org/releases/download.html#3.8.0

hello.ll 为“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
}
Run Code Online (Sandbox Code Playgroud)

在命令提示符下:

clang hello.ll -o hello.exe
hello.exe
Run Code Online (Sandbox Code Playgroud)

有关 char16_t、u16String 等的错误意味着 clang 需要:-fms-compatibility-version=19