[llvm-dev] GetAnalysis() failing with required passes
Trevor Martin via llvm-dev
llvm-dev at lists.llvm.org
Wed Oct 23 11:34:27 PDT 2019
I'm working with an old project that has a bunch of custom passes, and
trying to get it to run with the most recent version of the flang LLVM
I've upgraded the project to use the flang llvm fork (approx. LLVM 7.1)
from 3.0 and gotten it to compile, but am running into an issue with pass
registration and getAnalysis().
Specifically, the pass 'Operators' needs to call getAnalysis() on a
'ParseConfig' pass to continue;
ParseConfig &parseConfig = getAnalysis<ParseConfig>();
but fails an assertion with;
"AnalysisType& llvm::Pass::getAnalysisID(llvm::AnalysisID) const [with
AnalysisType = ParseConfig; llvm::AnalysisID = const void*]: Assertion
`ResultPass && "getAnalysis*() called on an analysis that was not "
"'required' by pass!"' failed."
I've sorted through every google search I can and all the llvm library
calls to try and fix this. The following is true;
- Both Operators and ParseConfig passes inherit from ModulePass
- Operators overrides getAnalysisUsage() and adds ParseConfig as required.
- ParseConfig correctly calls the RegisterPass<> template and is registered.
- I've tried using RegisterStandardPasses() as described here:
https://github.com/sampsyo/llvm-pass-skeleton/issues/7 and the code is run,
but the assertion still fails.
- I've stepped through the registration of ParseConfig with GDB and it
registers successfully, and I've stepped through the getAnalysis() call
from Operators and the assertion fails at AnalysisResolver::findImplPass(),
as the AnalysisImpls list is always empty (
https://llvm.org/doxygen/PassAnalysisSupport_8h_source.html#l00155) this is
the 10.0 code, but the library is the same as the flang LLVM.
One thing I haven't fully figured out is how both passes inheriting from
ModulePass affects this. Most people who have had this issue have simply
been trying to use a Function pass in a module pass class or something
similar, but all I need is all the info gathered from the previous
ParseConfig pass to start working in the Operators pass, and both are done
on a module level.
I'm pretty much at a loss at this point. If anyone is well versed with pass
registration and getAnalysis that could provide some insight, I'd greatly
appreciate it. I can also provide more information as needed.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev