我一直在关注LLVM tutorial,现在我正在尝试调整和尝试扩展东西,但我一直遇到一个错误,代码不能即时执行&编译器(我用LLVM做的编译器)将中止,并显示以下信息:
piler: /usr/lib/llvm-9/include/llvm/Support/Error.h:626: llvm::Expected<T>::storage_type* llvm::Expected<T>::getStorage() [with T = long unsigned int; llvm::Expected<T>::storage_type = long unsigned int]: Assertion `!HasError && "Cannot get value when an error exists!"' failed.在尝试获取JIT-ted函数的地址后,将引发断言:
reinterpret_cast<double (*)()>(expr_symbol.getAddress().get());我真的需要看看错误是什么,试图修复它,但我不知道如何获取或查看它。
发布于 2020-08-19 03:41:57
解决了这个问题。
.getAddress()返回一个环绕地址的llvm::Expected,它可以包含错误或地址(如果找到)。
要处理/记录错误,您必须使用llvm::logAllUnhandledErrors‘接收’错误并记录它
auto address = expr_symbol.getAddress();
if (auto err = address.takeError()) {
llvm::logAllUnhandledErrors(std::move(err), llvm::errs(), "[JIT Error] ");
return -1;
}https://stackoverflow.com/questions/63473484
复制相似问题