svf-tools 1.0.361 → 1.0.362

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1680,32 +1680,33 @@ Additional Inherited Members</h2></td></tr>
1680
1680
 
1681
1681
  <p>update <a class="el" href="classSVF_1_1ICFG.html">ICFG</a> for indirect calls </p>
1682
1682
  <p>Update <a class="el" href="classSVF_1_1ICFG.html">ICFG</a> for indirect calls </p>
1683
- <p>if this is an external function (no function body), connect calleeEntryNode to calleeExitNode</p>
1683
+ <p>if this is an external function (no function body or specified in ExAPI.cpp)</p>
1684
+ <p>otherwise connect interprocedural edges</p>
1684
1685
  <p>Remove callBlockNode to retBlockNode intraICFGEdge since we found at least one inter procedural edge </p>
1685
1686
 
1686
1687
  <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00426">426</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
1687
- <div class="fragment"><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;{</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; PTACallGraph::CallEdgeMap::const_iterator iter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().begin();</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; PTACallGraph::CallEdgeMap::const_iterator eiter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().end();</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">for</span> (; iter != eiter; iter++)</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlock = iter-&gt;first;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* cs = callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>();</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#aa11226a2e4fa6a7b1d78006cc8ca0518">isIndirectCall</a>() &amp;&amp; <span class="stringliteral">&quot;this is not an indirect call?&quot;</span>);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a> &amp; functions = iter-&gt;second;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">for</span> (PTACallGraph::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee = *func_iter;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = <a class="code" href="classSVF_1_1ICFG.html#adc66b547720b9271e6805edea0b9d01f">getCallICFGNode</a>(cs);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = <a class="code" href="classSVF_1_1ICFG.html#a66cb50d8c176f800f06d9cb8924eb896">getRetICFGNode</a>(cs);</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* calleeEntryNode = <a class="code" href="classSVF_1_1ICFG.html#acc261924103bd0c357acd3acfa6cf38a">getFunEntryBlock</a>(callee);</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* calleeExitNode = <a class="code" href="classSVF_1_1ICFG.html#a22d7f37a0cb2df90f73c1f2e3eaa71c6">getFunExitBlock</a>(callee);</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <a class="code" href="classSVF_1_1ICFG.html#abde033687317d47909ee45db7501723f">addCallEdge</a>(callBlockNode, calleeEntryNode, cs);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <a class="code" href="classSVF_1_1ICFG.html#a4a44849b596c89ab14d2e5f18366e848">addRetEdge</a>(calleeExitNode, retBlockNode, cs);</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(callee))</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <a class="code" href="classSVF_1_1ICFG.html#adafd8bbb91507a9a78a3f16305812afc">addIntraEdge</a>(calleeEntryNode, calleeExitNode); </div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = <a class="code" href="classSVF_1_1ICFG.html#aa662baae5682ef6ec5084fa4147c9709">hasIntraICFGEdge</a>(callBlockNode,retBlockNode, <a class="code" href="classSVF_1_1ICFGEdge.html#a395c34788e98950bc43e8cb44313e429acb8fba7c61b08ec952f1b65643d7a84b">ICFGEdge::IntraCF</a>))</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <a class="code" href="classSVF_1_1ICFG.html#a534625b10673efe5b0f344bfebf9b3cf">removeICFGEdge</a>(edge);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; }</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; }</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="comment">// dump ICFG</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#aea29a835c54fab800117e57de00e0b1e">Options::DumpICFG</a>){</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <a class="code" href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">dump</a>(<span class="stringliteral">&quot;icfg_final&quot;</span>);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; }</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;}</div><div class="ttc" id="classSVF_1_1ICFG_html_abde033687317d47909ee45db7501723f"><div class="ttname"><a href="classSVF_1_1ICFG.html#abde033687317d47909ee45db7501723f">SVF::ICFG::addCallEdge</a></div><div class="ttdeci">ICFGEdge * addCallEdge(ICFGNode *srcNode, ICFGNode *dstNode, const Instruction *cs)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00375">ICFG.cpp:375</a></div></div>
1688
+ <div class="fragment"><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;{</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; PTACallGraph::CallEdgeMap::const_iterator iter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().begin();</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; PTACallGraph::CallEdgeMap::const_iterator eiter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().end();</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">for</span> (; iter != eiter; iter++)</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlock = iter-&gt;first;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* cs = callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>();</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#aa11226a2e4fa6a7b1d78006cc8ca0518">isIndirectCall</a>() &amp;&amp; <span class="stringliteral">&quot;this is not an indirect call?&quot;</span>);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a> &amp; functions = iter-&gt;second;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">for</span> (PTACallGraph::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee = *func_iter;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callICFGNode = <a class="code" href="classSVF_1_1ICFG.html#adc66b547720b9271e6805edea0b9d01f">getCallICFGNode</a>(cs);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = <a class="code" href="classSVF_1_1ICFG.html#a66cb50d8c176f800f06d9cb8924eb896">getRetICFGNode</a>(cs);</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(callee))</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <a class="code" href="classSVF_1_1ICFG.html#adafd8bbb91507a9a78a3f16305812afc">addIntraEdge</a>(callICFGNode, retBlockNode); </div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; {</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* calleeEntryNode = <a class="code" href="classSVF_1_1ICFG.html#a0dca4655c2f6112a5be1f921b8e81076">getFunEntryICFGNode</a>(callee);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* calleeExitNode = <a class="code" href="classSVF_1_1ICFG.html#af1b2d2839f811a00103df87342dfc919">getFunExitICFGNode</a>(callee);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <a class="code" href="classSVF_1_1ICFG.html#abde033687317d47909ee45db7501723f">addCallEdge</a>(callICFGNode, calleeEntryNode, cs);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <a class="code" href="classSVF_1_1ICFG.html#a4a44849b596c89ab14d2e5f18366e848">addRetEdge</a>(calleeExitNode, retBlockNode, cs);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = <a class="code" href="classSVF_1_1ICFG.html#aa662baae5682ef6ec5084fa4147c9709">hasIntraICFGEdge</a>(callICFGNode,retBlockNode, <a class="code" href="classSVF_1_1ICFGEdge.html#a395c34788e98950bc43e8cb44313e429acb8fba7c61b08ec952f1b65643d7a84b">ICFGEdge::IntraCF</a>))</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <a class="code" href="classSVF_1_1ICFG.html#a534625b10673efe5b0f344bfebf9b3cf">removeICFGEdge</a>(edge);</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; }</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="comment">// dump ICFG</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#aea29a835c54fab800117e57de00e0b1e">Options::DumpICFG</a>){</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <a class="code" href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">dump</a>(<span class="stringliteral">&quot;icfg_final&quot;</span>);</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; }</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;}</div><div class="ttc" id="classSVF_1_1ICFG_html_abde033687317d47909ee45db7501723f"><div class="ttname"><a href="classSVF_1_1ICFG.html#abde033687317d47909ee45db7501723f">SVF::ICFG::addCallEdge</a></div><div class="ttdeci">ICFGEdge * addCallEdge(ICFGNode *srcNode, ICFGNode *dstNode, const Instruction *cs)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00375">ICFG.cpp:375</a></div></div>
1688
1689
  <div class="ttc" id="classSVF_1_1ICFGEdge_html"><div class="ttname"><a href="classSVF_1_1ICFGEdge.html">SVF::ICFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00042">ICFGEdge.h:42</a></div></div>
