<div dir="ltr"><div>Hi,</div><div><br></div><div>I have a simple Function pass, and I am trying to get loop info in the code. But when I try to add AU.addRequired<LoopInfo>(); in getAnalysisUsage(), the module crashes. This happens even before getAnalysis<LoopInfo>() is called. It is a dynamically loaded pass (.so).</div><div><br></div><div>namespace</div><div>{</div><div>    class TestPass : public FunctionPass</div><div>    {</div><div>        public:</div><div>        static char ID;</div><div><br></div><div>        TestPass() : FunctionPass(ID) {}</div><div><br></div><div>        virtual void getAnalysisUsage(AnalysisUsage &AU) const</div><div>        {</div><div>            AU.addRequired<LoopInfo>();</div><div>            AU.setPreservesAll();</div><div>        }</div><div><br></div><div>        bool runOnFunction(Function &F) override</div><div>        {</div><div>            errs() << F.getName() << " : " << F.getBasicBlockList().size() << "\n";</div><div>            // LoopInfo &LI = getAnalysis<LoopInfo>();</div><div>            return false;</div><div>        }</div><div>    };</div><div>}</div><div><br></div><div>char TestPass::ID = 0;</div><div>static RegisterPass<TestPass> X("TestPass", "Test pass");</div><div><br></div><div>// register pass for clang use</div><div>static void registerTestPassPass(const PassManagerBuilder &, PassManagerBase &PM)</div><div>{</div><div>    PM.add(new TestPass());</div><div>}</div><div><br></div><div>static RegisterStandardPasses RegisterTestPassPass(PassManagerBuilder::EP_EarlyAsPossible , registerTestPassPass);</div><div><br></div><div><br></div><div>Here is the stack trace.</div><div>[armeabi-v7a] Compile thumb  : test <= test.c</div><div><br></div><div>Pass 'Test pass' is not initialized.</div><div>Verify if there is a pass dependency cycle.</div><div>Required Passes:</div><div>0  clang           0x0000000001492ec2 llvm::sys::PrintStackTrace(_IO_FILE*) + 34</div><div>1  clang           0x0000000001490f61</div><div>2  libpthread.so.0 0x00002b15cbb4e340</div><div>3  clang           0x00000000011c86f7 llvm::PMTopLevelManager::schedulePass(llvm::Pass*) + 343</div><div>4  clang           0x00000000019c0401 llvm::PassManagerBuilder::addExtensionsToPM(llvm::PassManagerBuilder::ExtensionPointTy, llvm::legacy::PassManagerBase&) const + 225</div><div>5  clang           0x00000000019c054a llvm::PassManagerBuilder::populateFunctionPassManager(llvm::legacy::FunctionPassManager&) + 26</div><div>6  clang           0x0000000001837de3 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::raw_ostream*) + 1171</div><div>7  clang           0x000000000182a47f</div><div>8  clang           0x0000000001bdf043 clang::ParseAST(clang::Sema&, bool, bool) + 483</div><div>9  clang           0x0000000001603ba6 clang::FrontendAction::Execute() + 118</div><div>10 clang           0x00000000015e47b8 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 280</div><div>11 clang           0x0000000001673b41 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 1921</div><div>12 clang           0x0000000000820358 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 1320</div><div>13 clang           0x00000000007fceaa main + 8298</div><div>14 libc.so.6       0x00002b15cc7b6ec5 __libc_start_main + 245</div><div>15 clang           0x000000000081e5d9</div><div><br></div><div><br></div><div><br></div><div>Am I missing something? Any help would be appreciated.</div><div><br></div><div>Thanks,</div><div>Pankaj</div></div>