<div><font>Hi:</font></div><div><font>I'm trying to implement a custom tool that does Path-Sensitive analysis on a c source code, and lists all calls to a specific C function in the order they'll be called, rooting from main.</font></div><div><font>For such calls found in a loop, we require the loop to be statically reducible and warns the user if this is not the case.</font></div><div><font><br></font></div><div><font>What I've tried so far is to use REGISTER_LIST_WITH_PROGRAMSTATE to create a list of CallExprs, and add the state in checkPreCall, as demonstrated below:</font></div><div><br></div><div>```</div><div><div>void checkPreCall(const CallEvent &msg, CheckerContext &C) const {</div><div>  if (isa<SimpleFunctionCall>(msg)) {</div><div>     // Check Callee is the C function needed</div><div>    const SimpleFunctionCall &sfc = cast<SimpleFunctionCall>(msg);</div><div>    C.addTransition(C.getState()->add<CallList>(sfc.getOriginExpr()));</div><div>  }</div><div>}</div></div><div>```</div><div>Then, in checkEndAnalysis, iterate ExplodedGraph's eops.</div><div><br></div><div>My question is:</div><div>- How do I limit the path being explored to start and end in main() ?</div><div>- How do I detect the function is being called in a irreducible loop?</div><div><br></div><div><font><br></font></div><div><font><br></font></div><div><font><br></font></div><div><includetail><!--<![endif]--></includetail></div>