AAResultsWrapperPass assertion in 3.9


Migrating from 3.5 to 3.9. There is a module pass that uses alias analysis started breaking at runtime:

llvm/lnx64/llvm/include/llvm/PassAnalysisSupport.h:236: AnalysisType& llvm::Pass::getAnalysisID(llvm::AnalysisID) const [with AnalysisType = llvm::AAResultsWrapperPass; llvm::AnalysisID = const void*]: Assertion `ResultPass && "getAnalysis*() called on an analysis that was not " “‘required’ by pass!”’ failed.

What does this mean? I have this line in my “required” list:

void XidanePass::getAnalysisUsage(AnalysisUsage &AU) const {




See https://reviews.llvm.org/rL247167 .


Thanks Eli.

Ashutosh once asked the same question, and later said:

'createLegacyPMAAResults' can help here.

But how should this be used to solve the assertion problem?

(The message in question is , for reference.) The problem is that you can’t require a FunctionPass from a ModulePass. The solution is not to do that. createLegacyPMAAResults is an alternative way to access alias analysis without an AAResultsWrapperPass. See the LLVM source code for examples of how to use it. -Eli

Well, you can call function pass on demand in a module pass like getAnalysis<LoopInfoWrapperPass>(f). Not something for AA?

Thanks Eli,

I got createLegacyPMAAResults working. The weird thing is that the pass runs all fine from command line, but load with gdb will crash on createLegacyPMAAResults.