<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Aug 25, 2018, at 5:22 PM, Buse Yilmaz via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hi all,<div class="">I have a function pass which does some analysis and populates</div><div class=""><br class=""></div><div class="">A a;</div><div class=""><br class=""></div><div class="">where</div><div class=""><br class=""></div><div class="">typedef std::map< std::string, B* > A;<br class=""></div><div class=""><br class=""></div><div class="">class B {</div><div class="">typedef std::vector< C* > D;</div><div class="">D d;</div><div class="">}</div><div class=""><br class=""></div><div class="">class C {</div><div class="">// some class packing information about basic blocks;</div><div class="">}</div><div class=""><br class=""></div><div class="">Hence I have a map of vectors traversed by string.</div><div class="">I wrote associated destructors for these classes. This pass works successfully on its own.</div><div class=""><br class=""></div><div class="">I have another function pass needing this structure of type A to make some transformations. I used </div><div class=""><br class=""></div><div class=""><div class=""> bool secondPass::doInitialization(Module &M) {</div><div class="">   errs() << "now running secondPass\n";</div><div class="">   a = getAnalysis<firstPass>().getA();</div></div></div></div></blockquote><div><br class=""></div><div>You probably shouldn't call getAnalysis in doInitialization. doInitialization, according to the document, “is designed to do simple stuff <b class="">not depend on</b> the functions begin processed”.</div><div>You should call getAnalysis in runOnFunction.</div><div><br class=""></div><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><div class="">   </div><div class="">      return false;</div><div class="">    }</div></div><div class=""><br class=""></div><div class=""><div class="">void secondPass::getAnalysisUsage(AnalysisUsage &AU) const {</div><div class="">    AU.addRequired<firstPass>();</div><div class="">    AU.setPreservesAll();</div><div class="">  }</div></div><div class=""><br class=""></div><div class="">the whole code compiles fine. But I get  seg. fault when printing this structure at the end of my first pass <b class="">if I call my second pass since B* is null.</b></div></div></div></blockquote><div><br class=""></div><div>Have you checked(set a breakpoint for example) to see if firstPass::runOnFunction is executed?</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><b class=""><br class=""></b></div><div class="">How should I wrap this data structure and pass it to the second pass without issues?</div><div class=""><br class=""></div><div class="">Thanks in advance.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div></div></div></blockquote><div><br class=""></div><div>Best,</div><div>Bekket</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br clear="all" class=""><div class=""><br class=""></div>-- <br class=""><div dir="ltr" class="gmail-m_1429865893354771550gmail-m_4071220846525367220m_-4042106761263112623m_-1295060548708917408gmail_signature"><div dir="ltr" class="">Buse</div></div></div></div>
_______________________________________________<br class="">LLVM Developers mailing list<br class=""><a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev<br class=""></div></blockquote></div><br class=""></body></html>