<div>Hi, all:</div>
<div> </div>
<div>I wanted to use a FunctionPass (e.g. <em>MemoryDependenceAnalysis</em>) in a ModulePass, and then I used the method  "<font face="Courier New">getAnalysis<<em>MemoryDependenceAnalysis</em>>(llvm::Function *)"</font>  described at <a href="http://llvm.org/docs/WritingAnLLVMPass.html#ModulePass">http://llvm.org/docs/WritingAnLLVMPass.html#ModulePass</a> to get the FunctionPass. But , it still crashed when I invoked this pass in tool 'opt'.</div>

<div> </div>
<div>However, if I change my pass to inherit from FunctionPass, then everything goes well. But I must use the ModulePass to solve my problem. What can I do now?</div>
<div> </div>
<div>Following is the project file and crash infomation.</div>
<div> </div>
<div>--------------------------------------part of my project file--------------------------------------------------------</div>
<div><br>  <em>struct pFuncName : public ModulePass {<br>    ......</em></div>
<div><em>    virtual bool runOnModule(Module &M)</em></div>
<div><em>    {<br>       for(Module::iterator mib=M.begin(), mie=M.end(); mib!=mie; ++mib)<br>       {<br>            MemoryDependenceAnalysis &mda = getAnalysis<MemoryDependenceAnalysis>(*f);                  // I have noticed </em></div>

<div><em>            ......<br>       }<br>       return false;<br>    }</em></div>
<div><em></em> </div>
<div><em>    void getAnalysisUsage(AnalysisUsage &AU) const</em></div>
<div><em>    {<br>        AU.addRequired<MemoryDependenceAnalysis>();<br>    }<br> };</em></div>
<div> </div>
<div> </div>
<div>-----------------------------------------------crash infomation----------------------------------------------------</div>
<div> </div>
<div><em>$ opt -load /home/****/llvm-2.5/Debug/lib/g_pFuncName.so -g_pFuncName < test.bc > /dev/null<br>opt: /home/****/llvm-2.5/include/llvm/Target/TargetData.h:114: llvm::TargetData::TargetData(): Assertion `0 && "ERROR: Bad TargetData ctor used.  " "Tool did not specify a TargetData to use?"' failed.<br>
0   opt       0x08604986<br>1   opt       0x08604cc8<br>2             0x003ba400 __kernel_sigreturn + 0<br>3   libc.so.6 0x009cce28 abort + 392<br>4   libc.so.6 0x009c440e __assert_fail + 238<br>5   opt       0x08507bc5 llvm::Pass* llvm::callDefaultCtor<llvm::TargetData>() + 0<br>
6   opt       0x08507be2 llvm::Pass* llvm::callDefaultCtor<llvm::TargetData>() + 29<br>7   opt       0x08596996 llvm::PassInfo::createPass() const + 126<br>8   opt       0x0859156a llvm::PMTopLevelManager::schedulePass(llvm::Pass*) + 284<br>
9   opt       0x085915f1 llvm::PMTopLevelManager::schedulePass(llvm::Pass*) + 419<br>10  opt       0x0859b9ec llvm::FunctionPassManagerImpl::add(llvm::Pass*) + 30<br>11  opt       0x085917ab llvm::MPPassManager::addLowerLevelRequiredPass(llvm::Pass*, llvm::Pass*) + 315<br>
12  opt       0x08592636 llvm::PMDataManager::add(llvm::Pass*, bool) + 816<br>13  opt       0x08592a81 llvm::ModulePass::assignPassManager(llvm::PMStack&, llvm::PassManagerType) + 137<br>14  opt       0x0859b8a9 llvm::PassManagerImpl::addTopLevelPass(llvm::Pass*) + 237<br>
15  opt       0x08591642 llvm::PMTopLevelManager::schedulePass(llvm::Pass*) + 500<br>16  opt       0x0859b9cc llvm::PassManagerImpl::add(llvm::Pass*) + 30<br>17  opt       0x08591667 llvm::PassManager::add(llvm::Pass*) + 27<br>
18  opt       0x082d10c2<br>19  opt       0x082d2f03 main + 3181<br>20  libc.so.6 0x009b66e5 __libc_start_main + 229<br>21  opt       0x082c4641<br>Aborted (core dumped)<br>---------------------------------------------------------------------------------------------------------------</em></div>

<div><em></em> </div>
<div>Thanks a lot.</div>
<div> </div>
<div>gauss</div>