在expected top-level entity
框架中执行lli
时,您是如何设法传递llvm
错误的?
答案 0 :(得分:4)
此错误通常意味着您复制粘贴了一些不计入顶级实体的IR代码。换句话说,它不是函数,不是类型,不是全局变量等.C中也可能发生同样的错误,只是为了比较:
x = 8;
不是C文件的有效内容,因为赋值语句不是有效的顶级实体。为了使它有效,你将它放在一个函数中:
void foo() {
x = 8; /* assuming x is global and visible here */
}
LLVM IR中发生同样的错误。
答案 1 :(得分:2)
我的问题: .ll文件格式为“带BOM的UTF-8”,而不是“没有BOM的UTF-8”。
修复:使用notepad ++,在编码菜单中,选择“无BOM的UTF-8”,然后保存。
快速设置:(适用于Windows上的llvm 3.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上的llvm 3.8.0 .ll文件)
来自https://notepad-plus-plus.org/
的高级文本编辑器来自http://llvm.org/releases/download.html#3.8.0
的clang二进制文件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