1689
1690
  <div class="ttc" id="classSVF_1_1PTACallGraph_html_ad49fa2a288945f6910deb11acdf6a42d"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">SVF::PTACallGraph::getIndCallMap</a></div><div class="ttdeci">CallEdgeMap &amp; getIndCallMap()</div><div class="ttdoc">Get callees from an indirect callsite. </div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00280">PTACallGraph.h:280</a></div></div>
1690
1691
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
1691
1692
  <div class="ttc" id="classSVF_1_1PTACallGraph_html_a5f5a5ec7e707a21994d301cc07d32a5a"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">SVF::PTACallGraph::FunctionSet</a></div><div class="ttdeci">Set&lt; const SVFFunction * &gt; FunctionSet</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00228">PTACallGraph.h:228</a></div></div>
1692
1693
  <div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00233">BasicTypes.h:233</a></div></div>
1693
1694
  <div class="ttc" id="classSVF_1_1ICFG_html_a66cb50d8c176f800f06d9cb8924eb896"><div class="ttname"><a href="classSVF_1_1ICFG.html#a66cb50d8c176f800f06d9cb8924eb896">SVF::ICFG::getRetICFGNode</a></div><div class="ttdeci">RetICFGNode * getRetICFGNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00222">ICFG.cpp:222</a></div></div>
1695
+ <div class="ttc" id="classSVF_1_1ICFG_html_af1b2d2839f811a00103df87342dfc919"><div class="ttname"><a href="classSVF_1_1ICFG.html#af1b2d2839f811a00103df87342dfc919">SVF::ICFG::getFunExitICFGNode</a></div><div class="ttdeci">FunExitICFGNode * getFunExitICFGNode(const SVFFunction *fun)</div><div class="ttdoc">Add a function exit node. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00251">ICFG.cpp:251</a></div></div>
1694
1696
  <div class="ttc" id="classSVF_1_1RetICFGNode_html"><div class="ttname"><a href="classSVF_1_1RetICFGNode.html">SVF::RetICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00459">ICFGNode.h:459</a></div></div>
1695
1697
  <div class="ttc" id="classSVF_1_1ICFG_html_adc66b547720b9271e6805edea0b9d01f"><div class="ttname"><a href="classSVF_1_1ICFG.html#adc66b547720b9271e6805edea0b9d01f">SVF::ICFG::getCallICFGNode</a></div><div class="ttdeci">CallICFGNode * getCallICFGNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00209">ICFG.cpp:209</a></div></div>
1696
1698
  <div class="ttc" id="classSVF_1_1FunEntryICFGNode_html"><div class="ttname"><a href="classSVF_1_1FunEntryICFGNode.html">SVF::FunEntryICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00251">ICFGNode.h:251</a></div></div>
1697
- <div class="ttc" id="classSVF_1_1ICFG_html_acc261924103bd0c357acd3acfa6cf38a"><div class="ttname"><a href="classSVF_1_1ICFG.html#acc261924103bd0c357acd3acfa6cf38a">SVF::ICFG::getFunEntryBlock</a></div><div class="ttdeci">FunEntryICFGNode * getFunEntryBlock(const SVFFunction *fun)</div><div class="ttdoc">Get/Add a function entry node. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00203">ICFG.h:203</a></div></div>
1698
1699
  <div class="ttc" id="classSVF_1_1ICFG_html_a534625b10673efe5b0f344bfebf9b3cf"><div class="ttname"><a href="classSVF_1_1ICFG.html#a534625b10673efe5b0f344bfebf9b3cf">SVF::ICFG::removeICFGEdge</a></div><div class="ttdeci">void removeICFGEdge(ICFGEdge *edge)</div><div class="ttdoc">Remove a SVFG edge. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00116">ICFG.h:116</a></div></div>
1699
1700
  <div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00079">BasicTypes.h:79</a></div></div>
