LLVM GetAnalysis() 失败,需要通过
LLVM GetAnalysis() failing with required passes
我有一组使用LLVM创建的自定义传递,用于在某些位码上运行。 我已经设法让它编译,但是每当我尝试使用在另一种传递类型上调用getAnalysis()
的传递来运行它时,它都会失败:
Assertion `ResultPass && "getAnalysis*() called on an analysis that was not " "'required' by pass!"' failed.
调用getAnalysis()
的自定义传递需要其类型,特别是;
bool Operators::doInitialization(){
ParseConfig &parseConfig = getAnalysis<ParseConfig>(); // Fails here.
}
.
.
.
void Operators::getAnalysisUsage(AnalysisUsage &AU) const{
AU.addRequired<ParseConfig>();
return;
}
我花了几天时间在这上面,很迷茫。我知道以下情况是正确的:
- ParseConfig 通过
RegisterPass<>
模板成功注册,我已经在 GDB 中逐步浏览了它,发现它确实被注册了。 - 同样使用 GDB,我发现在查看
getAnalysis()
时,注册通行证的列表始终为空(这会导致断言(。
重要说明:我最终将在使用 Flang 编译的 Fortran 项目中使用它,因此我使用的 LLVM 库版本是 Flang 分支(可在此处找到(。该分支就在LLVM 7.1左右,但与注册通行证相关的特定文件似乎与当前的LLVM库没有什么不同。
将getAnalysis
函数从doInitialization
移动到runOnFunction
可以使其工作。
从 LLVM 页面
此方法调用getAnalysis*返回对所需传递的引用。如果您尝试获取未在 getAnalysisUsage 实现中声明为必需的分析,则可能会遇到运行时断言失败。此方法可以由 run* 方法实现调用,也可以由 run*方法调用的任何其他本地方法调用。
相关文章:
- 如果没有malloc,链表实现将失败
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 视图中的参数推导失败:take_while
- 链接到自行创建的dll失败
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- gcc和c++17的过载解析失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 从父数组测试用例构造二叉树失败
- LibGit2 SSH身份验证失败
- 如何让LLDB在成功时退出,在失败时等待
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 生成MRPT库时cmake配置失败
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- LLVM GetAnalysis() 失败,需要通过