<div dir="ltr">Hello all,<div><br></div><div>I've followed the example in <a href="https://github.com/CompilerTeaching/SimplePass/blob/master/SimplePass.cc">https://github.com/CompilerTeaching/SimplePass/blob/master/SimplePass.cc</a> in order to create a custom pass.</div><div><br></div><div>The pass needs to be added before any transformation, so I used EP_EarlyAsPossible extension point to register it.  Furthermore, I need to access to every GlobalVariable in the IR, so my pass has to be a ModulePass, like this:</div><div><br></div><div>  struct MyPass : public ModulePass {</div><div>     static char ID;<br></div><div><div>     MyPass(): ModulePass(ID) {}</div></div><div>     virtual bool runOnModule(Module &M) {...}<br></div><div>  ...</div><div>  }</div><div><br></div><div>However, every time I try to access to the Module object M inside runOnModule(), clang just crashes.  Even a debug message like <b>outs() << M.getName() << '\n';</b> would cause a segfault. So am I doing something wrong, like EP_EarlyAsPossible is really not to be used with ModulePasses, or is this rather a bug?</div><div><br></div><div>In case this is not a bug, what would be the best way to manipulate an IR Module as it is coming right out of the frontend?</div><div><br></div><div>Thanks for your help,</div><div><br></div><div><div><div class="gmail_signature"><div dir="ltr">Son Tuan Vu</div></div></div>
</div></div>