1700
1701
  <div class="ttc" id="classSVF_1_1CallICFGNode_html_aa11226a2e4fa6a7b1d78006cc8ca0518"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html#aa11226a2e4fa6a7b1d78006cc8ca0518">SVF::CallICFGNode::isIndirectCall</a></div><div class="ttdeci">bool isIndirectCall() const</div><div class="ttdoc">Return true if this is an indirect call. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00412">ICFGNode.h:412</a></div></div>
1701
1702
  <div class="ttc" id="classSVF_1_1ICFG_html_a4a44849b596c89ab14d2e5f18366e848"><div class="ttname"><a href="classSVF_1_1ICFG.html#a4a44849b596c89ab14d2e5f18366e848">SVF::ICFG::addRetEdge</a></div><div class="ttdeci">ICFGEdge * addRetEdge(ICFGNode *srcNode, ICFGNode *dstNode, const Instruction *cs)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00392">ICFG.cpp:392</a></div></div>
1702
1703
  <div class="ttc" id="classSVF_1_1ICFGEdge_html_a395c34788e98950bc43e8cb44313e429acb8fba7c61b08ec952f1b65643d7a84b"><div class="ttname"><a href="classSVF_1_1ICFGEdge.html#a395c34788e98950bc43e8cb44313e429acb8fba7c61b08ec952f1b65643d7a84b">SVF::ICFGEdge::IntraCF</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00051">ICFGEdge.h:51</a></div></div>
1703
- <div class="ttc" id="classSVF_1_1ICFG_html_a22d7f37a0cb2df90f73c1f2e3eaa71c6"><div class="ttname"><a href="classSVF_1_1ICFG.html#a22d7f37a0cb2df90f73c1f2e3eaa71c6">SVF::ICFG::getFunExitBlock</a></div><div class="ttdeci">FunExitICFGNode * getFunExitBlock(const SVFFunction *fun)</div><div class="ttdoc">Get/Add a function exit node. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00219">ICFG.h:219</a></div></div>
1704
1704
  <div class="ttc" id="classSVF_1_1ICFG_html_a999956500bbd605326531480546db9ba"><div class="ttname"><a href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">SVF::ICFG::dump</a></div><div class="ttdeci">void dump(const std::string &amp;file, bool simple=false)</div><div class="ttdoc">Dump graph into dot file. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00410">ICFG.cpp:410</a></div></div>
1705
1705
  <div class="ttc" id="classSVF_1_1CallICFGNode_html_a674753d5ca0fbe28674acb25291f2bcf"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">SVF::CallICFGNode::getCallSite</a></div><div class="ttdeci">const Instruction * getCallSite() const</div><div class="ttdoc">Return callsite. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00381">ICFGNode.h:381</a></div></div>
1706
1706
  <div class="ttc" id="classSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
1707
1707
  <div class="ttc" id="classSVF_1_1Options_html_aea29a835c54fab800117e57de00e0b1e"><div class="ttname"><a href="classSVF_1_1Options.html#aea29a835c54fab800117e57de00e0b1e">SVF::Options::DumpICFG</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; DumpICFG</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00135">Options.h:135</a></div></div>
1708
1708
  <div class="ttc" id="classSVF_1_1ICFG_html_aa662baae5682ef6ec5084fa4147c9709"><div class="ttname"><a href="classSVF_1_1ICFG.html#aa662baae5682ef6ec5084fa4147c9709">SVF::ICFG::hasIntraICFGEdge</a></div><div class="ttdeci">ICFGEdge * hasIntraICFGEdge(ICFGNode *src, ICFGNode *dst, ICFGEdge::ICFGEdgeK kind)</div><div class="ttdoc">Whether we has a SVFG edge. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00263">ICFG.cpp:263</a></div></div>
1709
+ <div class="ttc" id="classSVF_1_1ICFG_html_a0dca4655c2f6112a5be1f921b8e81076"><div class="ttname"><a href="classSVF_1_1ICFG.html#a0dca4655c2f6112a5be1f921b8e81076">SVF::ICFG::getFunEntryICFGNode</a></div><div class="ttdeci">FunEntryICFGNode * getFunEntryICFGNode(const SVFFunction *fun)</div><div class="ttdoc">Add a function entry node. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00242">ICFG.cpp:242</a></div></div>
1709
1710
  <div class="ttc" id="classSVF_1_1FunExitICFGNode_html"><div class="ttname"><a href="classSVF_1_1FunExitICFGNode.html">SVF::FunExitICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00308">ICFGNode.h:308</a></div></div>
1710
1711
  <div class="ttc" id="classSVF_1_1ICFG_html_adafd8bbb91507a9a78a3f16305812afc"><div class="ttname"><a href="classSVF_1_1ICFG.html#adafd8bbb91507a9a78a3f16305812afc">SVF::ICFG::addIntraEdge</a></div><div class="ttdeci">ICFGEdge * addIntraEdge(ICFGNode *srcNode, ICFGNode *dstNode)</div><div class="ttdoc">Add control-flow edges for top level pointers. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00337">ICFG.cpp:337</a></div></div>
