svf-tools 1.0.364 → 1.0.365

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.
@@ -141,7 +141,7 @@ $(function() {
141
141
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ae714d5f9550b81066fc4071616d46a64"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ae714d5f9550b81066fc4071616d46a64">SVF::SVFIRBuilder::visitCallBrInst</a></div><div class="ttdeci">void visitCallBrInst(CallBrInst &amp;I)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00167">SVFIRBuilder.h:167</a></div></div>
142
142
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a15105737c91d01ba9daf2161fad220ef"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">SVF::SVFIRBuilder::setCurrentLocation</a></div><div class="ttdeci">void setCurrentLocation(const Value *val, const BasicBlock *bb)</div><div class="ttdoc">Set current basic block in order to keep track of control flow information. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00245">SVFIRBuilder.h:245</a></div></div>
143
143
  <div class="ttc" id="classSVF_1_1TDJoinPE_html"><div class="ttname"><a href="classSVF_1_1TDJoinPE.html">SVF::TDJoinPE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l01038">SVFStatements.h:1038</a></div></div>
144
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5c7cc40f0a9c89a8b9c21c65215dda29"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5c7cc40f0a9c89a8b9c21c65215dda29">SVF::SVFIRBuilder::getFields</a></div><div class="ttdeci">u32_t getFields(std::vector&lt; LocationSet &gt; &amp;fields, const Type *T, u32_t msz)</div><div class="ttdoc">Replace fields with flatten fields of T if the number of its fields is larger than msz...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01679">SVFIRBuilder.cpp:1679</a></div></div>
144
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5c7cc40f0a9c89a8b9c21c65215dda29"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5c7cc40f0a9c89a8b9c21c65215dda29">SVF::SVFIRBuilder::getFields</a></div><div class="ttdeci">u32_t getFields(std::vector&lt; LocationSet &gt; &amp;fields, const Type *T, u32_t msz)</div><div class="ttdoc">Replace fields with flatten fields of T if the number of its fields is larger than msz...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01683">SVFIRBuilder.cpp:1683</a></div></div>
145
145
  <div class="ttc" id="classSVF_1_1SVFIR_html_accbff738e77fd2256d4a6629c48d63f4"><div class="ttname"><a href="classSVF_1_1SVFIR.html#accbff738e77fd2256d4a6629c48d63f4">SVF::SVFIR::addSelectStmt</a></div><div class="ttdeci">SelectStmt * addSelectStmt(NodeID res, NodeID op1, NodeID op2, NodeID cond)</div><div class="ttdoc">Add SelectStmt. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00108">SVFIR.cpp:108</a></div></div>
146
146
  <div class="ttc" id="classSVF_1_1IRGraph_html_abffddd41cc308b9b3bd5ad4a7f8f1624"><div class="ttname"><a href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">SVF::IRGraph::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00120">IRGraph.h:120</a></div></div>
147
147
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a0bc35bb64bbf3b494c0ac93b99c5a6d2"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a0bc35bb64bbf3b494c0ac93b99c5a6d2">SVF::SVFIRBuilder::visitLandingPadInst</a></div><div class="ttdeci">void visitLandingPadInst(LandingPadInst &amp;I)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00211">SVFIRBuilder.h:211</a></div></div>
@@ -195,7 +195,7 @@ $(function() {
195
195
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aaff4b288ac5f338fbe5dbc145d4087ba"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aaff4b288ac5f338fbe5dbc145d4087ba">SVF::SVFIRBuilder::addRetEdge</a></div><div class="ttdeci">RetPE * addRetEdge(NodeID src, NodeID dst, const CallICFGNode *cs)</div><div class="ttdoc">Add Return edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00376">SVFIRBuilder.h:376</a></div></div>
196
196
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ac26e0714728df0beca278eb405596775"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ac26e0714728df0beca278eb405596775">SVF::SVFIRBuilder::visitVAArgInst</a></div><div class="ttdeci">void visitVAArgInst(VAArgInst &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00925">SVFIRBuilder.cpp:925</a></div></div>
197
197
  <div class="ttc" id="namespaceSVF_html_a56cb9d6d1e05f6c31bfe1a4045bc8b5f"><div class="ttname"><a href="namespaceSVF.html#a56cb9d6d1e05f6c31bfe1a4045bc8b5f">SVF::InvokeInst</a></div><div class="ttdeci">llvm::InvokeInst InvokeInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00149">BasicTypes.h:149</a></div></div>
198
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a22bd51c6fe770d179867342164ec2767"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a22bd51c6fe770d179867342164ec2767">SVF::SVFIRBuilder::updateCallGraph</a></div><div class="ttdeci">void updateCallGraph(PTACallGraph *callgraph)</div><div class="ttdoc">Update SVFIR given a call graph (creating new CallPE and RetPE for resolved indirect calls) ...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01699">SVFIRBuilder.cpp:1699</a></div></div>
198
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a22bd51c6fe770d179867342164ec2767"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a22bd51c6fe770d179867342164ec2767">SVF::SVFIRBuilder::updateCallGraph</a></div><div class="ttdeci">void updateCallGraph(PTACallGraph *callgraph)</div><div class="ttdoc">Update SVFIR given a call graph (creating new CallPE and RetPE for resolved indirect calls) ...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01703">SVFIRBuilder.cpp:1703</a></div></div>
199
199
  <div class="ttc" id="namespaceSVF_html_a412280b134578905248ce0122c5db7c9"><div class="ttname"><a href="namespaceSVF.html#a412280b134578905248ce0122c5db7c9">SVF::SwitchInst</a></div><div class="ttdeci">llvm::SwitchInst SwitchInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00162">BasicTypes.h:162</a></div></div>
200
200
  <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>
201
201
  <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00069">LLVMModule.h:69</a></div></div>
@@ -1589,7 +1589,7 @@ Private Attributes</h2></td></tr>
1589
1589
  <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>
1590
1590
  <div class="ttc" id="namespaceSVF_html_aa962cc1d782cc46553251e96b64a754b"><div class="ttname"><a href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">SVF::PointerType</a></div><div class="ttdeci">llvm::PointerType PointerType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00108">BasicTypes.h:108</a></div></div>
1591
1591
  <div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
1592
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5c7cc40f0a9c89a8b9c21c65215dda29"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5c7cc40f0a9c89a8b9c21c65215dda29">SVF::SVFIRBuilder::getFields</a></div><div class="ttdeci">u32_t getFields(std::vector&lt; LocationSet &gt; &amp;fields, const Type *T, u32_t msz)</div><div class="ttdoc">Replace fields with flatten fields of T if the number of its fields is larger than msz...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01679">SVFIRBuilder.cpp:1679</a></div></div>
1592
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5c7cc40f0a9c89a8b9c21c65215dda29"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5c7cc40f0a9c89a8b9c21c65215dda29">SVF::SVFIRBuilder::getFields</a></div><div class="ttdeci">u32_t getFields(std::vector&lt; LocationSet &gt; &amp;fields, const Type *T, u32_t msz)</div><div class="ttdoc">Replace fields with flatten fields of T if the number of its fields is larger than msz...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01683">SVFIRBuilder.cpp:1683</a></div></div>
1593
1593
  <div class="ttc" id="classSVF_1_1LocationSet_html"><div class="ttname"><a href="classSVF_1_1LocationSet.html">SVF::LocationSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00072">LocationSet.h:72</a></div></div>
1594
1594
  <div class="ttc" id="namespaceSVF_html_a911dbaab38cb42deb9c195c7f687853d"><div class="ttname"><a href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">SVF::ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00131">BasicTypes.h:131</a></div></div>
1595
1595
  <div class="ttc" id="namespaceSVF_html_afc1b50355821e7299df03b026e36f1df"><div class="ttname"><a href="namespaceSVF.html#afc1b50355821e7299df03b026e36f1df">SVF::User</a></div><div class="ttdeci">llvm::User User</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00086">BasicTypes.h:86</a></div></div>
@@ -1688,8 +1688,8 @@ Private Attributes</h2></td></tr>
1688
1688
  <p>Replace fields with flatten fields of T if the number of its fields is larger than msz. </p>
1689
1689
  <p>Replace fields with T's flatten fields. </p>
1690
1690
 
1691
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01679">1679</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1692
- <div class="fragment"><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160;{</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;PointerType&gt;(T))</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160;</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; T = T-&gt;getContainedType(0);</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; <span class="keyword">const</span> std::vector&lt;FlattenedFieldInfo&gt;&amp; stVec = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0">getFlattenedFieldInfoVec</a>(T);</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sz = stVec.size();</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; <span class="keywordflow">if</span> (msz &lt; sz)</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; {</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160; fields.clear();</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; <span class="keywordflow">for</span>(std::vector&lt;FlattenedFieldInfo&gt;::const_iterator it = stVec.begin(), eit = stVec.end(); it!=eit; ++it)</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160; fields.push_back(<a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(*it));</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; }</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160;</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; <span class="keywordflow">return</span> sz;</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
1691
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01683">1683</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1692
+ <div class="fragment"><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160;{</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;PointerType&gt;(T))</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160;</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; T = T-&gt;getContainedType(0);</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; <span class="keyword">const</span> std::vector&lt;FlattenedFieldInfo&gt;&amp; stVec = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0">getFlattenedFieldInfoVec</a>(T);</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sz = stVec.size();</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; <span class="keywordflow">if</span> (msz &lt; sz)</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160; {</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; fields.clear();</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; <span class="keywordflow">for</span>(std::vector&lt;FlattenedFieldInfo&gt;::const_iterator it = stVec.begin(), eit = stVec.end(); it!=eit; ++it)</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; fields.push_back(<a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(*it));</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; }</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160;</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; <span class="keywordflow">return</span> sz;</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
1693
1693
  <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a267169023fc4f8dd66b145f7231fec11"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SVF::SymbolTableInfo::SymbolInfo</a></div><div class="ttdeci">static SymbolTableInfo * SymbolInfo()</div><div class="ttdoc">Singleton design here to make sure we only have one instance during any analysis. ...</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00101">SymbolTableInfo.cpp:101</a></div></div>
1694
1694
  <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a9ca564bdc1f40a2ccd30d98e0e4075b0"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0">SVF::SymbolTableInfo::getFlattenedFieldInfoVec</a></div><div class="ttdeci">const std::vector&lt; FlattenedFieldInfo &gt; &amp; getFlattenedFieldInfoVec(const Type *T)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00400">SymbolTableInfo.cpp:400</a></div></div>
1695
1695
  <div class="ttc" id="classSVF_1_1LocationSet_html"><div class="ttname"><a href="classSVF_1_1LocationSet.html">SVF::LocationSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00072">LocationSet.h:72</a></div></div>
@@ -2454,10 +2454,11 @@ Private Attributes</h2></td></tr>
2454
2454
  <p>We will have one unique function exit <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> for all returns </p>
2455
2455
 
2456
2456
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01612">1612</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2457
- <div class="fragment"><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;{</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>())</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a> &amp;&amp; <span class="stringliteral">&quot;current Val is nullptr?&quot;</span>);</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a852730edf374d18a3fb3985211ed7623">setBB</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>);</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a24dddb4e346a6e569908e3efe8a6ecc0">setValue</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>);</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160; <span class="comment">// backmap in valuToEdgeMap</span></div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#aefe3143b33cee00c3c2611fea577c1ac">mapValueToEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>, edge);</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ae0b05ce161d62362642803158228e5d0">getGlobalICFGNode</a>();</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *curInst = SVFUtil::dyn_cast&lt;Instruction&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; {</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* srcFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getFunction();</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* dstFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getFunction();</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; <span class="keywordflow">if</span>(srcFun!=<span class="keyword">nullptr</span> &amp;&amp; !SVFUtil::isa&lt;RetPE&gt;(edge) &amp;&amp; !SVFUtil::isa&lt;Function&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getValue())) {</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(srcFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;SrcNode of the PAGEdge not in the same function?&quot;</span>);</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; }</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; <span class="keywordflow">if</span>(dstFun!=<span class="keyword">nullptr</span> &amp;&amp; !SVFUtil::isa&lt;CallPE&gt;(edge) &amp;&amp; !SVFUtil::isa&lt;Function&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getValue())) {</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dstFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;DstNode of the PAGEdge not in the same function?&quot;</span>);</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; }</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; <span class="keywordflow">if</span> (!(SVFUtil::isa&lt;GepStmt&gt;(edge) &amp;&amp; SVFUtil::isa&lt;GepValVar&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>())))</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a> &amp;&amp; <span class="stringliteral">&quot;instruction does not have a basic block??&quot;</span>);</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac7dcc6103dee3a0bbc2fd2e02716a154">ReturnInst</a>* retInst = SVFUtil::dyn_cast&lt;ReturnInst&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>)){</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(retInst-&gt;getParent()-&gt;getParent());</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#af1b2d2839f811a00103df87342dfc919">getFunExitICFGNode</a>(fun);</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; }</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(curInst);</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; }</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* arg = SVFUtil::dyn_cast&lt;Argument&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; {</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a> &amp;&amp; (&amp;<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>-&gt;getParent()-&gt;getEntryBlock() == <a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>));</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(arg-&gt;getParent());</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a0dca4655c2f6112a5be1f921b8e81076">getFunEntryICFGNode</a>(fun);</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; }</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantExpr&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; {</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>)</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a">addGlobalPAGEdge</a>(edge);</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(&amp;<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>-&gt;front());</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; }</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;GlobalVariable&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; SVFUtil::isa&lt;Function&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; SVFUtil::isa&lt;Constant&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; SVFUtil::isa&lt;MetadataAsValue&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; {</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a">addGlobalPAGEdge</a>(edge);</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; }</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; {</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</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 value can we have?&quot;</span>);</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; }</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6">addToSVFStmtList</a>(icfgNode,edge);</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; icfgNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">addSVFStmt</a>(edge);</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIR_html_a6a84868ab4e2845e884fba08d82b40f6"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6">SVF::SVFIR::addToSVFStmtList</a></div><div class="ttdeci">void addToSVFStmtList(ICFGNode *inst, SVFStmt *edge)</div><div class="ttdoc">Add a SVFStmt into instruction map. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00191">SVFIR.h:191</a></div></div>
2457
+ <div class="fragment"><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;{</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>())</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a> &amp;&amp; <span class="stringliteral">&quot;current Val is nullptr?&quot;</span>);</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a852730edf374d18a3fb3985211ed7623">setBB</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>);</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a24dddb4e346a6e569908e3efe8a6ecc0">setValue</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>);</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160; <span class="comment">// backmap in valuToEdgeMap</span></div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#aefe3143b33cee00c3c2611fea577c1ac">mapValueToEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>, edge);</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ae0b05ce161d62362642803158228e5d0">getGlobalICFGNode</a>();</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *curInst = SVFUtil::dyn_cast&lt;Instruction&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; {</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* srcFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getFunction();</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* dstFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getFunction();</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; <span class="keywordflow">if</span>(srcFun!=<span class="keyword">nullptr</span> &amp;&amp; !SVFUtil::isa&lt;RetPE&gt;(edge) &amp;&amp; !SVFUtil::isa&lt;Function&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getValue())) {</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(srcFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;SrcNode of the PAGEdge not in the same function?&quot;</span>);</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; }</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; <span class="keywordflow">if</span>(dstFun!=<span class="keyword">nullptr</span> &amp;&amp; !SVFUtil::isa&lt;CallPE&gt;(edge) &amp;&amp; !SVFUtil::isa&lt;Function&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getValue())) {</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dstFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;DstNode of the PAGEdge not in the same function?&quot;</span>);</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; }</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; <span class="keywordflow">if</span> (!(SVFUtil::isa&lt;GepStmt&gt;(edge) &amp;&amp; SVFUtil::isa&lt;GepValVar&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>())))</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a> &amp;&amp; <span class="stringliteral">&quot;instruction does not have a basic block??&quot;</span>);</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac7dcc6103dee3a0bbc2fd2e02716a154">ReturnInst</a>* retInst = SVFUtil::dyn_cast&lt;ReturnInst&gt;(curInst)){</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(retInst-&gt;getParent()-&gt;getParent());</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#af1b2d2839f811a00103df87342dfc919">getFunExitICFGNode</a>(fun);</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; }</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;RetPE&gt;(edge))</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a66cb50d8c176f800f06d9cb8924eb896">getRetICFGNode</a>(curInst);</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(curInst);</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160; }</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; }</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* arg = SVFUtil::dyn_cast&lt;Argument&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; {</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a> &amp;&amp; (&amp;<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>-&gt;getParent()-&gt;getEntryBlock() == <a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>));</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(arg-&gt;getParent());</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a0dca4655c2f6112a5be1f921b8e81076">getFunEntryICFGNode</a>(fun);</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; }</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantExpr&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; {</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>)</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a">addGlobalPAGEdge</a>(edge);</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(&amp;<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>-&gt;front());</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; }</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;GlobalVariable&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; SVFUtil::isa&lt;Function&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; SVFUtil::isa&lt;Constant&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; SVFUtil::isa&lt;MetadataAsValue&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; {</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a">addGlobalPAGEdge</a>(edge);</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; }</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; {</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</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 value can we have?&quot;</span>);</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; }</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6">addToSVFStmtList</a>(icfgNode,edge);</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; icfgNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">addSVFStmt</a>(edge);</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIR_html_a6a84868ab4e2845e884fba08d82b40f6"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6">SVF::SVFIR::addToSVFStmtList</a></div><div class="ttdeci">void addToSVFStmtList(ICFGNode *inst, SVFStmt *edge)</div><div class="ttdoc">Add a SVFStmt into instruction map. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00191">SVFIR.h:191</a></div></div>
2458
2458
  <div class="ttc" id="classSVF_1_1ICFGNode_html_a8a133398c691ab3639ceefbc57cd33be"><div class="ttname"><a href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">SVF::ICFGNode::addSVFStmt</a></div><div class="ttdeci">void addSVFStmt(const SVFStmt *edge)</div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00116">ICFGNode.h:116</a></div></div>
2459
2459
  <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>
2460
2460
  <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>
2461
+ <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>
2461
2462
  <div class="ttc" id="classSVF_1_1IRGraph_html_aefe3143b33cee00c3c2611fea577c1ac"><div class="ttname"><a href="classSVF_1_1IRGraph.html#aefe3143b33cee00c3c2611fea577c1ac">SVF::IRGraph::mapValueToEdge</a></div><div class="ttdeci">void mapValueToEdge(const Value *V, SVFStmt *edge)</div><div class="ttdoc">Map a value to a set of edges. </div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00081">IRGraph.h:81</a></div></div>
2462
2463
  <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>
2463
2464
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aac1cbf0cb2b402b5fd0e2324c89c31b0"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">SVF::SVFIRBuilder::curBB</a></div><div class="ttdeci">const BasicBlock * curBB</div><div class="ttdoc">Current basic block during SVFIR construction when visiting the module. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00050">SVFIRBuilder.h:50</a></div></div>
@@ -2543,8 +2544,8 @@ Private Attributes</h2></td></tr>
2543
2544
 
2544
2545
  <p>Update <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> given a call graph (creating new <a class="el" href="classSVF_1_1CallPE.html">CallPE</a> and <a class="el" href="classSVF_1_1RetPE.html">RetPE</a> for resolved indirect calls) </p>
2545
2546
 
2546
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01699">1699</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2547
- <div class="fragment"><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; {</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</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="l01701"></a><span class="lineno"> 1701</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="l01702"></a><span class="lineno"> 1702</span>&#160; <span class="keywordflow">for</span> (; iter != eiter; iter++)</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160; {</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</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="l01705"></a><span class="lineno"> 1705</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">getLLVMCallSite</a>(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>(), callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()-&gt;getParent());</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</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="l01708"></a><span class="lineno"> 1708</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="l01709"></a><span class="lineno"> 1709</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="l01710"></a><span class="lineno"> 1710</span>&#160; {</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</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="l01712"></a><span class="lineno"> 1712</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="l01713"></a><span class="lineno"> 1713</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aff08d65b1411d1db81f80b9d4228c65d">handleExtCall</a>(cs, callee);</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#afd3125974393d68b4b8f5298ef699ab3">handleDirectCall</a>(cs, callee);</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160; }</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; }</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160;</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; <span class="comment">// dump SVFIR</span></div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a3a20311c732fb391332ae0ee1cb450a0">Options::PAGDotGraph</a>)</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a1cb32461439c4dc8d044c2bfadb11307">dump</a>(<span class="stringliteral">&quot;svfir_final&quot;</span>);</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;}</div><div class="ttc" id="classSVF_1_1IRGraph_html_a1cb32461439c4dc8d044c2bfadb11307"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a1cb32461439c4dc8d044c2bfadb11307">SVF::IRGraph::dump</a></div><div class="ttdeci">void dump(std::string name)</div><div class="ttdoc">Dump SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8cpp_source.html#l00101">IRGraph.cpp:101</a></div></div>
2547
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01703">1703</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2548
+ <div class="fragment"><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160; {</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</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="l01705"></a><span class="lineno"> 1705</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="l01706"></a><span class="lineno"> 1706</span>&#160; <span class="keywordflow">for</span> (; iter != eiter; iter++)</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160; {</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</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="l01709"></a><span class="lineno"> 1709</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">getLLVMCallSite</a>(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>(), callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()-&gt;getParent());</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</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="l01712"></a><span class="lineno"> 1712</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="l01713"></a><span class="lineno"> 1713</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="l01714"></a><span class="lineno"> 1714</span>&#160; {</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</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="l01716"></a><span class="lineno"> 1716</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="l01717"></a><span class="lineno"> 1717</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aff08d65b1411d1db81f80b9d4228c65d">handleExtCall</a>(cs, callee);</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#afd3125974393d68b4b8f5298ef699ab3">handleDirectCall</a>(cs, callee);</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; }</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; }</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160; <span class="comment">// dump SVFIR</span></div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a3a20311c732fb391332ae0ee1cb450a0">Options::PAGDotGraph</a>)</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a1cb32461439c4dc8d044c2bfadb11307">dump</a>(<span class="stringliteral">&quot;svfir_final&quot;</span>);</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;}</div><div class="ttc" id="classSVF_1_1IRGraph_html_a1cb32461439c4dc8d044c2bfadb11307"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a1cb32461439c4dc8d044c2bfadb11307">SVF::IRGraph::dump</a></div><div class="ttdeci">void dump(std::string name)</div><div class="ttdoc">Dump SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8cpp_source.html#l00101">IRGraph.cpp:101</a></div></div>
2548
2549
  <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>
2549
2550
  <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>
2550
2551
  <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>
@@ -1636,12 +1636,16 @@ void SVFIRBuilder::setCurrentBBAndValueForPAGEdge(PAGEdge* edge)
1636
1636
  assert(curBB && "instruction does not have a basic block??");
1637
1637
 
1638
1638
  /// We will have one unique function exit ICFGNode for all returns
1639
- if(const ReturnInst* retInst = SVFUtil::dyn_cast<ReturnInst>(curVal)){
1639
+ if(const ReturnInst* retInst = SVFUtil::dyn_cast<ReturnInst>(curInst)){
1640
1640
  const SVFFunction *fun = LLVMModuleSet::getLLVMModuleSet()->getSVFFunction(retInst->getParent()->getParent());
1641
1641
  icfgNode = pag->getICFG()->getFunExitICFGNode(fun);
1642
1642
  }
1643
- else
1644
- icfgNode = pag->getICFG()->getICFGNode(curInst);
1643
+ else{
1644
+ if(SVFUtil::isa<RetPE>(edge))
1645
+ icfgNode = pag->getICFG()->getRetICFGNode(curInst);
1646
+ else
1647
+ icfgNode = pag->getICFG()->getICFGNode(curInst);
1648
+ }
1645
1649
  }
1646
1650
  else if (const Argument* arg = SVFUtil::dyn_cast<Argument>(curVal))
1647
1651
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-tools",
3
- "version": "1.0.364",
3
+ "version": "1.0.365",
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": {