如何解决LLVM KaleidoscopeJIT:如何查看错误?
我一直在关注LLVM tutorial,现在我尝试进行调整并尝试扩展内容,但是我一直遇到错误,导致代码无法JIT和编译器(我已经完成了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());
我真的需要查看错误才能尝试对其进行修复,但我不知道如何获取或查看它。
解决方法
解决了这个问题。
.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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。