1711
1712
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a22ef185e767ff76c098e75126c885400"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVF::SVFUtil::isExtCall</a></div><div class="ttdeci">bool isExtCall(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00063">LLVMUtil.h:63</a></div></div>
@@ -251,7 +251,7 @@ Private Attributes</h2></td></tr>
251
251
  <p>indirect call (don't know callee) </p>
252
252
 
253
253
  <p class="definition">Definition at line <a class="el" href="ICFGBuilder_8cpp_source.html#l00172">172</a> of file <a class="el" href="ICFGBuilder_8cpp_source.html">ICFGBuilder.cpp</a>.</p>
254
- <div class="fragment"><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;{</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> = <a class="code" href="classSVF_1_1ICFGBuilder.html#a702a888f2175dd32e2467bff27385e02">getCallICFGNode</a>(cs);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = <a class="code" href="classSVF_1_1ICFGBuilder.html#a7c1125c992eec20e118e6bfc12cb8bfb">getRetICFGNode</a>(cs);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">if</span>(callee){</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(callee))</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="classSVF_1_1ICFGBuilder.html#adefeaad9c02000f263430dfee7149ea6">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#adafd8bbb91507a9a78a3f16305812afc">addIntraEdge</a>(CallICFGNode, retBlockNode); </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* calleeEntryNode = <a class="code" href="classSVF_1_1ICFGBuilder.html#adefeaad9c02000f263430dfee7149ea6">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#a0dca4655c2f6112a5be1f921b8e81076">getFunEntryICFGNode</a>(callee);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* calleeExitNode = <a class="code" href="classSVF_1_1ICFGBuilder.html#adefeaad9c02000f263430dfee7149ea6">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#af1b2d2839f811a00103df87342dfc919">getFunExitICFGNode</a>(callee);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="classSVF_1_1ICFGBuilder.html#adefeaad9c02000f263430dfee7149ea6">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#abde033687317d47909ee45db7501723f">addCallEdge</a>(CallICFGNode, calleeEntryNode, cs);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="classSVF_1_1ICFGBuilder.html#adefeaad9c02000f263430dfee7149ea6">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#a4a44849b596c89ab14d2e5f18366e848">addRetEdge</a>(calleeExitNode, retBlockNode, cs);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <a class="code" href="classSVF_1_1ICFGBuilder.html#adefeaad9c02000f263430dfee7149ea6">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#adafd8bbb91507a9a78a3f16305812afc">addIntraEdge</a>(CallICFGNode, retBlockNode); </div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;}</div><div class="ttc" id="classSVF_1_1ICFG_html_abde033687317d47909ee45db7501723f"><div class="ttname"><a href="classSVF_1_1ICFG.html#abde033687317d47909ee45db7501723f">SVF::ICFG::addCallEdge</a></div><div class="ttdeci">ICFGEdge * addCallEdge(ICFGNode *srcNode, ICFGNode *dstNode, const Instruction *cs)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00375">ICFG.cpp:375</a></div></div>
254
+ <div class="fragment"><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;{</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callICFGNode = <a class="code" href="classSVF_1_1ICFGBuilder.html#a702a888f2175dd32e2467bff27385e02">getCallICFGNode</a>(cs);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = <a class="code" href="classSVF_1_1ICFGBuilder.html#a7c1125c992eec20e118e6bfc12cb8bfb">getRetICFGNode</a>(cs);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">if</span>(callee){</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(callee))</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="classSVF_1_1ICFGBuilder.html#adefeaad9c02000f263430dfee7149ea6">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#adafd8bbb91507a9a78a3f16305812afc">addIntraEdge</a>(callICFGNode, retBlockNode); </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* calleeEntryNode = <a class="code" href="classSVF_1_1ICFGBuilder.html#adefeaad9c02000f263430dfee7149ea6">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#a0dca4655c2f6112a5be1f921b8e81076">getFunEntryICFGNode</a>(callee);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* calleeExitNode = <a class="code" href="classSVF_1_1ICFGBuilder.html#adefeaad9c02000f263430dfee7149ea6">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#af1b2d2839f811a00103df87342dfc919">getFunExitICFGNode</a>(callee);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="classSVF_1_1ICFGBuilder.html#adefeaad9c02000f263430dfee7149ea6">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#abde033687317d47909ee45db7501723f">addCallEdge</a>(callICFGNode, calleeEntryNode, cs);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="classSVF_1_1ICFGBuilder.html#adefeaad9c02000f263430dfee7149ea6">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#a4a44849b596c89ab14d2e5f18366e848">addRetEdge</a>(calleeExitNode, retBlockNode, cs);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <a class="code" href="classSVF_1_1ICFGBuilder.html#adefeaad9c02000f263430dfee7149ea6">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#adafd8bbb91507a9a78a3f16305812afc">addIntraEdge</a>(callICFGNode, retBlockNode); </div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;}</div><div class="ttc" id="classSVF_1_1ICFG_html_abde033687317d47909ee45db7501723f"><div class="ttname"><a href="classSVF_1_1ICFG.html#abde033687317d47909ee45db7501723f">SVF::ICFG::addCallEdge</a></div><div class="ttdeci">ICFGEdge * addCallEdge(ICFGNode *srcNode, ICFGNode *dstNode, const Instruction *cs)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00375">ICFG.cpp:375</a></div></div>
255
255
  <div class="ttc" id="classSVF_1_1ICFGBuilder_html_a7c1125c992eec20e118e6bfc12cb8bfb"><div class="ttname"><a href="classSVF_1_1ICFGBuilder.html#a7c1125c992eec20e118e6bfc12cb8bfb">SVF::ICFGBuilder::getRetICFGNode</a></div><div class="ttdeci">RetICFGNode * getRetICFGNode(const Instruction *cs)</div><div class="ttdoc">Add a return node. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGBuilder_8h_source.html#l00092">ICFGBuilder.h:92</a></div></div>
256
256
  <div class="ttc" id="classSVF_1_1ICFG_html_af1b2d2839f811a00103df87342dfc919"><div class="ttname"><a href="classSVF_1_1ICFG.html#af1b2d2839f811a00103df87342dfc919">SVF::ICFG::getFunExitICFGNode</a></div><div class="ttdeci">FunExitICFGNode * getFunExitICFGNode(const SVFFunction *fun)</div><div class="ttdoc">Add a function exit node. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00251">ICFG.cpp:251</a></div></div>
257
257
  <div class="ttc" id="classSVF_1_1RetICFGNode_html"><div class="ttname"><a href="classSVF_1_1RetICFGNode.html">SVF::RetICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00459">ICFGNode.h:459</a></div></div>
@@ -114,7 +114,7 @@ Static Public Member Functions</h2></td></tr>
114
114
  struct llvm::DOTGraphTraits&lt; ICFG * &gt;</h3>
115
115
 
116
116
 
117
- <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00467">467</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
117
+ <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00472">472</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
118
118
  </div><h2 class="groupheader">Member Typedef Documentation</h2>
119
119
  <a id="a7ef3894da60c3e3350b8d2de3e94a562"></a>
120
120
  <h2 class="memtitle"><span class="permalink"><a href="#a7ef3894da60c3e3350b8d2de3e94a562">&#9670;&nbsp;</a></span>NodeType</h2>
@@ -128,7 +128,7 @@ struct llvm::DOTGraphTraits&lt; ICFG * &gt;</h3>
128
128
  </table>
129
129
  </div><div class="memdoc">
130
130
 
131
- <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00470">470</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
131
+ <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00475">475</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
132
132
 
133
133
  </div>
134
134
  </div>
@@ -157,8 +157,8 @@ struct llvm::DOTGraphTraits&lt; ICFG * &gt;</h3>
157
157
  </table>
158
158
  </div><div class="memdoc">
159
159
 
160
- <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00471">471</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
161
- <div class="fragment"><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; :</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; DOTGraphTraits&lt;SVFIR*&gt;(isSimple)</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; {</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; }</div></div><!-- fragment -->
160
+ <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00476">476</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
161
+ <div class="fragment"><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; :</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; DOTGraphTraits&lt;SVFIR*&gt;(isSimple)</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; {</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; }</div></div><!-- fragment -->
162
162
  </div>
163
163
  </div>
164
164
  <h2 class="groupheader">Member Function Documentation</h2>
@@ -204,8 +204,8 @@ template&lt;class EdgeIter &gt; </div>
204
204
  </table>
205
205
  </div><div class="memdoc">
206
206
 
207
- <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00577">577</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
208
- <div class="fragment"><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; {</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = *(EI.getCurrent());</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge &amp;&amp; <span class="stringliteral">&quot;No edge found!!&quot;</span>);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;CallCFGEdge&gt;(edge))</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;style=solid,color=red&quot;</span>;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;RetCFGEdge&gt;(edge))</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;style=solid,color=blue&quot;</span>;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;style=solid&quot;</span>;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; }</div><div class="ttc" id="classSVF_1_1ICFGEdge_html"><div class="ttname"><a href="classSVF_1_1ICFGEdge.html">SVF::ICFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00042">ICFGEdge.h:42</a></div></div>
207
+ <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00582">582</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
208
+ <div class="fragment"><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; {</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = *(EI.getCurrent());</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge &amp;&amp; <span class="stringliteral">&quot;No edge found!!&quot;</span>);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;CallCFGEdge&gt;(edge))</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;style=solid,color=red&quot;</span>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;RetCFGEdge&gt;(edge))</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;style=solid,color=blue&quot;</span>;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;style=solid&quot;</span>;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; }</div><div class="ttc" id="classSVF_1_1ICFGEdge_html"><div class="ttname"><a href="classSVF_1_1ICFGEdge.html">SVF::ICFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00042">ICFGEdge.h:42</a></div></div>
209
209
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
210
210
  </div><!-- fragment -->
211
211
  </div>
@@ -246,8 +246,8 @@ template&lt;class EdgeIter &gt; </div>
246
246
  </table>
247
247
  </div><div class="memdoc">
248
248
 
249
- <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00591">591</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
250
- <div class="fragment"><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; {</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = *(EI.getCurrent());</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge &amp;&amp; <span class="stringliteral">&quot;No edge found!!&quot;</span>);</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; std::string str;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1CallCFGEdge.html">CallCFGEdge</a>* dirCall = SVFUtil::dyn_cast&lt;CallCFGEdge&gt;(edge))</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; rawstr &lt;&lt; dirCall-&gt;getCallSite();</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1RetCFGEdge.html">RetCFGEdge</a>* dirRet = SVFUtil::dyn_cast&lt;RetCFGEdge&gt;(edge))</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; rawstr &lt;&lt; dirRet-&gt;getCallSite();</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; }</div><div class="ttc" id="classSVF_1_1ICFGEdge_html"><div class="ttname"><a href="classSVF_1_1ICFGEdge.html">SVF::ICFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00042">ICFGEdge.h:42</a></div></div>
249
+ <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00596">596</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
250
+ <div class="fragment"><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; {</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = *(EI.getCurrent());</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge &amp;&amp; <span class="stringliteral">&quot;No edge found!!&quot;</span>);</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; std::string str;</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1CallCFGEdge.html">CallCFGEdge</a>* dirCall = SVFUtil::dyn_cast&lt;CallCFGEdge&gt;(edge))</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; rawstr &lt;&lt; dirCall-&gt;getCallSite();</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1RetCFGEdge.html">RetCFGEdge</a>* dirRet = SVFUtil::dyn_cast&lt;RetCFGEdge&gt;(edge))</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; rawstr &lt;&lt; dirRet-&gt;getCallSite();</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; }</div><div class="ttc" id="classSVF_1_1ICFGEdge_html"><div class="ttname"><a href="classSVF_1_1ICFGEdge.html">SVF::ICFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00042">ICFGEdge.h:42</a></div></div>
251
251
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
252
252
  <div class="ttc" id="classSVF_1_1CallCFGEdge_html"><div class="ttname"><a href="classSVF_1_1CallCFGEdge.html">SVF::CallCFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00162">ICFGEdge.h:162</a></div></div>
253
253
  <div class="ttc" id="namespaceSVF_html_a726981481ac082dcda3e4921416b65a0"><div class="ttname"><a href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">SVF::raw_string_ostream</a></div><div class="ttdeci">llvm::raw_string_ostream raw_string_ostream</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
@@ -281,8 +281,8 @@ template&lt;class EdgeIter &gt; </div>
281
281
 
282
282
  <p>Return name of the graph. </p>
283
283
 
284
- <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00477">477</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
285
- <div class="fragment"><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; {</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ICFG&quot;</span>;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; }</div></div><!-- fragment -->
284
+ <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00482">482</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
285
+ <div class="fragment"><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ICFG&quot;</span>;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; }</div></div><!-- fragment -->
286
286
  </div>
287
287
  </div>
288
288
  <a id="aef77eaa614a202f39964d0a0917b5140"></a>
@@ -319,8 +319,8 @@ template&lt;class EdgeIter &gt; </div>
319
319
  </table>
320
320
  </div><div class="memdoc">
321
321
 
322
- <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00539">539</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
323
- <div class="fragment"><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; {</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; std::string str;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;IntraICFGNode&gt;(node))</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; {</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;color=black&quot;</span>;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; }</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;FunEntryICFGNode&gt;(node))</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; {</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;color=yellow&quot;</span>;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; }</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;FunExitICFGNode&gt;(node))</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; {</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;color=green&quot;</span>;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;CallICFGNode&gt;(node))</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;color=red&quot;</span>;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;RetICFGNode&gt;(node))</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; {</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;color=blue&quot;</span>;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; }</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;GlobalICFGNode&gt;(node))</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; {</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;color=purple&quot;</span>;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; }</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;no such kind of node!!&quot;</span>);</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; }</div><div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
322
+ <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00544">544</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
323
+ <div class="fragment"><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; {</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; std::string str;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;IntraICFGNode&gt;(node))</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;color=black&quot;</span>;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; }</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;FunEntryICFGNode&gt;(node))</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; {</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;color=yellow&quot;</span>;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; }</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;FunExitICFGNode&gt;(node))</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; {</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;color=green&quot;</span>;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; }</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;CallICFGNode&gt;(node))</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;color=red&quot;</span>;</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; }</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;RetICFGNode&gt;(node))</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;color=blue&quot;</span>;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; }</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;GlobalICFGNode&gt;(node))</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; {</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;color=purple&quot;</span>;</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; }</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;no such kind of node!!&quot;</span>);</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; }</div><div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
324
324
  <div class="ttc" id="namespaceSVF_html_a726981481ac082dcda3e4921416b65a0"><div class="ttname"><a href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">SVF::raw_string_ostream</a></div><div class="ttdeci">llvm::raw_string_ostream raw_string_ostream</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
325
325
  </div><!-- fragment -->
326
326
  </div>
@@ -359,8 +359,8 @@ template&lt;class EdgeIter &gt; </div>
359
359
  </table>
360
360
  </div><div class="memdoc">
361
361
 
362
- <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00482">482</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
363
- <div class="fragment"><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">return</span> getSimpleNodeLabel(node, graph);</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; }</div></div><!-- fragment -->
362
+ <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00487">487</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
363
+ <div class="fragment"><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">return</span> getSimpleNodeLabel(node, graph);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div></div><!-- fragment -->
364
364
  </div>
365
365
  </div>
366
366
  <a id="a1cf0470d3e9821152416e3bf5236e553"></a>
@@ -399,8 +399,8 @@ template&lt;class EdgeIter &gt; </div>
399
399
 
400
400
  <p>Return the label of an ICFG node. </p>
401
401
 
402
- <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00488">488</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
403
- <div class="fragment"><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; std::string str;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;NodeID: &quot;</span> &lt;&lt; node-&gt;getId() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1IntraICFGNode.html">IntraICFGNode</a>* bNode = SVFUtil::dyn_cast&lt;IntraICFGNode&gt;(node))</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; {</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;IntraICFGNode ID: &quot;</span> &lt;&lt; bNode-&gt;getId() &lt;&lt; <span class="stringliteral">&quot; \t&quot;</span>;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVFIR::SVFStmtList</a>&amp; edges = SVFIR::getPAG()-&gt;getSVFStmtList(bNode);</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">if</span> (edges.empty()) {</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; rawstr &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(bNode-&gt;getInst()) &lt;&lt; <span class="stringliteral">&quot; \t&quot;</span>;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">for</span> (SVFIR::SVFStmtList::iterator it = edges.begin(), eit = edges.end(); it != eit; ++it)</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; {</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *it;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; rawstr &lt;&lt; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#ad0b4dbe87e009518f22360c48b0d0c22">toString</a>();</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; }</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; }</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; {fun: &quot;</span> &lt;&lt; bNode-&gt;getFun()-&gt;getName() &lt;&lt; <span class="stringliteral">&quot;}&quot;</span>;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* <a class="code" href="cuddInt_8c.html#a936a27e51e66afb57c2b3a12d78a238e">entry</a> = SVFUtil::dyn_cast&lt;FunEntryICFGNode&gt;(node))</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; {</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; rawstr &lt;&lt; <a class="code" href="cuddInt_8c.html#a936a27e51e66afb57c2b3a12d78a238e">entry</a>-&gt;toString();</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* <a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a> = SVFUtil::dyn_cast&lt;FunExitICFGNode&gt;(node))</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; {</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; rawstr &lt;&lt; <a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a>-&gt;toString();</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; }</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* call = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(node))</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; rawstr &lt;&lt; call-&gt;toString();</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* ret = SVFUtil::dyn_cast&lt;RetICFGNode&gt;(node))</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; {</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; rawstr &lt;&lt; ret-&gt;toString();</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; }</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GlobalICFGNode.html">GlobalICFGNode</a>* glob = SVFUtil::dyn_cast&lt;GlobalICFGNode&gt;(node) )</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; {</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVFIR::SVFStmtList</a>&amp; edges = SVFIR::getPAG()-&gt;getSVFStmtList(glob);</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">for</span> (SVFIR::SVFStmtList::iterator it = edges.begin(), eit = edges.end(); it != eit; ++it)</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; {</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *it;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; rawstr &lt;&lt; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#ad0b4dbe87e009518f22360c48b0d0c22">toString</a>();</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; }</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;what else kinds of nodes do we have??&quot;</span>);</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; }</div><div class="ttc" id="util_8h_html_a43b6ea6be735bb828bc062c70cadeff8"><div class="ttname"><a href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a></div><div class="ttdeci">VOID_OR_INT exit()</div></div>
402
+ <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00493">493</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
403
+ <div class="fragment"><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; {</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; std::string str;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;NodeID: &quot;</span> &lt;&lt; node-&gt;getId() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1IntraICFGNode.html">IntraICFGNode</a>* bNode = SVFUtil::dyn_cast&lt;IntraICFGNode&gt;(node))</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; {</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;IntraICFGNode ID: &quot;</span> &lt;&lt; bNode-&gt;getId() &lt;&lt; <span class="stringliteral">&quot; \t&quot;</span>;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVFIR::SVFStmtList</a>&amp; edges = SVFIR::getPAG()-&gt;getSVFStmtList(bNode);</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">if</span> (edges.empty()) {</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; rawstr &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(bNode-&gt;getInst()) &lt;&lt; <span class="stringliteral">&quot; \t&quot;</span>;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">for</span> (SVFIR::SVFStmtList::iterator it = edges.begin(), eit = edges.end(); it != eit; ++it)</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; {</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *it;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; rawstr &lt;&lt; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#ad0b4dbe87e009518f22360c48b0d0c22">toString</a>();</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; {fun: &quot;</span> &lt;&lt; bNode-&gt;getFun()-&gt;getName() &lt;&lt; <span class="stringliteral">&quot;}&quot;</span>;</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; }</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* <a class="code" href="cuddInt_8c.html#a936a27e51e66afb57c2b3a12d78a238e">entry</a> = SVFUtil::dyn_cast&lt;FunEntryICFGNode&gt;(node))</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; rawstr &lt;&lt; <a class="code" href="cuddInt_8c.html#a936a27e51e66afb57c2b3a12d78a238e">entry</a>-&gt;toString();</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; }</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* <a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a> = SVFUtil::dyn_cast&lt;FunExitICFGNode&gt;(node))</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; {</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; rawstr &lt;&lt; <a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a>-&gt;toString();</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; }</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* call = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(node))</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; {</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; rawstr &lt;&lt; call-&gt;toString();</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; }</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* ret = SVFUtil::dyn_cast&lt;RetICFGNode&gt;(node))</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; {</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; rawstr &lt;&lt; ret-&gt;toString();</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; }</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GlobalICFGNode.html">GlobalICFGNode</a>* glob = SVFUtil::dyn_cast&lt;GlobalICFGNode&gt;(node) )</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; {</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVFIR::SVFStmtList</a>&amp; edges = SVFIR::getPAG()-&gt;getSVFStmtList(glob);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">for</span> (SVFIR::SVFStmtList::iterator it = edges.begin(), eit = edges.end(); it != eit; ++it)</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *it;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; rawstr &lt;&lt; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#ad0b4dbe87e009518f22360c48b0d0c22">toString</a>();</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; }</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; }</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;what else kinds of nodes do we have??&quot;</span>);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; }</div><div class="ttc" id="util_8h_html_a43b6ea6be735bb828bc062c70cadeff8"><div class="ttname"><a href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a></div><div class="ttdeci">VOID_OR_INT exit()</div></div>
404
404
  <div class="ttc" id="classSVF_1_1SVFIR_html_a6bc360d2604ae4a0af74530b263b10d9"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVF::SVFIR::SVFStmtList</a></div><div class="ttdeci">std::vector&lt; const SVFStmt * &gt; SVFStmtList</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00056">SVFIR.h:56</a></div></div>
405
405
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
406
406
  <div class="ttc" id="classSVF_1_1SVFStmt_html_ad0b4dbe87e009518f22360c48b0d0c22"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#ad0b4dbe87e009518f22360c48b0d0c22">SVF::SVFStmt::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8cpp_source.html#l00061">SVFStatements.cpp:61</a></div></div>
@@ -436,20 +436,25 @@ void ICFG::updateCallGraph(PTACallGraph* callgraph)
436
436
  for (PTACallGraph::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)
437
437
  {
438
438
  const SVFFunction* callee = *func_iter;
439
- CallICFGNode* callBlockNode = getCallICFGNode(cs);
439
+ CallICFGNode* callICFGNode = getCallICFGNode(cs);
440
440
  RetICFGNode* retBlockNode = getRetICFGNode(cs);
441
- FunEntryICFGNode* calleeEntryNode = getFunEntryBlock(callee);
442
- FunExitICFGNode* calleeExitNode = getFunExitBlock(callee);
443
- addCallEdge(callBlockNode, calleeEntryNode, cs);
444
- addRetEdge(calleeExitNode, retBlockNode, cs);
445
-
446
- /// if this is an external function (no function body), connect calleeEntryNode to calleeExitNode
441
+ /// if this is an external function (no function body or specified in ExAPI.cpp)
447
442
  if (isExtCall(callee))
448
- addIntraEdge(calleeEntryNode, calleeExitNode);
449
-
450
- /// Remove callBlockNode to retBlockNode intraICFGEdge since we found at least one inter procedural edge
451
- if(ICFGEdge* edge = hasIntraICFGEdge(callBlockNode,retBlockNode, ICFGEdge::IntraCF))
452
- removeICFGEdge(edge);
443
+ {
444
+ addIntraEdge(callICFGNode, retBlockNode);
445
+ }
446
+ /// otherwise connect interprocedural edges
447
+ else
448
+ {
449
+ FunEntryICFGNode* calleeEntryNode = getFunEntryICFGNode(callee);
450
+ FunExitICFGNode* calleeExitNode = getFunExitICFGNode(callee);
451
+ addCallEdge(callICFGNode, calleeEntryNode, cs);
452
+ addRetEdge(calleeExitNode, retBlockNode, cs);
453
+
454
+ /// Remove callBlockNode to retBlockNode intraICFGEdge since we found at least one inter procedural edge
455
+ if(ICFGEdge* edge = hasIntraICFGEdge(callICFGNode,retBlockNode, ICFGEdge::IntraCF))
456
+ removeICFGEdge(edge);
457
+ }
453
458
  }
454
459
  }
455
460
  // dump ICFG
@@ -171,7 +171,7 @@ InterICFGNode* ICFGBuilder::getOrAddInterBlockICFGNode(const Instruction* inst)
171
171
  */
172
172
  void ICFGBuilder::addICFGInterEdges(const Instruction* cs, const SVFFunction* callee)
173
173
  {
174
- CallICFGNode* CallICFGNode = getCallICFGNode(cs);
174
+ CallICFGNode* callICFGNode = getCallICFGNode(cs);
175
175
  RetICFGNode* retBlockNode = getRetICFGNode(cs);
176
176
 
177
177
  /// direct call
@@ -179,20 +179,20 @@ void ICFGBuilder::addICFGInterEdges(const Instruction* cs, const SVFFunction* ca
179
179
  /// if this is an external function (no function body)
180
180
  if (isExtCall(callee))
181
181
  {
182
- icfg->addIntraEdge(CallICFGNode, retBlockNode);
182
+ icfg->addIntraEdge(callICFGNode, retBlockNode);
183
183
  }
184
184
  /// otherwise connect interprocedural edges
185
185
  else
186
186
  {
187
187
  FunEntryICFGNode* calleeEntryNode = icfg->getFunEntryICFGNode(callee);
188
188
  FunExitICFGNode* calleeExitNode = icfg->getFunExitICFGNode(callee);
189
- icfg->addCallEdge(CallICFGNode, calleeEntryNode, cs);
189
+ icfg->addCallEdge(callICFGNode, calleeEntryNode, cs);
190
190
  icfg->addRetEdge(calleeExitNode, retBlockNode, cs);
191
191
  }
192
192
  }
193
193
  /// indirect call (don't know callee)
194
194
  else{
195
- icfg->addIntraEdge(CallICFGNode, retBlockNode);
195
+ icfg->addIntraEdge(callICFGNode, retBlockNode);
196
196
  }
197
197
  }
198
198
  /*
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-tools",
3
- "version": "1.0.361",
3
+ "version": "1.0.362",
4
4
  "description": "* <b>[TypeClone](https://github.com/SVF-tools/SVF/wiki/TypeClone) published in our [ECOOP paper](https://yuleisui.github.io/publications/ecoop20.pdf) is now available in SVF </b> * <b>SVF now uses a single script for its build. Just type [`source ./build.sh`](https://github.com/SVF-tools/SVF/blob/master/build.sh) in your terminal, that's it!</b> * <b>SVF now supports LLVM-10.0.0! </b> * <b>We thank [bsauce](https://github.com/bsauce) for writing a user manual of SVF ([link1](https://www.jianshu.com/p/068a08ec749c) and [link2](https://www.jianshu.com/p/777c30d4240e)) in Chinese </b> * <b>SVF now supports LLVM-9.0.0 (Thank [Byoungyoung Lee](https://github.com/SVF-tools/SVF/issues/142) for his help!). </b> * <b>SVF now supports a set of [field-sensitive pointer analyses](https://yuleisui.github.io/publications/sas2019a.pdf). </b> * <b>[Use SVF as an external lib](https://github.com/SVF-tools/SVF/wiki/Using-SVF-as-a-lib-in-your-own-tool) for your own project (Contributed by [Hongxu Chen](https://github.com/HongxuChen)). </b> * <b>SVF now supports LLVM-7.0.0. </b> * <b>SVF now supports Docker. [Try SVF in Docker](https://github.com/SVF-tools/SVF/wiki/Try-SVF-in-Docker)! </b> * <b>SVF now supports [LLVM-6.0.0](https://github.com/svf-tools/SVF/pull/38) (Contributed by [Jack Anthony](https://github.com/jackanth)). </b> * <b>SVF now supports [LLVM-4.0.0](https://github.com/svf-tools/SVF/pull/23) (Contributed by Jared Carlson. Thank [Jared](https://github.com/jcarlson23) and [Will](https://github.com/dtzWill) for their in-depth [discussions](https://github.com/svf-tools/SVF/pull/18) about updating SVF!) </b> * <b>SVF now supports analysis for C++ programs.</b> <br />",
5
5
  "main": "index.js",
6
6
  "scripts": {