svf-tools 1.0.910 → 1.0.911

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.
Files changed (39) hide show
  1. package/SVF-doxygen/html/AbstractInterpretation_8cpp.html +5 -5
  2. package/SVF-doxygen/html/AbstractInterpretation_8cpp_source.html +1151 -1131
  3. package/SVF-doxygen/html/AbstractInterpretation_8h_source.html +31 -31
  4. package/SVF-doxygen/html/BufOverflowChecker_8cpp_source.html +457 -450
  5. package/SVF-doxygen/html/BufOverflowChecker_8h_source.html +2 -2
  6. package/SVF-doxygen/html/SVFIR2AbsState_8h_source.html +2 -2
  7. package/SVF-doxygen/html/classSVF_1_1AEStat.html +116 -114
  8. package/SVF-doxygen/html/classSVF_1_1AbstractInterpretation-members.html +1 -1
  9. package/SVF-doxygen/html/classSVF_1_1AbstractInterpretation.html +1009 -991
  10. package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker-members.html +1 -1
  11. package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker.html +118 -115
  12. package/SVF-doxygen/html/classSVF_1_1SVFIR2AbsState-members.html +4 -4
  13. package/SVF-doxygen/html/classSVF_1_1SVFIR2AbsState.html +32 -32
  14. package/SVF-doxygen/html/functions.html +2 -2
  15. package/SVF-doxygen/html/functions_func_g.html +13 -13
  16. package/SVF-doxygen/html/functions_g.html +9 -9
  17. package/SVF-doxygen/html/functions_p.html +6 -6
  18. package/SVF-doxygen/html/functions_s.html +7 -7
  19. package/SVF-doxygen/html/functions_t.html +2 -2
  20. package/SVF-doxygen/html/functions_v.html +6 -6
  21. package/SVF-doxygen/html/functions_vars.html +2 -2
  22. package/SVF-doxygen/html/functions_w.html +9 -17
  23. package/SVF-doxygen/html/search/all_0.js +1 -1
  24. package/SVF-doxygen/html/search/all_10.js +3 -3
  25. package/SVF-doxygen/html/search/all_12.js +5 -5
  26. package/SVF-doxygen/html/search/all_13.js +4 -4
  27. package/SVF-doxygen/html/search/all_15.js +3 -3
  28. package/SVF-doxygen/html/search/all_16.js +1 -1
  29. package/SVF-doxygen/html/search/all_7.js +248 -248
  30. package/SVF-doxygen/html/search/functions_10.js +1 -1
  31. package/SVF-doxygen/html/search/functions_7.js +247 -247
  32. package/SVF-doxygen/html/search/variables_0.js +1 -1
  33. package/SVF-doxygen/html/search/variables_12.js +1 -1
  34. package/SVF-doxygen/html/search/variables_13.js +2 -2
  35. package/package.json +1 -1
  36. package/svf/include/AE/Svfexe/AbstractInterpretation.h +1 -1
  37. package/svf/include/AE/Svfexe/SVFIR2AbsState.h +1 -1
  38. package/svf/lib/AE/Svfexe/AbstractInterpretation.cpp +88 -68
  39. package/svf/lib/AE/Svfexe/BufOverflowChecker.cpp +37 -30
@@ -163,7 +163,7 @@ $(function() {
163
163
  <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; _svfir = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">PAG::getPAG</a>();</div>
164
164
  <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; _ander = <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540">AndersenWaveDiff::createAndersenWaveDiff</a>(_svfir);</div>
165
165
  <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="comment">// init SVF Execution States</span></div>
166
- <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; _svfir2ExeState = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFIR2AbsState.html">SVFIR2AbsState</a>(_svfir);</div>
166
+ <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; _svfir2AbsState = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFIR2AbsState.html">SVFIR2AbsState</a>(_svfir);</div>
167
167
  <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; </div>
168
168
  <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// init SSE External API Handler</span></div>
169
169
  <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; _callgraph = _ander-&gt;getPTACallGraph();</div>
@@ -197,7 +197,7 @@ $(function() {
197
197
  <div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#aae29a8da31fddd069cb0e19cc2f78d46"> 129</a></span>&#160;<a class="code" href="classSVF_1_1AbstractInterpretation.html#aae29a8da31fddd069cb0e19cc2f78d46">AbstractInterpretation::~AbstractInterpretation</a>()</div>
198
198
  <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;{</div>
199
199
  <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keyword">delete</span> _stat;</div>
200
- <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keyword">delete</span> _svfir2ExeState;</div>
200
+ <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keyword">delete</span> _svfir2AbsState;</div>
201
201
  <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it: _funcToWTO)</div>
202
202
  <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">delete</span> it.second;</div>
203
203
  <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
@@ -220,7 +220,7 @@ $(function() {
220
220
  <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;{</div>
221
221
  <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">// handle Global ICFGNode of SVFModule</span></div>
222
222
  <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; handleGlobalNode();</div>
223
- <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; _svfir2ExeState-&gt;getEs()[<a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">PAG::getPAG</a>()-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a3b417ee79560fd00f4cf80906044c198">getBlkPtr</a>()] = <a class="code" href="classSVF_1_1IntervalValue.html#add3acad151d5af6c9a5f692f7a01e65b">IntervalValue::top</a>();</div>
223
+ <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; _svfir2AbsState-&gt;getAbsState()[<a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">PAG::getPAG</a>()-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a3b417ee79560fd00f4cf80906044c198">getBlkPtr</a>()] = <a class="code" href="classSVF_1_1IntervalValue.html#add3acad151d5af6c9a5f692f7a01e65b">IntervalValue::top</a>();</div>
224
224
  <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = _svfir-&gt;getModule()-&gt;getSVFFunction(<span class="stringliteral">&quot;main&quot;</span>))</div>
225
225
  <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div>
226
226
  <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; handleFunc(fun);</div>
@@ -231,13 +231,13 @@ $(function() {
231
231
  <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;{</div>
232
232
  <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> es;</div>
233
233
  <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* node = _icfg-&gt;getGlobalICFGNode();</div>
234
- <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; _svfir2ExeState-&gt;setEs(es);</div>
234
+ <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; _svfir2AbsState-&gt;setEs(es);</div>
235
235
  <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="comment">// Global Node, we just need to handle addr, load, store, copy and gep</span></div>
236
236
  <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> *stmt: node-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>())</div>
237
237
  <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {</div>
238
238
  <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; handleSVFStatement(stmt);</div>
239
239
  <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; }</div>
240
- <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; _postAbstractTrace[node] = _svfir2ExeState-&gt;getEs();</div>
240
+ <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; _postAbstractTrace[node] = _svfir2AbsState-&gt;getAbsState();</div>
241
241
  <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;}</div>
242
242
  <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; </div>
243
243
  <div class="line"><a name="l00180"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a3a12a86670eef9cd22b1853c7c6fa208"> 180</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a3a12a86670eef9cd22b1853c7c6fa208">AbstractInterpretation::propagateStateIfFeasible</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *block)</div>
@@ -592,7 +592,7 @@ $(function() {
592
592
  <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; {</div>
593
593
  <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="comment">// Has ES on the in edges - Feasible block</span></div>
594
594
  <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="comment">// Get execution state from in edges</span></div>
595
- <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; _svfir2ExeState-&gt;setEs(_preAbstractTrace[node]);</div>
595
+ <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; _svfir2AbsState-&gt;setEs(_preAbstractTrace[node]);</div>
596
596
  <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; }</div>
597
597
  <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; </div>
598
598
  <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; std::deque&lt;const ICFGNode*&gt; worklist;</div>
@@ -605,7 +605,7 @@ $(function() {
605
605
  <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; }</div>
606
606
  <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; </div>
607
607
  <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; _preAbstractTrace.erase(node);</div>
608
- <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; _postAbstractTrace[node] = _svfir2ExeState-&gt;getEs();</div>
608
+ <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; _postAbstractTrace[node] = _svfir2AbsState-&gt;getAbsState();</div>
609
609
  <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;}</div>
610
610
  <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; </div>
611
611
  <div class="line"><a name="l00549"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#abbb4e49644121f6b038fd8fb4d7b0034"> 549</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#abbb4e49644121f6b038fd8fb4d7b0034">AbstractInterpretation::handleCallSite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* node)</div>
@@ -669,11 +669,11 @@ $(function() {
669
669
  <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">if</span> (!retPE-&gt;getLHSVar()-&gt;isPointer() &amp;&amp;</div>
670
670
  <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; !retPE-&gt;getLHSVar()-&gt;isConstDataOrAggDataButNotNullPtr())</div>
671
671
  <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; {</div>
672
- <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; _svfir2ExeState-&gt;getEs()[retPE-&gt;getLHSVarID()] = <a class="code" href="classSVF_1_1IntervalValue.html#add3acad151d5af6c9a5f692f7a01e65b">IntervalValue::top</a>();</div>
672
+ <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; _svfir2AbsState-&gt;getAbsState()[retPE-&gt;getLHSVarID()] = <a class="code" href="classSVF_1_1IntervalValue.html#add3acad151d5af6c9a5f692f7a01e65b">IntervalValue::top</a>();</div>
673
673
  <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; }</div>
674
674
  <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; }</div>
675
675
  <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; }</div>
676
- <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; _postAbstractTrace[retNode] = _svfir2ExeState-&gt;getEs();</div>
676
+ <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; _postAbstractTrace[retNode] = _svfir2AbsState-&gt;getAbsState();</div>
677
677
  <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;}</div>
678
678
  <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; </div>
679
679
  <div class="line"><a name="l00617"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a14c758bcbbc7d8197c5fa1851720b663"> 617</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a14c758bcbbc7d8197c5fa1851720b663">AbstractInterpretation::isDirectCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a> *callNode)</div>
@@ -684,10 +684,10 @@ $(function() {
684
684
  <div class="line"><a name="l00622"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a2a317e4263c4d8acbc5088a18a3849aa"> 622</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a2a317e4263c4d8acbc5088a18a3849aa">AbstractInterpretation::directCallFunPass</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a> *callNode)</div>
685
685
  <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;{</div>
686
686
  <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *callfun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(callNode-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
687
- <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> preES = _svfir2ExeState-&gt;getEs();</div>
687
+ <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> preES = _svfir2AbsState-&gt;getAbsState();</div>
688
688
  <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; _callSiteStack.push_back(callNode);</div>
689
689
  <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; </div>
690
- <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; _postAbstractTrace[callNode] = _svfir2ExeState-&gt;getEs();</div>
690
+ <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; _postAbstractTrace[callNode] = _svfir2AbsState-&gt;getAbsState();</div>
691
691
  <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; </div>
692
692
  <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; handleFunc(callfun);</div>
693
693
  <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; _callSiteStack.pop_back();</div>
@@ -707,1116 +707,1136 @@ $(function() {
707
707
  <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160;{</div>
708
708
  <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> callsiteMaps = _svfir-&gt;getIndirectCallsites();</div>
709
709
  <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> call_id = callsiteMaps.at(callNode);</div>
710
- <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">if</span> (!_svfir2ExeState-&gt;getEs().inVarToAddrsTable(call_id))</div>
710
+ <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">if</span> (!_svfir2AbsState-&gt;getAbsState().inVarToAddrsTable(call_id))</div>
711
711
  <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; {</div>
712
712
  <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">return</span>;</div>
713
713
  <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; }</div>
714
- <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> Addrs = _svfir2ExeState-&gt;<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>(call_id); <span class="comment">//_svfir2ExeState-&gt;getEs()</span></div>
715
- <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> addr = *Addrs.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>().<a class="code" href="classSVF_1_1AddressValue.html#aed0b4789beda4980e4e215a65350f323">begin</a>();</div>
716
- <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *func_var = _svfir-&gt;getGNode(_svfir2ExeState-&gt;getInternalID(addr));</div>
717
- <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *callfun = SVFUtil::dyn_cast&lt;SVFFunction&gt;(func_var-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ac2db6304ea5526fb446ae882983beeb0">getValue</a>());</div>
718
- <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">if</span> (callfun)</div>
719
- <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; {</div>
720
- <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> preES = _svfir2ExeState-&gt;getEs();</div>
721
- <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; _callSiteStack.push_back(callNode);</div>
722
- <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; </div>
723
- <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; _postAbstractTrace[callNode] = _svfir2ExeState-&gt;getEs();</div>
724
- <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; </div>
725
- <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; handleFunc(callfun);</div>
726
- <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; _callSiteStack.pop_back();</div>
727
- <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="comment">// handle Ret node</span></div>
728
- <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a> *retNode = callNode-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#ae23a7540609879ac0379fc53b4e7eead">getRetICFGNode</a>();</div>
729
- <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; _postAbstractTrace[retNode] = _postAbstractTrace[callNode];</div>
730
- <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; }</div>
731
- <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;}</div>
732
- <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; </div>
714
+ <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> Addrs =</div>
715
+ <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; _svfir2AbsState-&gt;<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>(call_id); <span class="comment">//_svfir2ExeState-&gt;getEs()</span></div>
716
+ <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> addr = *Addrs.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>().<a class="code" href="classSVF_1_1AddressValue.html#aed0b4789beda4980e4e215a65350f323">begin</a>();</div>
717
+ <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *func_var = _svfir-&gt;getGNode(_svfir2AbsState-&gt;getInternalID(addr));</div>
718
+ <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *callfun = SVFUtil::dyn_cast&lt;SVFFunction&gt;(func_var-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ac2db6304ea5526fb446ae882983beeb0">getValue</a>());</div>
719
+ <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keywordflow">if</span> (callfun)</div>
720
+ <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; {</div>
721
+ <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> preES = _svfir2AbsState-&gt;getAbsState();</div>
722
+ <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; _callSiteStack.push_back(callNode);</div>
723
+ <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; </div>
724
+ <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; _postAbstractTrace[callNode] = _svfir2AbsState-&gt;getAbsState();</div>
725
+ <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; </div>
726
+ <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; handleFunc(callfun);</div>
727
+ <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; _callSiteStack.pop_back();</div>
728
+ <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="comment">// handle Ret node</span></div>
729
+ <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a> *retNode = callNode-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#ae23a7540609879ac0379fc53b4e7eead">getRetICFGNode</a>();</div>
730
+ <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; _postAbstractTrace[retNode] = _postAbstractTrace[callNode];</div>
731
+ <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; }</div>
732
+ <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;}</div>
733
733
  <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; </div>
734
734
  <div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; </div>
735
- <div class="line"><a name="l00673"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a9b179466955023f275b6692b59048846"> 673</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a9b179466955023f275b6692b59048846">AbstractInterpretation::handleICFGNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *curICFGNode)</div>
736
- <div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;{</div>
737
- <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; _stat-&gt;getICFGNodeTrace()++;</div>
738
- <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="comment">// handle SVF Stmt</span></div>
739
- <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> *stmt: curICFGNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>())</div>
740
- <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; {</div>
741
- <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; handleSVFStatement(stmt);</div>
742
- <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; }</div>
743
- <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="comment">// inlining the callee by calling handleFunc for the callee function</span></div>
744
- <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callnode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(curICFGNode))</div>
745
- <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; {</div>
746
- <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; handleCallSite(callnode);</div>
747
- <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; }</div>
748
- <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">else</span></div>
749
- <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; {</div>
750
- <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; </div>
751
- <div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; }</div>
752
- <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; _stat-&gt;countStateSize();</div>
753
- <div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;}</div>
754
- <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; </div>
755
- <div class="line"><a name="l00694"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a71dff5d6a5b291014c0a65d3a6d7c8c1"> 694</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a71dff5d6a5b291014c0a65d3a6d7c8c1">AbstractInterpretation::handleCycle</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1WTOCycle.html">ICFGWTOCycle</a> *cycle)</div>
756
- <div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160;{</div>
757
- <div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="comment">// Get execution states from in edges</span></div>
758
- <div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="keywordflow">if</span> (!propagateStateIfFeasible(cycle-&gt;<a class="code" href="classSVF_1_1WTOCycle.html#ace60ecb07603681de5c3020d0d3c5079">head</a>()))</div>
759
- <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; {</div>
760
- <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="comment">// No ES on the in edges - Infeasible block</span></div>
761
- <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">return</span>;</div>
762
- <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; }</div>
763
- <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> pre_es = _preAbstractTrace[cycle-&gt;<a class="code" href="classSVF_1_1WTOCycle.html#ace60ecb07603681de5c3020d0d3c5079">head</a>()];</div>
764
- <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="comment">// set -widen-delay</span></div>
765
- <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> widen_delay = <a class="code" href="classSVF_1_1Options.html#ab25f7ec430ba1d41597fc409b758b193">Options::WidenDelay</a>();</div>
766
- <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordtype">bool</span> incresing = <span class="keyword">true</span>;</div>
767
- <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; ; i++)</div>
768
- <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; {</div>
769
- <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* cycle_head = cycle-&gt;<a class="code" href="classSVF_1_1WTOCycle.html#ace60ecb07603681de5c3020d0d3c5079">head</a>();</div>
770
- <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="comment">// handle cycle head</span></div>
771
- <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; handleWTONode(cycle_head);</div>
772
- <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="keywordflow">if</span> (i &lt; widen_delay)</div>
773
- <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; {</div>
774
- <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keywordflow">if</span> (i&gt; 0 &amp;&amp; pre_es &gt;= _postAbstractTrace[cycle_head])</div>
775
- <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; {</div>
776
- <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keywordflow">break</span>;</div>
777
- <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; }</div>
778
- <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; pre_es = _postAbstractTrace[cycle_head];</div>
779
- <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; }</div>
780
- <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keywordflow">else</span></div>
781
- <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; {</div>
782
- <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keywordflow">if</span> (i &gt;= widen_delay)</div>
783
- <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; {</div>
784
- <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keywordflow">if</span> (incresing)</div>
785
- <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; {</div>
786
- <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordtype">bool</span> is_fixpoint = widenFixpointPass(cycle_head, pre_es);</div>
787
- <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordflow">if</span> (is_fixpoint)</div>
788
- <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; {</div>
789
- <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; incresing = <span class="keyword">false</span>;</div>
790
- <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">continue</span>;</div>
791
- <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; }</div>
792
- <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; }</div>
793
- <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!incresing)</div>
794
- <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; {</div>
795
- <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keywordtype">bool</span> is_fixpoint = narrowFixpointPass(cycle_head, pre_es);</div>
796
- <div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordflow">if</span> (is_fixpoint)</div>
797
- <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keywordflow">break</span>;</div>
798
- <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; }</div>
799
- <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; }</div>
800
- <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; }</div>
801
- <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = cycle-&gt;<a class="code" href="classSVF_1_1WTOCycle.html#a807c883d1cfe98c791c903125742f95b">begin</a>(); it != cycle-&gt;<a class="code" href="classSVF_1_1WTOCycle.html#a03fd55dd34c48d22cefcaf6dc93f734a">end</a>(); ++it)</div>
802
- <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; {</div>
803
- <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1WTOComponent.html">ICFGWTOComp</a>* cur = *it;</div>
804
- <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1WTONode.html">ICFGWTONode</a>* vertex = SVFUtil::dyn_cast&lt;ICFGWTONode&gt;(cur))</div>
805
- <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; {</div>
806
- <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; handleWTONode(vertex-&gt;node());</div>
807
- <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; }</div>
808
- <div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1WTOCycle.html">ICFGWTOCycle</a>* cycle2 = SVFUtil::dyn_cast&lt;ICFGWTOCycle&gt;(cur))</div>
809
- <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; {</div>
810
- <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; handleCycle(cycle2);</div>
811
- <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; }</div>
812
- <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordflow">else</span></div>
813
- <div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; {</div>
814
- <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;unknown WTO type!&quot;</span>);</div>
815
- <div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; }</div>
816
- <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; }</div>
817
- <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; }</div>
818
- <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160;}</div>
819
- <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; </div>
820
- <div class="line"><a name="l00759"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a1b8e1e0cc9803687a0eb951015ac59af"> 759</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a1b8e1e0cc9803687a0eb951015ac59af">AbstractInterpretation::widenFixpointPass</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* cycle_head,</div>
821
- <div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a>&amp; pre_es)</div>
822
- <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160;{</div>
823
- <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="comment">// increasing iterations</span></div>
824
- <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> new_pre_es = pre_es.<a class="code" href="classSVF_1_1AbstractState.html#afd37c4419cfc79b6765fa243fcbea573">widening</a>(_postAbstractTrace[cycle_head]);</div>
825
- <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> new_pre_vaddr_es = new_pre_es;</div>
826
- <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; _svfir2ExeState-&gt;widenAddrs(new_pre_es, _postAbstractTrace[cycle_head]);</div>
827
- <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; </div>
828
- <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="keywordflow">if</span> (pre_es &gt;= new_pre_es)</div>
829
- <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; {</div>
830
- <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="comment">// increasing iterations - fixpoint reached</span></div>
831
- <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; pre_es = new_pre_es;</div>
832
- <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; _postAbstractTrace[cycle_head] = pre_es;</div>
833
- <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
834
- <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; }</div>
835
- <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="keywordflow">else</span></div>
836
- <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; {</div>
837
- <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; pre_es = new_pre_es;</div>
838
- <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; _postAbstractTrace[cycle_head] = pre_es;</div>
839
- <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
840
- <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; }</div>
841
- <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160;}</div>
842
- <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; </div>
843
- <div class="line"><a name="l00782"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a8a4b07e6c999bea0b0e69dcab0346933"> 782</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a8a4b07e6c999bea0b0e69dcab0346933">AbstractInterpretation::narrowFixpointPass</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">SVF::ICFGNode</a> *cycle_head, <a class="code" href="classSVF_1_1AbstractState.html">SVF::AbstractState</a>&amp;pre_es)</div>
844
- <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160;{</div>
845
- <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="comment">// decreasing iterations</span></div>
846
- <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> new_pre_es = pre_es.<a class="code" href="classSVF_1_1AbstractState.html#aa9f048614c0bdbe5e8562bfcc6288a97">narrowing</a>(_postAbstractTrace[cycle_head]);</div>
847
- <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> new_pre_vaddr_es = new_pre_es;</div>
848
- <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; _svfir2ExeState-&gt;narrowAddrs(new_pre_es, _postAbstractTrace[cycle_head]);</div>
849
- <div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keywordflow">if</span> (new_pre_es &gt;= pre_es)</div>
850
- <div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; {</div>
851
- <div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="comment">// decreasing iterations - fixpoint reached</span></div>
852
- <div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; pre_es = new_pre_es;</div>
853
- <div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; _postAbstractTrace[cycle_head] = pre_es;</div>
854
- <div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
855
- <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; }</div>
856
- <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">else</span></div>
857
- <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; {</div>
858
- <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; pre_es = new_pre_es;</div>
859
- <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; _postAbstractTrace[cycle_head] = pre_es;</div>
860
- <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
861
- <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; }</div>
862
- <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;}</div>
863
- <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; </div>
735
+ <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; </div>
736
+ <div class="line"><a name="l00674"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a9b179466955023f275b6692b59048846"> 674</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a9b179466955023f275b6692b59048846">AbstractInterpretation::handleICFGNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *curICFGNode)</div>
737
+ <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;{</div>
738
+ <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; _stat-&gt;getICFGNodeTrace()++;</div>
739
+ <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="comment">// handle SVF Stmt</span></div>
740
+ <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> *stmt: curICFGNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>())</div>
741
+ <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; {</div>
742
+ <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; handleSVFStatement(stmt);</div>
743
+ <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; }</div>
744
+ <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="comment">// inlining the callee by calling handleFunc for the callee function</span></div>
745
+ <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callnode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(curICFGNode))</div>
746
+ <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; {</div>
747
+ <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; handleCallSite(callnode);</div>
748
+ <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; }</div>
749
+ <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="keywordflow">else</span></div>
750
+ <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; {</div>
751
+ <div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; </div>
752
+ <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; }</div>
753
+ <div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; _stat-&gt;countStateSize();</div>
754
+ <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;}</div>
755
+ <div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; </div>
756
+ <div class="line"><a name="l00695"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a71dff5d6a5b291014c0a65d3a6d7c8c1"> 695</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a71dff5d6a5b291014c0a65d3a6d7c8c1">AbstractInterpretation::handleCycle</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1WTOCycle.html">ICFGWTOCycle</a> *cycle)</div>
757
+ <div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;{</div>
758
+ <div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="comment">// Get execution states from in edges</span></div>
759
+ <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keywordflow">if</span> (!propagateStateIfFeasible(cycle-&gt;<a class="code" href="classSVF_1_1WTOCycle.html#ace60ecb07603681de5c3020d0d3c5079">head</a>()))</div>
760
+ <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; {</div>
761
+ <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="comment">// No ES on the in edges - Infeasible block</span></div>
762
+ <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">return</span>;</div>
763
+ <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; }</div>
764
+ <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> pre_es = _preAbstractTrace[cycle-&gt;<a class="code" href="classSVF_1_1WTOCycle.html#ace60ecb07603681de5c3020d0d3c5079">head</a>()];</div>
765
+ <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="comment">// set -widen-delay</span></div>
766
+ <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> widen_delay = <a class="code" href="classSVF_1_1Options.html#ab25f7ec430ba1d41597fc409b758b193">Options::WidenDelay</a>();</div>
767
+ <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordtype">bool</span> incresing = <span class="keyword">true</span>;</div>
768
+ <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; ; i++)</div>
769
+ <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; {</div>
770
+ <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* cycle_head = cycle-&gt;<a class="code" href="classSVF_1_1WTOCycle.html#ace60ecb07603681de5c3020d0d3c5079">head</a>();</div>
771
+ <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="comment">// handle cycle head</span></div>
772
+ <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; handleWTONode(cycle_head);</div>
773
+ <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">if</span> (i &lt; widen_delay)</div>
774
+ <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; {</div>
775
+ <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keywordflow">if</span> (i&gt; 0 &amp;&amp; pre_es &gt;= _postAbstractTrace[cycle_head])</div>
776
+ <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; {</div>
777
+ <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="keywordflow">break</span>;</div>
778
+ <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; }</div>
779
+ <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; pre_es = _postAbstractTrace[cycle_head];</div>
780
+ <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; }</div>
781
+ <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keywordflow">else</span></div>
782
+ <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; {</div>
783
+ <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordflow">if</span> (i &gt;= widen_delay)</div>
784
+ <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; {</div>
785
+ <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="keywordflow">if</span> (incresing)</div>
786
+ <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; {</div>
787
+ <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordtype">bool</span> is_fixpoint = widenFixpointPass(cycle_head, pre_es);</div>
788
+ <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">if</span> (is_fixpoint)</div>
789
+ <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; {</div>
790
+ <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; incresing = <span class="keyword">false</span>;</div>
791
+ <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">continue</span>;</div>
792
+ <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; }</div>
793
+ <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; }</div>
794
+ <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!incresing)</div>
795
+ <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; {</div>
796
+ <div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordtype">bool</span> is_fixpoint = narrowFixpointPass(cycle_head, pre_es);</div>
797
+ <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keywordflow">if</span> (is_fixpoint)</div>
798
+ <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">break</span>;</div>
799
+ <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; }</div>
800
+ <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; }</div>
801
+ <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; }</div>
802
+ <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = cycle-&gt;<a class="code" href="classSVF_1_1WTOCycle.html#a807c883d1cfe98c791c903125742f95b">begin</a>(); it != cycle-&gt;<a class="code" href="classSVF_1_1WTOCycle.html#a03fd55dd34c48d22cefcaf6dc93f734a">end</a>(); ++it)</div>
803
+ <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; {</div>
804
+ <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1WTOComponent.html">ICFGWTOComp</a>* cur = *it;</div>
805
+ <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1WTONode.html">ICFGWTONode</a>* vertex = SVFUtil::dyn_cast&lt;ICFGWTONode&gt;(cur))</div>
806
+ <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; {</div>
807
+ <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; handleWTONode(vertex-&gt;node());</div>
808
+ <div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; }</div>
809
+ <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1WTOCycle.html">ICFGWTOCycle</a>* cycle2 = SVFUtil::dyn_cast&lt;ICFGWTOCycle&gt;(cur))</div>
810
+ <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; {</div>
811
+ <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; handleCycle(cycle2);</div>
812
+ <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; }</div>
813
+ <div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="keywordflow">else</span></div>
814
+ <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; {</div>
815
+ <div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;unknown WTO type!&quot;</span>);</div>
816
+ <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; }</div>
817
+ <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; }</div>
818
+ <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; }</div>
819
+ <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;}</div>
820
+ <div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; </div>
821
+ <div class="line"><a name="l00760"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a1b8e1e0cc9803687a0eb951015ac59af"> 760</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a1b8e1e0cc9803687a0eb951015ac59af">AbstractInterpretation::widenFixpointPass</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* cycle_head,</div>
822
+ <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a>&amp; pre_es)</div>
823
+ <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;{</div>
824
+ <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="comment">// increasing iterations</span></div>
825
+ <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> new_pre_es = pre_es.<a class="code" href="classSVF_1_1AbstractState.html#afd37c4419cfc79b6765fa243fcbea573">widening</a>(_postAbstractTrace[cycle_head]);</div>
826
+ <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> new_pre_vaddr_es = new_pre_es;</div>
827
+ <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; _svfir2AbsState-&gt;widenAddrs(new_pre_es, _postAbstractTrace[cycle_head]);</div>
828
+ <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; </div>
829
+ <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">if</span> (pre_es &gt;= new_pre_es)</div>
830
+ <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; {</div>
831
+ <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="comment">// increasing iterations - fixpoint reached</span></div>
832
+ <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; pre_es = new_pre_es;</div>
833
+ <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; _postAbstractTrace[cycle_head] = pre_es;</div>
834
+ <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
835
+ <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; }</div>
836
+ <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordflow">else</span></div>
837
+ <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; {</div>
838
+ <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; pre_es = new_pre_es;</div>
839
+ <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; _postAbstractTrace[cycle_head] = pre_es;</div>
840
+ <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
841
+ <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; }</div>
842
+ <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;}</div>
843
+ <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; </div>
844
+ <div class="line"><a name="l00783"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a8a4b07e6c999bea0b0e69dcab0346933"> 783</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a8a4b07e6c999bea0b0e69dcab0346933">AbstractInterpretation::narrowFixpointPass</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">SVF::ICFGNode</a> *cycle_head, <a class="code" href="classSVF_1_1AbstractState.html">SVF::AbstractState</a>&amp;pre_es)</div>
845
+ <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;{</div>
846
+ <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <span class="comment">// decreasing iterations</span></div>
847
+ <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> new_pre_es = pre_es.<a class="code" href="classSVF_1_1AbstractState.html#aa9f048614c0bdbe5e8562bfcc6288a97">narrowing</a>(_postAbstractTrace[cycle_head]);</div>
848
+ <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> new_pre_vaddr_es = new_pre_es;</div>
849
+ <div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; _svfir2AbsState-&gt;narrowAddrs(new_pre_es, _postAbstractTrace[cycle_head]);</div>
850
+ <div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keywordflow">if</span> (new_pre_es &gt;= pre_es)</div>
851
+ <div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; {</div>
852
+ <div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="comment">// decreasing iterations - fixpoint reached</span></div>
853
+ <div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; pre_es = new_pre_es;</div>
854
+ <div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; _postAbstractTrace[cycle_head] = pre_es;</div>
855
+ <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
856
+ <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; }</div>
857
+ <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <span class="keywordflow">else</span></div>
858
+ <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; {</div>
859
+ <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; pre_es = new_pre_es;</div>
860
+ <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; _postAbstractTrace[cycle_head] = pre_es;</div>
861
+ <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
862
+ <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; }</div>
863
+ <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160;}</div>
864
864
  <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; </div>
865
865
  <div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; </div>
866
- <div class="line"><a name="l00806"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a2e2253149e2bf114825a4e838118e012"> 806</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a2e2253149e2bf114825a4e838118e012">AbstractInterpretation::handleFunc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *func)</div>
867
- <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160;{</div>
868
- <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; _stat-&gt;getFunctionTrace()++;</div>
869
- <div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <a class="code" href="classSVF_1_1ICFGWTO.html">ICFGWTO</a>* wto = _funcToWTO[func];</div>
870
- <div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="comment">// set function entry ES</span></div>
871
- <div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = wto-&gt;<a class="code" href="classSVF_1_1WTO.html#a13e9082913aa4a14065687ccdd47642d">begin</a>(); it!= wto-&gt;<a class="code" href="classSVF_1_1WTO.html#a22b67a51964cb1d7882aab7e74b026f2">end</a>(); ++it)</div>
872
- <div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; {</div>
873
- <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1WTOComponent.html">ICFGWTOComp</a>* cur = *it;</div>
874
- <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1WTONode.html">ICFGWTONode</a>* vertex = SVFUtil::dyn_cast&lt;ICFGWTONode&gt;(cur))</div>
875
- <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; {</div>
876
- <div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; handleWTONode(vertex-&gt;node());</div>
877
- <div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; }</div>
878
- <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1WTOCycle.html">ICFGWTOCycle</a>* cycle = SVFUtil::dyn_cast&lt;ICFGWTOCycle&gt;(cur))</div>
879
- <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; {</div>
880
- <div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; handleCycle(cycle);</div>
881
- <div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; }</div>
882
- <div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="keywordflow">else</span></div>
883
- <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; {</div>
884
- <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;unknown WTO type!&quot;</span>);</div>
885
- <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; }</div>
886
- <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; }</div>
887
- <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160;}</div>
888
- <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; </div>
889
- <div class="line"><a name="l00829"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a896d04a02951947bc228bf97b2c00313"> 829</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a896d04a02951947bc228bf97b2c00313">AbstractInterpretation::handleSVFStatement</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> *stmt)</div>
890
- <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160;{</div>
891
- <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a> *addr = SVFUtil::dyn_cast&lt;AddrStmt&gt;(stmt))</div>
892
- <div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; {</div>
893
- <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; _svfir2ExeState-&gt;handleAddr(addr);</div>
894
- <div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; }</div>
895
- <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1BinaryOPStmt.html">BinaryOPStmt</a> *binary = SVFUtil::dyn_cast&lt;BinaryOPStmt&gt;(stmt))</div>
896
- <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; {</div>
897
- <div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; _svfir2ExeState-&gt;handleBinary(binary);</div>
898
- <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; }</div>
899
- <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CmpStmt.html">CmpStmt</a> *cmp = SVFUtil::dyn_cast&lt;CmpStmt&gt;(stmt))</div>
900
- <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; {</div>
901
- <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; _svfir2ExeState-&gt;handleCmp(cmp);</div>
902
- <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; }</div>
903
- <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;UnaryOPStmt&gt;(stmt))</div>
904
- <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; {</div>
905
- <div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; }</div>
906
- <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BranchStmt&gt;(stmt))</div>
907
- <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; {</div>
908
- <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="comment">// branch stmt is handled in hasBranchES</span></div>
909
- <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; }</div>
910
- <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a> *load = SVFUtil::dyn_cast&lt;LoadStmt&gt;(stmt))</div>
911
- <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; {</div>
912
- <div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; _svfir2ExeState-&gt;handleLoad(load);</div>
913
- <div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; }</div>
914
- <div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a> *store = SVFUtil::dyn_cast&lt;StoreStmt&gt;(stmt))</div>
915
- <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; {</div>
916
- <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; _svfir2ExeState-&gt;handleStore(store);</div>
917
- <div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; }</div>
918
- <div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a> *<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a> = SVFUtil::dyn_cast&lt;CopyStmt&gt;(stmt))</div>
919
- <div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; {</div>
920
- <div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; _svfir2ExeState-&gt;handleCopy(<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>);</div>
921
- <div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; }</div>
922
- <div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a> *gep = SVFUtil::dyn_cast&lt;GepStmt&gt;(stmt))</div>
923
- <div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; {</div>
924
- <div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; _svfir2ExeState-&gt;handleGep(gep);</div>
925
- <div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; }</div>
926
- <div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SelectStmt.html">SelectStmt</a> *select = SVFUtil::dyn_cast&lt;SelectStmt&gt;(stmt))</div>
927
- <div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; {</div>
928
- <div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; _svfir2ExeState-&gt;handleSelect(select);</div>
929
- <div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; }</div>
930
- <div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1PhiStmt.html">PhiStmt</a> *phi = SVFUtil::dyn_cast&lt;PhiStmt&gt;(stmt))</div>
931
- <div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; {</div>
932
- <div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; _svfir2ExeState-&gt;handlePhi(phi);</div>
933
- <div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; }</div>
934
- <div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a> *callPE = SVFUtil::dyn_cast&lt;CallPE&gt;(stmt))</div>
935
- <div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; {</div>
936
- <div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="comment">// To handle Call Edge</span></div>
937
- <div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; _svfir2ExeState-&gt;handleCall(callPE);</div>
938
- <div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; }</div>
939
- <div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a> *retPE = SVFUtil::dyn_cast&lt;RetPE&gt;(stmt))</div>
940
- <div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; {</div>
941
- <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; _svfir2ExeState-&gt;handleRet(retPE);</div>
942
- <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; }</div>
943
- <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="keywordflow">else</span></div>
944
- <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;implement this part&quot;</span>);</div>
945
- <div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160;}</div>
946
- <div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; </div>
866
+ <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; </div>
867
+ <div class="line"><a name="l00807"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a2e2253149e2bf114825a4e838118e012"> 807</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a2e2253149e2bf114825a4e838118e012">AbstractInterpretation::handleFunc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *func)</div>
868
+ <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;{</div>
869
+ <div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; _stat-&gt;getFunctionTrace()++;</div>
870
+ <div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <a class="code" href="classSVF_1_1ICFGWTO.html">ICFGWTO</a>* wto = _funcToWTO[func];</div>
871
+ <div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="comment">// set function entry ES</span></div>
872
+ <div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = wto-&gt;<a class="code" href="classSVF_1_1WTO.html#a13e9082913aa4a14065687ccdd47642d">begin</a>(); it!= wto-&gt;<a class="code" href="classSVF_1_1WTO.html#a22b67a51964cb1d7882aab7e74b026f2">end</a>(); ++it)</div>
873
+ <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; {</div>
874
+ <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1WTOComponent.html">ICFGWTOComp</a>* cur = *it;</div>
875
+ <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1WTONode.html">ICFGWTONode</a>* vertex = SVFUtil::dyn_cast&lt;ICFGWTONode&gt;(cur))</div>
876
+ <div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; {</div>
877
+ <div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; handleWTONode(vertex-&gt;node());</div>
878
+ <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; }</div>
879
+ <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1WTOCycle.html">ICFGWTOCycle</a>* cycle = SVFUtil::dyn_cast&lt;ICFGWTOCycle&gt;(cur))</div>
880
+ <div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; {</div>
881
+ <div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; handleCycle(cycle);</div>
882
+ <div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; }</div>
883
+ <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keywordflow">else</span></div>
884
+ <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; {</div>
885
+ <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;unknown WTO type!&quot;</span>);</div>
886
+ <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; }</div>
887
+ <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; }</div>
888
+ <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160;}</div>
889
+ <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; </div>
890
+ <div class="line"><a name="l00830"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a896d04a02951947bc228bf97b2c00313"> 830</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a896d04a02951947bc228bf97b2c00313">AbstractInterpretation::handleSVFStatement</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> *stmt)</div>
891
+ <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160;{</div>
892
+ <div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a> *addr = SVFUtil::dyn_cast&lt;AddrStmt&gt;(stmt))</div>
893
+ <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; {</div>
894
+ <div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; _svfir2AbsState-&gt;handleAddr(addr);</div>
895
+ <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; }</div>
896
+ <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1BinaryOPStmt.html">BinaryOPStmt</a> *binary = SVFUtil::dyn_cast&lt;BinaryOPStmt&gt;(stmt))</div>
897
+ <div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; {</div>
898
+ <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; _svfir2AbsState-&gt;handleBinary(binary);</div>
899
+ <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; }</div>
900
+ <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CmpStmt.html">CmpStmt</a> *cmp = SVFUtil::dyn_cast&lt;CmpStmt&gt;(stmt))</div>
901
+ <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; {</div>
902
+ <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; _svfir2AbsState-&gt;handleCmp(cmp);</div>
903
+ <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; }</div>
904
+ <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;UnaryOPStmt&gt;(stmt))</div>
905
+ <div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; {</div>
906
+ <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; }</div>
907
+ <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BranchStmt&gt;(stmt))</div>
908
+ <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; {</div>
909
+ <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="comment">// branch stmt is handled in hasBranchES</span></div>
910
+ <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; }</div>
911
+ <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a> *load = SVFUtil::dyn_cast&lt;LoadStmt&gt;(stmt))</div>
912
+ <div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; {</div>
913
+ <div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; _svfir2AbsState-&gt;handleLoad(load);</div>
914
+ <div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; }</div>
915
+ <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a> *store = SVFUtil::dyn_cast&lt;StoreStmt&gt;(stmt))</div>
916
+ <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; {</div>
917
+ <div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; _svfir2AbsState-&gt;handleStore(store);</div>
918
+ <div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; }</div>
919
+ <div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a> *<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a> = SVFUtil::dyn_cast&lt;CopyStmt&gt;(stmt))</div>
920
+ <div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; {</div>
921
+ <div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; _svfir2AbsState-&gt;handleCopy(<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>);</div>
922
+ <div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; }</div>
923
+ <div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a> *gep = SVFUtil::dyn_cast&lt;GepStmt&gt;(stmt))</div>
924
+ <div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; {</div>
925
+ <div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; _svfir2AbsState-&gt;handleGep(gep);</div>
926
+ <div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; }</div>
927
+ <div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SelectStmt.html">SelectStmt</a> *select = SVFUtil::dyn_cast&lt;SelectStmt&gt;(stmt))</div>
928
+ <div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; {</div>
929
+ <div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; _svfir2AbsState-&gt;handleSelect(select);</div>
930
+ <div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; }</div>
931
+ <div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1PhiStmt.html">PhiStmt</a> *phi = SVFUtil::dyn_cast&lt;PhiStmt&gt;(stmt))</div>
932
+ <div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; {</div>
933
+ <div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; _svfir2AbsState-&gt;handlePhi(phi);</div>
934
+ <div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; }</div>
935
+ <div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a> *callPE = SVFUtil::dyn_cast&lt;CallPE&gt;(stmt))</div>
936
+ <div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; {</div>
937
+ <div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <span class="comment">// To handle Call Edge</span></div>
938
+ <div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; _svfir2AbsState-&gt;handleCall(callPE);</div>
939
+ <div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; }</div>
940
+ <div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a> *retPE = SVFUtil::dyn_cast&lt;RetPE&gt;(stmt))</div>
941
+ <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; {</div>
942
+ <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; _svfir2AbsState-&gt;handleRet(retPE);</div>
943
+ <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; }</div>
944
+ <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <span class="keywordflow">else</span></div>
945
+ <div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;implement this part&quot;</span>);</div>
946
+ <div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160;}</div>
947
947
  <div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; </div>
948
- <div class="line"><a name="l00888"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#af966130d5cb8d7db786c3ec056cc2dd4"> 888</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#af966130d5cb8d7db786c3ec056cc2dd4">AbstractInterpretation::SkipRecursiveCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *callNode)</div>
949
- <div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160;{</div>
950
- <div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *callfun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(callNode-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
951
- <div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a> *retNode = callNode-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#ae23a7540609879ac0379fc53b4e7eead">getRetICFGNode</a>();</div>
952
- <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="keywordflow">if</span> (retNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>().size() &gt; 0)</div>
953
- <div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; {</div>
954
- <div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a> *retPE = SVFUtil::dyn_cast&lt;RetPE&gt;(*retNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>().begin()))</div>
955
- <div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; {</div>
956
- <div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> es;</div>
957
- <div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; <span class="keywordflow">if</span> (!retPE-&gt;getLHSVar()-&gt;isPointer() &amp;&amp; !retPE-&gt;getLHSVar()-&gt;isConstDataOrAggDataButNotNullPtr())</div>
958
- <div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; _svfir2ExeState-&gt;getEs()[retPE-&gt;getLHSVarID()] = <a class="code" href="classSVF_1_1IntervalValue.html#add3acad151d5af6c9a5f692f7a01e65b">IntervalValue::top</a>();</div>
959
- <div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; }</div>
960
- <div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; }</div>
961
- <div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <span class="keywordflow">if</span> (!retNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().empty())</div>
962
- <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; {</div>
963
- <div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <span class="keywordflow">if</span> (retNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().size() == 1)</div>
964
- <div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; {</div>
965
- <div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; </div>
966
- <div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; }</div>
967
- <div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <span class="keywordflow">else</span></div>
968
- <div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; {</div>
969
- <div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <span class="keywordflow">return</span>;</div>
970
- <div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; }</div>
971
- <div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; }</div>
972
- <div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; SkipRecursiveFunc(callfun);</div>
973
- <div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160;}</div>
974
- <div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; </div>
975
- <div class="line"><a name="l00915"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a2b0a2f7a662909d999634d0ec08cb29c"> 915</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a2b0a2f7a662909d999634d0ec08cb29c">AbstractInterpretation::SkipRecursiveFunc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *func)</div>
976
- <div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160;{</div>
977
- <div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <span class="comment">// handle Recursive Funcs, go throw every relevant funcs/blocks.</span></div>
978
- <div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="comment">// for every Call Argv, Ret , Global Vars, we make it as Top value</span></div>
979
- <div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;const SVFBasicBlock *&gt;</a> blkWorkList;</div>
980
- <div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;const ICFGNode *&gt;</a> instWorklist;</div>
981
- <div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> * bb: func-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a90e39f78f4908f8a8ef3948d9158791c">getReachableBBs</a>())</div>
982
- <div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; {</div>
983
- <div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* inst: bb-&gt;getInstructionList())</div>
984
- <div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; {</div>
985
- <div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* node = _icfg-&gt;getICFGNode(inst);</div>
986
- <div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> *stmt: node-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>())</div>
987
- <div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; {</div>
988
- <div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a> *store = SVFUtil::dyn_cast&lt;StoreStmt&gt;(stmt))</div>
989
- <div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; {</div>
990
- <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *rhsVar = store-&gt;getRHSVar();</div>
991
- <div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> lhs = store-&gt;getLHSVarID();</div>
992
- <div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a>&amp;curES = _svfir2ExeState-&gt;getEs();</div>
993
- <div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keywordflow">if</span> (curES.<a class="code" href="classSVF_1_1AbstractState.html#aa34516a95191c5ec56ce44a117e8b018">inVarToAddrsTable</a>(lhs))</div>
994
- <div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; {</div>
995
- <div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <span class="keywordflow">if</span> (!rhsVar-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>() &amp;&amp; !rhsVar-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a091ef22d4fc428985d604b03f287a941">isConstDataOrAggDataButNotNullPtr</a>())</div>
996
- <div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; {</div>
997
- <div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keyword">const</span> <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> &amp;addrs =curES.<a class="code" href="classSVF_1_1AbstractState.html#a234d0b11624febec605bc028f093240b">getAddrs</a>(lhs);</div>
998
- <div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;addr: addrs.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
999
- <div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; {</div>
1000
- <div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; curES.<a class="code" href="classSVF_1_1AbstractState.html#a1f935ea8ab16b04699284bf92bbbb23c">store</a>(addr, <a class="code" href="classSVF_1_1IntervalValue.html#add3acad151d5af6c9a5f692f7a01e65b">IntervalValue::top</a>());</div>
1001
- <div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; }</div>
1002
- <div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; }</div>
1003
- <div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; }</div>
1004
- <div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; }</div>
1005
- <div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; }</div>
1006
- <div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; }</div>
1007
- <div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; }</div>
1008
- <div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160;}</div>
1009
- <div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; </div>
1010
- <div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160;<span class="comment">// count the size of memory map</span></div>
1011
- <div class="line"><a name="l00951"></a><span class="lineno"><a class="line" href="classSVF_1_1AEStat.html#ae2cfe939670689a4ec5030c096a5f546"> 951</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AEStat.html#ae2cfe939670689a4ec5030c096a5f546">AEStat::countStateSize</a>()</div>
1012
- <div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160;{</div>
1013
- <div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a> == 0)</div>
1014
- <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; {</div>
1015
- <div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Var_AVG_Num&quot;</span>] = 0;</div>
1016
- <div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Loc_AVG_Num&quot;</span>] = 0;</div>
1017
- <div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Var_Addr_AVG_Num&quot;</span>] = 0;</div>
1018
- <div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Loc_Addr_AVG_Num&quot;</span>] = 0;</div>
1019
- <div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; }</div>
1020
- <div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; ++<a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a>;</div>
1021
- <div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Var_AVG_Num&quot;</span>] += _ae-&gt;_svfir2ExeState-&gt;getEs().getVarToVal().size();</div>
1022
- <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Loc_AVG_Num&quot;</span>] += _ae-&gt;_svfir2ExeState-&gt;getEs().getLocToVal().size();</div>
1023
- <div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160;}</div>
1024
- <div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; </div>
1025
- <div class="line"><a name="l00965"></a><span class="lineno"><a class="line" href="classSVF_1_1AEStat.html#a5b246c2175c44454236242dcf426f21f"> 965</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AEStat.html#a5b246c2175c44454236242dcf426f21f">AEStat::finializeStat</a>()</div>
1026
- <div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160;{</div>
1027
- <div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; memUsage = getMemUsage();</div>
1028
- <div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a> &gt; 0)</div>
1029
- <div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; {</div>
1030
- <div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Var_AVG_Num&quot;</span>] /= <a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a>;</div>
1031
- <div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Loc_AVG_Num&quot;</span>] /= <a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a>;</div>
1032
- <div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Var_Addr_AVG_Num&quot;</span>] /= <a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a>;</div>
1033
- <div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Loc_Addr_AVG_Num&quot;</span>] /= <a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a>;</div>
1034
- <div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; }</div>
1035
- <div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; generalNumMap[<span class="stringliteral">&quot;SVF_STMT_NUM&quot;</span>] = <a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a>;</div>
1036
- <div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; generalNumMap[<span class="stringliteral">&quot;ICFG_Node_Num&quot;</span>] = _ae-&gt;_svfir-&gt;getICFG()-&gt;nodeNum;</div>
1037
- <div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> callSiteNum = 0;</div>
1038
- <div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> extCallSiteNum = 0;</div>
1039
- <div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFFunction *&gt;</a> funs;</div>
1040
- <div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;it: *_ae-&gt;_svfir-&gt;getICFG())</div>
1041
- <div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; {</div>
1042
- <div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <span class="keywordflow">if</span> (it.second-&gt;getFun())</div>
1043
- <div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; {</div>
1044
- <div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; funs.insert(it.second-&gt;getFun());</div>
1045
- <div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; }</div>
1046
- <div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *callNode = dyn_cast&lt;CallICFGNode&gt;(it.second))</div>
1047
- <div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; {</div>
1048
- <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(callNode-&gt;getCallSite()))</div>
1049
- <div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; {</div>
1050
- <div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; callSiteNum++;</div>
1051
- <div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; }</div>
1052
- <div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; <span class="keywordflow">else</span></div>
1053
- <div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; {</div>
1054
- <div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; extCallSiteNum++;</div>
1055
- <div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; }</div>
1056
- <div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; }</div>
1057
- <div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; }</div>
1058
- <div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; generalNumMap[<span class="stringliteral">&quot;Func_Num&quot;</span>] = funs.size();</div>
1059
- <div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; generalNumMap[<span class="stringliteral">&quot;EXT_CallSite_Num&quot;</span>] = extCallSiteNum;</div>
1060
- <div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; generalNumMap[<span class="stringliteral">&quot;NonEXT_CallSite_Num&quot;</span>] = callSiteNum;</div>
1061
- <div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; generalNumMap[<span class="stringliteral">&quot;Bug_Num&quot;</span>] = _ae-&gt;_nodeToBugInfo.size();</div>
1062
- <div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; timeStatMap[<span class="stringliteral">&quot;Total_Time(sec)&quot;</span>] = (double)(endTime - startTime) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
1063
- <div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; </div>
1064
- <div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;}</div>
1065
- <div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; </div>
1066
- <div class="line"><a name="l01006"></a><span class="lineno"><a class="line" href="classSVF_1_1AEStat.html#a798d07cc0a36ce0d9010ab86d1ec216f"> 1006</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AEStat.html#a798d07cc0a36ce0d9010ab86d1ec216f">AEStat::performStat</a>()</div>
1067
- <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;{</div>
1068
- <div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> fullName(_ae-&gt;_moduleName);</div>
1069
- <div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>;</div>
1070
- <div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> moduleName;</div>
1071
- <div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <span class="keywordflow">if</span> (fullName.find(<span class="charliteral">&#39;/&#39;</span>) == std::string::npos)</div>
1072
- <div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; {</div>
1073
- <div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a> = fullName;</div>
1074
- <div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; moduleName = <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>.substr(0, fullName.find(<span class="charliteral">&#39;.&#39;</span>));</div>
1075
- <div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; }</div>
1076
- <div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="keywordflow">else</span></div>
1077
- <div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; {</div>
1078
- <div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a> = fullName.substr(fullName.find(<span class="charliteral">&#39;/&#39;</span>), fullName.size());</div>
1079
- <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; moduleName = <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>.substr(0, fullName.find(<span class="charliteral">&#39;.&#39;</span>));</div>
1080
- <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; }</div>
1081
- <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; </div>
1082
- <div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n************************\n&quot;</span>;</div>
1083
- <div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;################ (program : &quot;</span> &lt;&lt; moduleName &lt;&lt; <span class="stringliteral">&quot;)###############\n&quot;</span>;</div>
1084
- <div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flags(std::ios::left);</div>
1085
- <div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <span class="keywordtype">unsigned</span> field_width = 30;</div>
1086
- <div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">for</span> (NUMStatMap::iterator it = generalNumMap.begin(), eit = generalNumMap.end(); it != eit; ++it)</div>
1087
- <div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; {</div>
1088
- <div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="comment">// format out put with width 20 space</span></div>
1089
- <div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; std::cout &lt;&lt; std::setw(field_width) &lt;&lt; it-&gt;first &lt;&lt; it-&gt;second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
1090
- <div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; }</div>
1091
- <div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;-------------------------------------------------------\n&quot;</span>;</div>
1092
- <div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="keywordflow">for</span> (TIMEStatMap::iterator it = timeStatMap.begin(), eit = timeStatMap.end(); it != eit; ++it)</div>
1093
- <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; {</div>
1094
- <div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; <span class="comment">// format out put with width 20 space</span></div>
1095
- <div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; std::setw(field_width) &lt;&lt; it-&gt;first &lt;&lt; it-&gt;second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
1096
- <div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; }</div>
1097
- <div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;Memory usage: &quot;</span> &lt;&lt; memUsage &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
1098
- <div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; </div>
1099
- <div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;#######################################################&quot;</span> &lt;&lt; std::endl;</div>
1100
- <div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flush();</div>
1101
- <div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;}</div>
1102
- <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; </div>
1103
- <div class="line"><a name="l01043"></a><span class="lineno"><a class="line" href="classSVF_1_1AEStat.html#ae24590233a864e18a6b0948bef89201a"> 1043</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AEStat.html#ae24590233a864e18a6b0948bef89201a">AEStat::reportBug</a>()</div>
1104
- <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;{</div>
948
+ <div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; </div>
949
+ <div class="line"><a name="l00889"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#af966130d5cb8d7db786c3ec056cc2dd4"> 889</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#af966130d5cb8d7db786c3ec056cc2dd4">AbstractInterpretation::SkipRecursiveCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *callNode)</div>
950
+ <div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160;{</div>
951
+ <div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *callfun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(callNode-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
952
+ <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a> *retNode = callNode-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#ae23a7540609879ac0379fc53b4e7eead">getRetICFGNode</a>();</div>
953
+ <div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="keywordflow">if</span> (retNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>().size() &gt; 0)</div>
954
+ <div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; {</div>
955
+ <div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a> *retPE = SVFUtil::dyn_cast&lt;RetPE&gt;(*retNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>().begin()))</div>
956
+ <div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; {</div>
957
+ <div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a> es;</div>
958
+ <div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="keywordflow">if</span> (!retPE-&gt;getLHSVar()-&gt;isPointer() &amp;&amp; !retPE-&gt;getLHSVar()-&gt;isConstDataOrAggDataButNotNullPtr())</div>
959
+ <div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; _svfir2AbsState-&gt;getAbsState()[retPE-&gt;getLHSVarID()] = <a class="code" href="classSVF_1_1IntervalValue.html#add3acad151d5af6c9a5f692f7a01e65b">IntervalValue::top</a>();</div>
960
+ <div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; }</div>
961
+ <div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; }</div>
962
+ <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <span class="keywordflow">if</span> (!retNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().empty())</div>
963
+ <div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; {</div>
964
+ <div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <span class="keywordflow">if</span> (retNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().size() == 1)</div>
965
+ <div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; {</div>
966
+ <div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; </div>
967
+ <div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; }</div>
968
+ <div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <span class="keywordflow">else</span></div>
969
+ <div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; {</div>
970
+ <div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <span class="keywordflow">return</span>;</div>
971
+ <div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; }</div>
972
+ <div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; }</div>
973
+ <div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; SkipRecursiveFunc(callfun);</div>
974
+ <div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160;}</div>
975
+ <div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; </div>
976
+ <div class="line"><a name="l00916"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a2b0a2f7a662909d999634d0ec08cb29c"> 916</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a2b0a2f7a662909d999634d0ec08cb29c">AbstractInterpretation::SkipRecursiveFunc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *func)</div>
977
+ <div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160;{</div>
978
+ <div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="comment">// handle Recursive Funcs, go throw every relevant funcs/blocks.</span></div>
979
+ <div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <span class="comment">// for every Call Argv, Ret , Global Vars, we make it as Top value</span></div>
980
+ <div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;const SVFBasicBlock *&gt;</a> blkWorkList;</div>
981
+ <div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;const ICFGNode *&gt;</a> instWorklist;</div>
982
+ <div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> * bb: func-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a90e39f78f4908f8a8ef3948d9158791c">getReachableBBs</a>())</div>
983
+ <div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; {</div>
984
+ <div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* inst: bb-&gt;getInstructionList())</div>
985
+ <div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; {</div>
986
+ <div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* node = _icfg-&gt;getICFGNode(inst);</div>
987
+ <div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> *stmt: node-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>())</div>
988
+ <div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; {</div>
989
+ <div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a> *store = SVFUtil::dyn_cast&lt;StoreStmt&gt;(stmt))</div>
990
+ <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; {</div>
991
+ <div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *rhsVar = store-&gt;getRHSVar();</div>
992
+ <div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> lhs = store-&gt;getLHSVarID();</div>
993
+ <div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a>&amp;curES = _svfir2AbsState-&gt;getAbsState();</div>
994
+ <div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="keywordflow">if</span> (curES.<a class="code" href="classSVF_1_1AbstractState.html#aa34516a95191c5ec56ce44a117e8b018">inVarToAddrsTable</a>(lhs))</div>
995
+ <div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; {</div>
996
+ <div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <span class="keywordflow">if</span> (!rhsVar-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>() &amp;&amp; !rhsVar-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a091ef22d4fc428985d604b03f287a941">isConstDataOrAggDataButNotNullPtr</a>())</div>
997
+ <div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; {</div>
998
+ <div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keyword">const</span> <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> &amp;addrs =curES.<a class="code" href="classSVF_1_1AbstractState.html#a234d0b11624febec605bc028f093240b">getAddrs</a>(lhs);</div>
999
+ <div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;addr: addrs.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
1000
+ <div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; {</div>
1001
+ <div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; curES.<a class="code" href="classSVF_1_1AbstractState.html#a1f935ea8ab16b04699284bf92bbbb23c">store</a>(addr, <a class="code" href="classSVF_1_1IntervalValue.html#add3acad151d5af6c9a5f692f7a01e65b">IntervalValue::top</a>());</div>
1002
+ <div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; }</div>
1003
+ <div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; }</div>
1004
+ <div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; }</div>
1005
+ <div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; }</div>
1006
+ <div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; }</div>
1007
+ <div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; }</div>
1008
+ <div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; }</div>
1009
+ <div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160;}</div>
1010
+ <div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; </div>
1011
+ <div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160;<span class="comment">// count the size of memory map</span></div>
1012
+ <div class="line"><a name="l00952"></a><span class="lineno"><a class="line" href="classSVF_1_1AEStat.html#ae2cfe939670689a4ec5030c096a5f546"> 952</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AEStat.html#ae2cfe939670689a4ec5030c096a5f546">AEStat::countStateSize</a>()</div>
1013
+ <div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160;{</div>
1014
+ <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a> == 0)</div>
1015
+ <div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; {</div>
1016
+ <div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Var_AVG_Num&quot;</span>] = 0;</div>
1017
+ <div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Loc_AVG_Num&quot;</span>] = 0;</div>
1018
+ <div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Var_Addr_AVG_Num&quot;</span>] = 0;</div>
1019
+ <div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Loc_Addr_AVG_Num&quot;</span>] = 0;</div>
1020
+ <div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; }</div>
1021
+ <div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; ++<a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a>;</div>
1022
+ <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Var_AVG_Num&quot;</span>] +=</div>
1023
+ <div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; _ae-&gt;_svfir2AbsState-&gt;getAbsState().getVarToVal().size();</div>
1024
+ <div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Loc_AVG_Num&quot;</span>] +=</div>
1025
+ <div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; _ae-&gt;_svfir2AbsState-&gt;getAbsState().getLocToVal().size();</div>
1026
+ <div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160;}</div>
1027
+ <div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; </div>
1028
+ <div class="line"><a name="l00968"></a><span class="lineno"><a class="line" href="classSVF_1_1AEStat.html#a5b246c2175c44454236242dcf426f21f"> 968</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AEStat.html#a5b246c2175c44454236242dcf426f21f">AEStat::finializeStat</a>()</div>
1029
+ <div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160;{</div>
1030
+ <div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; memUsage = getMemUsage();</div>
1031
+ <div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a> &gt; 0)</div>
1032
+ <div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; {</div>
1033
+ <div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Var_AVG_Num&quot;</span>] /= <a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a>;</div>
1034
+ <div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Loc_AVG_Num&quot;</span>] /= <a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a>;</div>
1035
+ <div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Var_Addr_AVG_Num&quot;</span>] /= <a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a>;</div>
1036
+ <div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; generalNumMap[<span class="stringliteral">&quot;ES_Loc_Addr_AVG_Num&quot;</span>] /= <a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a>;</div>
1037
+ <div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; }</div>
1038
+ <div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; generalNumMap[<span class="stringliteral">&quot;SVF_STMT_NUM&quot;</span>] = <a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a>;</div>
1039
+ <div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; generalNumMap[<span class="stringliteral">&quot;ICFG_Node_Num&quot;</span>] = _ae-&gt;_svfir-&gt;getICFG()-&gt;nodeNum;</div>
1040
+ <div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> callSiteNum = 0;</div>
1041
+ <div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> extCallSiteNum = 0;</div>
1042
+ <div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFFunction *&gt;</a> funs;</div>
1043
+ <div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;it: *_ae-&gt;_svfir-&gt;getICFG())</div>
1044
+ <div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; {</div>
1045
+ <div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <span class="keywordflow">if</span> (it.second-&gt;getFun())</div>
1046
+ <div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; {</div>
1047
+ <div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; funs.insert(it.second-&gt;getFun());</div>
1048
+ <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; }</div>
1049
+ <div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *callNode = dyn_cast&lt;CallICFGNode&gt;(it.second))</div>
1050
+ <div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; {</div>
1051
+ <div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(callNode-&gt;getCallSite()))</div>
1052
+ <div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; {</div>
1053
+ <div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; callSiteNum++;</div>
1054
+ <div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; }</div>
1055
+ <div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <span class="keywordflow">else</span></div>
1056
+ <div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; {</div>
1057
+ <div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; extCallSiteNum++;</div>
1058
+ <div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; }</div>
1059
+ <div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; }</div>
1060
+ <div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; }</div>
1061
+ <div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; generalNumMap[<span class="stringliteral">&quot;Func_Num&quot;</span>] = funs.size();</div>
1062
+ <div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; generalNumMap[<span class="stringliteral">&quot;EXT_CallSite_Num&quot;</span>] = extCallSiteNum;</div>
1063
+ <div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; generalNumMap[<span class="stringliteral">&quot;NonEXT_CallSite_Num&quot;</span>] = callSiteNum;</div>
1064
+ <div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; generalNumMap[<span class="stringliteral">&quot;Bug_Num&quot;</span>] = _ae-&gt;_nodeToBugInfo.size();</div>
1065
+ <div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; timeStatMap[<span class="stringliteral">&quot;Total_Time(sec)&quot;</span>] = (double)(endTime - startTime) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
1066
+ <div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; </div>
1067
+ <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;}</div>
1068
+ <div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; </div>
1069
+ <div class="line"><a name="l01009"></a><span class="lineno"><a class="line" href="classSVF_1_1AEStat.html#a798d07cc0a36ce0d9010ab86d1ec216f"> 1009</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AEStat.html#a798d07cc0a36ce0d9010ab86d1ec216f">AEStat::performStat</a>()</div>
1070
+ <div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;{</div>
1071
+ <div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> fullName(_ae-&gt;_moduleName);</div>
1072
+ <div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>;</div>
1073
+ <div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> moduleName;</div>
1074
+ <div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <span class="keywordflow">if</span> (fullName.find(<span class="charliteral">&#39;/&#39;</span>) == std::string::npos)</div>
1075
+ <div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; {</div>
1076
+ <div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a> = fullName;</div>
1077
+ <div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; moduleName = <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>.substr(0, fullName.find(<span class="charliteral">&#39;.&#39;</span>));</div>
1078
+ <div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; }</div>
1079
+ <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <span class="keywordflow">else</span></div>
1080
+ <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; {</div>
1081
+ <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a> = fullName.substr(fullName.find(<span class="charliteral">&#39;/&#39;</span>), fullName.size());</div>
1082
+ <div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; moduleName = <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>.substr(0, fullName.find(<span class="charliteral">&#39;.&#39;</span>));</div>
1083
+ <div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; }</div>
1084
+ <div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; </div>
1085
+ <div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n************************\n&quot;</span>;</div>
1086
+ <div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;################ (program : &quot;</span> &lt;&lt; moduleName &lt;&lt; <span class="stringliteral">&quot;)###############\n&quot;</span>;</div>
1087
+ <div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flags(std::ios::left);</div>
1088
+ <div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keywordtype">unsigned</span> field_width = 30;</div>
1089
+ <div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keywordflow">for</span> (NUMStatMap::iterator it = generalNumMap.begin(), eit = generalNumMap.end(); it != eit; ++it)</div>
1090
+ <div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; {</div>
1091
+ <div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="comment">// format out put with width 20 space</span></div>
1092
+ <div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; std::cout &lt;&lt; std::setw(field_width) &lt;&lt; it-&gt;first &lt;&lt; it-&gt;second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
1093
+ <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; }</div>
1094
+ <div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;-------------------------------------------------------\n&quot;</span>;</div>
1095
+ <div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="keywordflow">for</span> (TIMEStatMap::iterator it = timeStatMap.begin(), eit = timeStatMap.end(); it != eit; ++it)</div>
1096
+ <div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; {</div>
1097
+ <div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="comment">// format out put with width 20 space</span></div>
1098
+ <div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; std::setw(field_width) &lt;&lt; it-&gt;first &lt;&lt; it-&gt;second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
1099
+ <div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; }</div>
1100
+ <div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;Memory usage: &quot;</span> &lt;&lt; memUsage &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
1101
+ <div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; </div>
1102
+ <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;#######################################################&quot;</span> &lt;&lt; std::endl;</div>
1103
+ <div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flush();</div>
1104
+ <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;}</div>
1105
1105
  <div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; </div>
1106
- <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; std::ofstream f;</div>
1107
- <div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ad989eab7d521e9933ac8e46e1c29f662">Options::OutputName</a>().size() == 0)</div>
1108
- <div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; {</div>
1109
- <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; f.open(<span class="stringliteral">&quot;/dev/null&quot;</span>);</div>
1110
- <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; }</div>
1111
- <div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <span class="keywordflow">else</span></div>
1112
- <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; {</div>
1113
- <div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; f.open(<a class="code" href="classSVF_1_1Options.html#ad989eab7d521e9933ac8e46e1c29f662">Options::OutputName</a>());</div>
1114
- <div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; }</div>
1115
- <div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; </div>
1116
- <div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; std::cerr &lt;&lt; <span class="stringliteral">&quot;######################Full Overflow (&quot;</span> + std::to_string(_ae-&gt;_nodeToBugInfo.size()) + <span class="stringliteral">&quot; found)######################\n&quot;</span>;</div>
1117
- <div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;######################Full Overflow (&quot;</span> + std::to_string(_ae-&gt;_nodeToBugInfo.size()) + <span class="stringliteral">&quot; found)######################\n&quot;</span>;</div>
1118
- <div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; std::cerr &lt;&lt; <span class="stringliteral">&quot;---------------------------------------------\n&quot;</span>;</div>
1119
- <div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;---------------------------------------------\n&quot;</span>;</div>
1120
- <div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; it: _ae-&gt;_nodeToBugInfo)</div>
1121
- <div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; {</div>
1122
- <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; std::cerr &lt;&lt; it.second &lt;&lt; <span class="stringliteral">&quot;---------------------------------------------\n&quot;</span>;</div>
1123
- <div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; f &lt;&lt; it.second &lt;&lt; <span class="stringliteral">&quot;---------------------------------------------\n&quot;</span>;</div>
1124
- <div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; }</div>
1125
- <div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;}</div>
1126
- <div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; </div>
1127
- <div class="line"><a name="l01067"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#ab18fe64117c1692d94ce0e0ee44e940b"> 1067</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#ab18fe64117c1692d94ce0e0ee44e940b">AbstractInterpretation::initExtFunMap</a>()</div>
1128
- <div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;{</div>
1129
- <div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;<span class="preprocessor">#define SSE_FUNC_PROCESS(LLVM_NAME ,FUNC_NAME) \</span></div>
1130
- <div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;<span class="preprocessor"> auto sse_##FUNC_NAME = [this](const CallSite &amp;cs) { \</span></div>
1131
- <div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;<span class="preprocessor"> </span><span class="comment">/* run real ext function */</span><span class="preprocessor"> \</span></div>
1132
- <div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;<span class="preprocessor"> AbstractState&amp;es = _svfir2ExeState-&gt;getEs(); \</span></div>
1133
- <div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;<span class="preprocessor"> u32_t rhs_id = _svfir-&gt;getValueNode(cs.getArgument(0)); \</span></div>
1134
- <div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;<span class="preprocessor"> if (!es.inVarToValTable(rhs_id)) return; \</span></div>
1135
- <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;<span class="preprocessor"> u32_t rhs = _svfir2ExeState-&gt;getEs()[rhs_id].getInterval().lb().getIntNumeral(); \</span></div>
1136
- <div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;<span class="preprocessor"> s32_t res = FUNC_NAME(rhs); \</span></div>
1137
- <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;<span class="preprocessor"> u32_t lhsId = _svfir-&gt;getValueNode(cs.getInstruction()); \</span></div>
1138
- <div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;<span class="preprocessor"> _svfir2ExeState-&gt;getEs()[lhsId] = IntervalValue(res); \</span></div>
1139
- <div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;<span class="preprocessor"> return; \</span></div>
1140
- <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;<span class="preprocessor"> }; \</span></div>
1141
- <div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;<span class="preprocessor"> _func_map[#FUNC_NAME] = sse_##FUNC_NAME; \</span></div>
1142
- <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;<span class="preprocessor"></span> </div>
1143
- <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#abe92a0aebef4717d08c64655ac44c9af">isalnum</a>, <a class="code" href="extapi_8c.html#abe92a0aebef4717d08c64655ac44c9af">isalnum</a>);</div>
1144
- <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#af947cbf1ae303e5297c9d68c68a6b9cb">isalpha</a>, <a class="code" href="extapi_8c.html#af947cbf1ae303e5297c9d68c68a6b9cb">isalpha</a>);</div>
1145
- <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#aaecd098576b00440124c44580144e8d5">isblank</a>, <a class="code" href="extapi_8c.html#aaecd098576b00440124c44580144e8d5">isblank</a>);</div>
1146
- <div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#a0008a4e8e7889734dc1d83297de07158">iscntrl</a>, <a class="code" href="extapi_8c.html#a0008a4e8e7889734dc1d83297de07158">iscntrl</a>);</div>
1147
- <div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#a3fa45b35c8abf67a950b6d3d4063dede">isdigit</a>, <a class="code" href="extapi_8c.html#a3fa45b35c8abf67a950b6d3d4063dede">isdigit</a>);</div>
1148
- <div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#a49f40fd869fd0c90e4497fda08c89561">isgraph</a>, <a class="code" href="extapi_8c.html#a49f40fd869fd0c90e4497fda08c89561">isgraph</a>);</div>
1149
- <div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#a99355d8f0fb41ec43effb95189db0ed4">isprint</a>, <a class="code" href="extapi_8c.html#a99355d8f0fb41ec43effb95189db0ed4">isprint</a>);</div>
1150
- <div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#a9d60842d6ae065229ba810e6b01110da">ispunct</a>, <a class="code" href="extapi_8c.html#a9d60842d6ae065229ba810e6b01110da">ispunct</a>);</div>
1151
- <div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#a84b34b0058324ae5c0eae4956cf00cc5">isspace</a>, <a class="code" href="extapi_8c.html#a84b34b0058324ae5c0eae4956cf00cc5">isspace</a>);</div>
1152
- <div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#adadd6582d46775aab6a51e29d16d9f77">isupper</a>, <a class="code" href="extapi_8c.html#adadd6582d46775aab6a51e29d16d9f77">isupper</a>);</div>
1153
- <div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#adaf3aadefe3fc4fb07b6be0d7b880f53">isxdigit</a>, <a class="code" href="extapi_8c.html#adaf3aadefe3fc4fb07b6be0d7b880f53">isxdigit</a>);</div>
1154
- <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="namespacellvm.html">llvm</a>.sin.f64, sin);</div>
1155
- <div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="namespacellvm.html">llvm</a>.cos.f64, cos);</div>
1156
- <div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="namespacellvm.html">llvm</a>.tan.f64, tan);</div>
1157
- <div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="namespacellvm.html">llvm</a>.log.f64, log);</div>
1158
- <div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(sinh, sinh);</div>
1159
- <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(cosh, cosh);</div>
1160
- <div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(tanh, tanh);</div>
1161
- <div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; </div>
1162
- <div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="keyword">auto</span> sse_svf_assert = [<span class="keyword">this</span>](<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> &amp;cs)</div>
1163
- <div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; {</div>
1164
- <div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callNode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(_svfir-&gt;getICFG()-&gt;getICFGNode(cs.getInstruction()));</div>
1165
- <div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; _checkpoints.erase(callNode);</div>
1166
- <div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> arg0 = _svfir-&gt;getValueNode(cs.getArgument(0));</div>
1167
- <div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a>&amp;es = _svfir2ExeState-&gt;getEs();</div>
1168
- <div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; es[arg0].getInterval().meet_with(<a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 1));</div>
1169
- <div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <span class="keywordflow">if</span> (es[arg0].getInterval().equals(<a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 1)))</div>
1170
- <div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; {</div>
1171
- <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a05dc00b2bd9a8176aae31b6cfffe725d">SVFUtil::sucMsg</a>(<span class="stringliteral">&quot;The assertion is successfully verified!!\n&quot;</span>);</div>
1172
- <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; }</div>
1173
- <div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <span class="keywordflow">else</span></div>
1174
- <div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; {</div>
1175
- <div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt;<span class="stringliteral">&quot;svf_assert Fail. &quot;</span> &lt;&lt; cs.getInstruction()-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
1176
- <div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; assert(<span class="keyword">false</span>);</div>
1177
- <div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; }</div>
1178
- <div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; <span class="keywordflow">return</span>;</div>
1179
- <div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; };</div>
1180
- <div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; _func_map[<span class="stringliteral">&quot;svf_assert&quot;</span>] = sse_svf_assert;</div>
1181
- <div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; </div>
1182
- <div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="keyword">auto</span> svf_print = [&amp;](<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> &amp;cs)</div>
1183
- <div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; {</div>
1184
- <div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 2) <span class="keywordflow">return</span>;</div>
1185
- <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a>&amp;es = _svfir2ExeState-&gt;getEs();</div>
1186
- <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num_id = _svfir-&gt;getValueNode(cs.getArgument(0));</div>
1187
- <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> text = strRead(cs.getArgument(1));</div>
1188
- <div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; assert(es.<a class="code" href="classSVF_1_1AbstractState.html#ab4d209d0739f2c45dbc2a7e61318e2e3">inVarToValTable</a>(num_id) &amp;&amp; <span class="stringliteral">&quot;print() should pass integer&quot;</span>);</div>
1189
- <div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> itv = es[num_id].getInterval();</div>
1190
- <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;Text: &quot;</span> &lt;&lt; text &lt;&lt;<span class="stringliteral">&quot;, Value: &quot;</span> &lt;&lt; cs.getArgument(0)-&gt;<a class="code" href="classSVF_1_1AbstractState.html#a7c802c006225a50b1d83b5f78d0891fa">toString</a>() &lt;&lt; <span class="stringliteral">&quot;, PrintVal: &quot;</span> &lt;&lt; itv.<a class="code" href="classSVF_1_1IntervalValue.html#a5d73cc2aa0a6ed49e8301fa7b0cd5045">toString</a>() &lt;&lt; std::endl;</div>
1191
- <div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <span class="keywordflow">return</span>;</div>
1192
- <div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; };</div>
1193
- <div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; _func_map[<span class="stringliteral">&quot;svf_print&quot;</span>] = svf_print;</div>
1194
- <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; </div>
1195
- <div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="comment">// init _checkpoint_names</span></div>
1196
- <div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; _checkpoint_names.insert(<span class="stringliteral">&quot;svf_assert&quot;</span>);</div>
1197
- <div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;};</div>
1198
- <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; </div>
1199
- <div class="line"><a name="l01139"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a7dfd11b987d9ff9528277e23191ed95d"> 1139</a></span>&#160;<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a7dfd11b987d9ff9528277e23191ed95d">AbstractInterpretation::strRead</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* rhs)</div>
1200
- <div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;{</div>
1201
- <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="comment">// sse read string nodeID-&gt;string</span></div>
1202
- <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a>&amp;es = _svfir2ExeState-&gt;getEs();</div>
1203
- <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str0;</div>
1204
- <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; </div>
1205
- <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>(); <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>++)</div>
1206
- <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; {</div>
1207
- <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; <span class="comment">// dead loop for string and break if there&#39;s a \0. If no \0, it will throw err.</span></div>
1208
- <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keywordflow">if</span> (!es.<a class="code" href="classSVF_1_1AbstractState.html#aa34516a95191c5ec56ce44a117e8b018">inVarToAddrsTable</a>(_svfir-&gt;getValueNode(rhs))) <span class="keywordflow">continue</span>;</div>
1209
- <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> expr0 = _svfir2ExeState-&gt;getGepObjAddress(_svfir-&gt;getValueNode(rhs), <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>);</div>
1210
- <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> val(<a class="code" href="structSVF_1_1AbstractValue.html#af93f4b54b34e74579ad177ead629b53aa3a7df767184a0bf01de99351747f545a">AbstractValue::UnknownType</a>);</div>
1211
- <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;addr: expr0.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
1212
- <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; {</div>
1213
- <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; val.<a class="code" href="structSVF_1_1AbstractValue.html#a52a8a738896179a148581e1060a2ed66">join_with</a>(es.<a class="code" href="classSVF_1_1AbstractState.html#aa057c4c27e613d239161c04daf3a46d0">load</a>(addr));</div>
1214
- <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; }</div>
1215
- <div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; <span class="keywordflow">if</span> (val.<a class="code" href="structSVF_1_1AbstractValue.html#a61516b8cd3550afd29f80fbe8c9146ff">isUnknown</a>())</div>
1216
- <div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; <span class="keywordflow">return</span> str0;</div>
1217
- <div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <span class="keywordflow">if</span> (!val.<a class="code" href="structSVF_1_1AbstractValue.html#aae73e4c65c0324946849f03881f05c3b">is_numeral</a>())</div>
1218
- <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; {</div>
1219
- <div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; <span class="keywordflow">break</span>;</div>
1220
- <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; }</div>
1221
- <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <span class="keywordflow">if</span> ((<span class="keywordtype">char</span>) val.<a class="code" href="structSVF_1_1AbstractValue.html#ac9149740b6c33f33e70cc2aa4f89040e">getIntNumeral</a>() == <span class="charliteral">&#39;\0&#39;</span>)</div>
1106
+ <div class="line"><a name="l01046"></a><span class="lineno"><a class="line" href="classSVF_1_1AEStat.html#ae24590233a864e18a6b0948bef89201a"> 1046</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AEStat.html#ae24590233a864e18a6b0948bef89201a">AEStat::reportBug</a>()</div>
1107
+ <div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;{</div>
1108
+ <div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; </div>
1109
+ <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; std::ofstream f;</div>
1110
+ <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ad989eab7d521e9933ac8e46e1c29f662">Options::OutputName</a>().size() == 0)</div>
1111
+ <div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; {</div>
1112
+ <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; f.open(<span class="stringliteral">&quot;/dev/null&quot;</span>);</div>
1113
+ <div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; }</div>
1114
+ <div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; <span class="keywordflow">else</span></div>
1115
+ <div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; {</div>
1116
+ <div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; f.open(<a class="code" href="classSVF_1_1Options.html#ad989eab7d521e9933ac8e46e1c29f662">Options::OutputName</a>());</div>
1117
+ <div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; }</div>
1118
+ <div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; </div>
1119
+ <div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; std::cerr &lt;&lt; <span class="stringliteral">&quot;######################Full Overflow (&quot;</span> + std::to_string(_ae-&gt;_nodeToBugInfo.size()) + <span class="stringliteral">&quot; found)######################\n&quot;</span>;</div>
1120
+ <div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;######################Full Overflow (&quot;</span> + std::to_string(_ae-&gt;_nodeToBugInfo.size()) + <span class="stringliteral">&quot; found)######################\n&quot;</span>;</div>
1121
+ <div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; std::cerr &lt;&lt; <span class="stringliteral">&quot;---------------------------------------------\n&quot;</span>;</div>
1122
+ <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;---------------------------------------------\n&quot;</span>;</div>
1123
+ <div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; it: _ae-&gt;_nodeToBugInfo)</div>
1124
+ <div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; {</div>
1125
+ <div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; std::cerr &lt;&lt; it.second &lt;&lt; <span class="stringliteral">&quot;---------------------------------------------\n&quot;</span>;</div>
1126
+ <div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; f &lt;&lt; it.second &lt;&lt; <span class="stringliteral">&quot;---------------------------------------------\n&quot;</span>;</div>
1127
+ <div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; }</div>
1128
+ <div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;}</div>
1129
+ <div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; </div>
1130
+ <div class="line"><a name="l01070"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#ab18fe64117c1692d94ce0e0ee44e940b"> 1070</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#ab18fe64117c1692d94ce0e0ee44e940b">AbstractInterpretation::initExtFunMap</a>()</div>
1131
+ <div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;{</div>
1132
+ <div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;<span class="preprocessor">#define SSE_FUNC_PROCESS(LLVM_NAME ,FUNC_NAME) \</span></div>
1133
+ <div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;<span class="preprocessor"> auto sse_##FUNC_NAME = [this](const CallSite &amp;cs) { \</span></div>
1134
+ <div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;<span class="preprocessor"> </span><span class="comment">/* run real ext function */</span><span class="preprocessor"> \</span></div>
1135
+ <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;<span class="preprocessor"> AbstractState&amp;es = _svfir2AbsState-&gt;getAbsState(); \</span></div>
1136
+ <div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;<span class="preprocessor"> u32_t rhs_id = _svfir-&gt;getValueNode(cs.getArgument(0)); \</span></div>
1137
+ <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;<span class="preprocessor"> if (!es.inVarToValTable(rhs_id)) return; \</span></div>
1138
+ <div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;<span class="preprocessor"> u32_t rhs = _svfir2AbsState-&gt;getAbsState()[rhs_id].getInterval().lb().getIntNumeral(); \</span></div>
1139
+ <div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;<span class="preprocessor"> s32_t res = FUNC_NAME(rhs); \</span></div>
1140
+ <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;<span class="preprocessor"> u32_t lhsId = _svfir-&gt;getValueNode(cs.getInstruction()); \</span></div>
1141
+ <div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;<span class="preprocessor"> _svfir2AbsState-&gt;getAbsState()[lhsId] = IntervalValue(res); \</span></div>
1142
+ <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;<span class="preprocessor"> return; \</span></div>
1143
+ <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;<span class="preprocessor"> }; \</span></div>
1144
+ <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;<span class="preprocessor"> _func_map[#FUNC_NAME] = sse_##FUNC_NAME;</span></div>
1145
+ <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; </div>
1146
+ <div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#abe92a0aebef4717d08c64655ac44c9af">isalnum</a>, <a class="code" href="extapi_8c.html#abe92a0aebef4717d08c64655ac44c9af">isalnum</a>);</div>
1147
+ <div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#af947cbf1ae303e5297c9d68c68a6b9cb">isalpha</a>, <a class="code" href="extapi_8c.html#af947cbf1ae303e5297c9d68c68a6b9cb">isalpha</a>);</div>
1148
+ <div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#aaecd098576b00440124c44580144e8d5">isblank</a>, <a class="code" href="extapi_8c.html#aaecd098576b00440124c44580144e8d5">isblank</a>);</div>
1149
+ <div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#a0008a4e8e7889734dc1d83297de07158">iscntrl</a>, <a class="code" href="extapi_8c.html#a0008a4e8e7889734dc1d83297de07158">iscntrl</a>);</div>
1150
+ <div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#a3fa45b35c8abf67a950b6d3d4063dede">isdigit</a>, <a class="code" href="extapi_8c.html#a3fa45b35c8abf67a950b6d3d4063dede">isdigit</a>);</div>
1151
+ <div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#a49f40fd869fd0c90e4497fda08c89561">isgraph</a>, <a class="code" href="extapi_8c.html#a49f40fd869fd0c90e4497fda08c89561">isgraph</a>);</div>
1152
+ <div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#a99355d8f0fb41ec43effb95189db0ed4">isprint</a>, <a class="code" href="extapi_8c.html#a99355d8f0fb41ec43effb95189db0ed4">isprint</a>);</div>
1153
+ <div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#a9d60842d6ae065229ba810e6b01110da">ispunct</a>, <a class="code" href="extapi_8c.html#a9d60842d6ae065229ba810e6b01110da">ispunct</a>);</div>
1154
+ <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#a84b34b0058324ae5c0eae4956cf00cc5">isspace</a>, <a class="code" href="extapi_8c.html#a84b34b0058324ae5c0eae4956cf00cc5">isspace</a>);</div>
1155
+ <div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#adadd6582d46775aab6a51e29d16d9f77">isupper</a>, <a class="code" href="extapi_8c.html#adadd6582d46775aab6a51e29d16d9f77">isupper</a>);</div>
1156
+ <div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="extapi_8c.html#adaf3aadefe3fc4fb07b6be0d7b880f53">isxdigit</a>, <a class="code" href="extapi_8c.html#adaf3aadefe3fc4fb07b6be0d7b880f53">isxdigit</a>);</div>
1157
+ <div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="namespacellvm.html">llvm</a>.sin.f64, sin);</div>
1158
+ <div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="namespacellvm.html">llvm</a>.cos.f64, cos);</div>
1159
+ <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="namespacellvm.html">llvm</a>.tan.f64, tan);</div>
1160
+ <div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(<a class="code" href="namespacellvm.html">llvm</a>.log.f64, log);</div>
1161
+ <div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(sinh, sinh);</div>
1162
+ <div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(cosh, cosh);</div>
1163
+ <div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <a class="code" href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a>(tanh, tanh);</div>
1164
+ <div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; </div>
1165
+ <div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="keyword">auto</span> sse_svf_assert = [<span class="keyword">this</span>](<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> &amp;cs)</div>
1166
+ <div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; {</div>
1167
+ <div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callNode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(_svfir-&gt;getICFG()-&gt;getICFGNode(cs.getInstruction()));</div>
1168
+ <div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; _checkpoints.erase(callNode);</div>
1169
+ <div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> arg0 = _svfir-&gt;getValueNode(cs.getArgument(0));</div>
1170
+ <div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a>&amp;es = _svfir2AbsState-&gt;getAbsState();</div>
1171
+ <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; es[arg0].getInterval().meet_with(<a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 1));</div>
1172
+ <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <span class="keywordflow">if</span> (es[arg0].getInterval().equals(<a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 1)))</div>
1173
+ <div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; {</div>
1174
+ <div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a05dc00b2bd9a8176aae31b6cfffe725d">SVFUtil::sucMsg</a>(<span class="stringliteral">&quot;The assertion is successfully verified!!\n&quot;</span>);</div>
1175
+ <div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; }</div>
1176
+ <div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; <span class="keywordflow">else</span></div>
1177
+ <div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; {</div>
1178
+ <div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt;<span class="stringliteral">&quot;svf_assert Fail. &quot;</span> &lt;&lt; cs.getInstruction()-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
1179
+ <div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; assert(<span class="keyword">false</span>);</div>
1180
+ <div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; }</div>
1181
+ <div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; <span class="keywordflow">return</span>;</div>
1182
+ <div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; };</div>
1183
+ <div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; _func_map[<span class="stringliteral">&quot;svf_assert&quot;</span>] = sse_svf_assert;</div>
1184
+ <div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; </div>
1185
+ <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <span class="keyword">auto</span> svf_print = [&amp;](<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> &amp;cs)</div>
1186
+ <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; {</div>
1187
+ <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 2) <span class="keywordflow">return</span>;</div>
1188
+ <div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a>&amp;es = _svfir2AbsState-&gt;getAbsState();</div>
1189
+ <div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num_id = _svfir-&gt;getValueNode(cs.getArgument(0));</div>
1190
+ <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> text = strRead(cs.getArgument(1));</div>
1191
+ <div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; assert(es.<a class="code" href="classSVF_1_1AbstractState.html#ab4d209d0739f2c45dbc2a7e61318e2e3">inVarToValTable</a>(num_id) &amp;&amp; <span class="stringliteral">&quot;print() should pass integer&quot;</span>);</div>
1192
+ <div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> itv = es[num_id].getInterval();</div>
1193
+ <div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;Text: &quot;</span> &lt;&lt; text &lt;&lt;<span class="stringliteral">&quot;, Value: &quot;</span> &lt;&lt; cs.getArgument(0)-&gt;<a class="code" href="classSVF_1_1AbstractState.html#a7c802c006225a50b1d83b5f78d0891fa">toString</a>() &lt;&lt; <span class="stringliteral">&quot;, PrintVal: &quot;</span> &lt;&lt; itv.<a class="code" href="classSVF_1_1IntervalValue.html#a5d73cc2aa0a6ed49e8301fa7b0cd5045">toString</a>() &lt;&lt; std::endl;</div>
1194
+ <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; <span class="keywordflow">return</span>;</div>
1195
+ <div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; };</div>
1196
+ <div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; _func_map[<span class="stringliteral">&quot;svf_print&quot;</span>] = svf_print;</div>
1197
+ <div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; </div>
1198
+ <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="comment">// init _checkpoint_names</span></div>
1199
+ <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; _checkpoint_names.insert(<span class="stringliteral">&quot;svf_assert&quot;</span>);</div>
1200
+ <div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;};</div>
1201
+ <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; </div>
1202
+ <div class="line"><a name="l01142"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a7dfd11b987d9ff9528277e23191ed95d"> 1142</a></span>&#160;<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a7dfd11b987d9ff9528277e23191ed95d">AbstractInterpretation::strRead</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* rhs)</div>
1203
+ <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;{</div>
1204
+ <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="comment">// sse read string nodeID-&gt;string</span></div>
1205
+ <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a>&amp;es = _svfir2AbsState-&gt;getAbsState();</div>
1206
+ <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str0;</div>
1207
+ <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; </div>
1208
+ <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>(); <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>++)</div>
1209
+ <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; {</div>
1210
+ <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="comment">// dead loop for string and break if there&#39;s a \0. If no \0, it will throw err.</span></div>
1211
+ <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <span class="keywordflow">if</span> (!es.<a class="code" href="classSVF_1_1AbstractState.html#aa34516a95191c5ec56ce44a117e8b018">inVarToAddrsTable</a>(_svfir-&gt;getValueNode(rhs))) <span class="keywordflow">continue</span>;</div>
1212
+ <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> expr0 =</div>
1213
+ <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; _svfir2AbsState-&gt;getGepObjAddress(_svfir-&gt;getValueNode(rhs), <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>);</div>
1214
+ <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> val(<a class="code" href="structSVF_1_1AbstractValue.html#af93f4b54b34e74579ad177ead629b53aa3a7df767184a0bf01de99351747f545a">AbstractValue::UnknownType</a>);</div>
1215
+ <div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;addr: expr0.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
1216
+ <div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; {</div>
1217
+ <div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; val.<a class="code" href="structSVF_1_1AbstractValue.html#a52a8a738896179a148581e1060a2ed66">join_with</a>(es.<a class="code" href="classSVF_1_1AbstractState.html#aa057c4c27e613d239161c04daf3a46d0">load</a>(addr));</div>
1218
+ <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; }</div>
1219
+ <div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; <span class="keywordflow">if</span> (val.<a class="code" href="structSVF_1_1AbstractValue.html#a61516b8cd3550afd29f80fbe8c9146ff">isUnknown</a>())</div>
1220
+ <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="keywordflow">return</span> str0;</div>
1221
+ <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <span class="keywordflow">if</span> (!val.<a class="code" href="structSVF_1_1AbstractValue.html#aae73e4c65c0324946849f03881f05c3b">is_numeral</a>())</div>
1222
1222
  <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; {</div>
1223
1223
  <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; <span class="keywordflow">break</span>;</div>
1224
1224
  <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; }</div>
1225
- <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; str0.push_back((<span class="keywordtype">char</span>) val.<a class="code" href="structSVF_1_1AbstractValue.html#acbcec6f55d23e6cd278fe8572a68f393">getInterval</a>().<a class="code" href="classSVF_1_1IntervalValue.html#a4f9d13c0f642fcad6ddb86ea79fac6e3">getIntNumeral</a>());</div>
1226
- <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; }</div>
1227
- <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; <span class="keywordflow">return</span> str0;</div>
1228
- <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;}</div>
1229
- <div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; </div>
1230
- <div class="line"><a name="l01170"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a6cac9b69d85111a5a26373ec848a3282"> 1170</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a6cac9b69d85111a5a26373ec848a3282">AbstractInterpretation::handleExtAPI</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call)</div>
1231
- <div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;{</div>
1232
- <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
1233
- <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; assert(fun &amp;&amp; <span class="stringliteral">&quot;SVFFunction* is nullptr&quot;</span>);</div>
1234
- <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
1235
- <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616da">ExtAPIType</a> extType = UNCLASSIFIED;</div>
1236
- <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="comment">// get type of mem api</span></div>
1237
- <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &amp;annotation: fun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a067bd6dbaf74a028d546fa56b095791b">getAnnotations</a>())</div>
1238
- <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; {</div>
1239
- <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;MEMCPY&quot;</span>) != std::string::npos)</div>
1240
- <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; extType = MEMCPY;</div>
1241
- <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;MEMSET&quot;</span>) != std::string::npos)</div>
1242
- <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; extType = MEMSET;</div>
1243
- <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;STRCPY&quot;</span>) != std::string::npos)</div>
1244
- <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; extType = STRCPY;</div>
1245
- <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;STRCAT&quot;</span>) != std::string::npos)</div>
1246
- <div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; extType = STRCAT;</div>
1247
- <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; }</div>
1248
- <div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; <span class="keywordflow">if</span> (extType == UNCLASSIFIED)</div>
1249
- <div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; {</div>
1250
- <div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; <span class="keywordflow">if</span> (_func_map.find(fun-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>()) != _func_map.end())</div>
1251
- <div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; {</div>
1252
- <div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; _func_map[fun-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>()](cs);</div>
1253
- <div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; }</div>
1254
- <div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <span class="keywordflow">else</span></div>
1225
+ <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <span class="keywordflow">if</span> ((<span class="keywordtype">char</span>) val.<a class="code" href="structSVF_1_1AbstractValue.html#ac9149740b6c33f33e70cc2aa4f89040e">getIntNumeral</a>() == <span class="charliteral">&#39;\0&#39;</span>)</div>
1226
+ <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; {</div>
1227
+ <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; <span class="keywordflow">break</span>;</div>
1228
+ <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; }</div>
1229
+ <div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; str0.push_back((<span class="keywordtype">char</span>) val.<a class="code" href="structSVF_1_1AbstractValue.html#acbcec6f55d23e6cd278fe8572a68f393">getInterval</a>().<a class="code" href="classSVF_1_1IntervalValue.html#a4f9d13c0f642fcad6ddb86ea79fac6e3">getIntNumeral</a>());</div>
1230
+ <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; }</div>
1231
+ <div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <span class="keywordflow">return</span> str0;</div>
1232
+ <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;}</div>
1233
+ <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; </div>
1234
+ <div class="line"><a name="l01174"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a6cac9b69d85111a5a26373ec848a3282"> 1174</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a6cac9b69d85111a5a26373ec848a3282">AbstractInterpretation::handleExtAPI</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call)</div>
1235
+ <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;{</div>
1236
+ <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
1237
+ <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; assert(fun &amp;&amp; <span class="stringliteral">&quot;SVFFunction* is nullptr&quot;</span>);</div>
1238
+ <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
1239
+ <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616da">ExtAPIType</a> extType = UNCLASSIFIED;</div>
1240
+ <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <span class="comment">// get type of mem api</span></div>
1241
+ <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &amp;annotation: fun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a067bd6dbaf74a028d546fa56b095791b">getAnnotations</a>())</div>
1242
+ <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; {</div>
1243
+ <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;MEMCPY&quot;</span>) != std::string::npos)</div>
1244
+ <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; extType = MEMCPY;</div>
1245
+ <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;MEMSET&quot;</span>) != std::string::npos)</div>
1246
+ <div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; extType = MEMSET;</div>
1247
+ <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;STRCPY&quot;</span>) != std::string::npos)</div>
1248
+ <div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; extType = STRCPY;</div>
1249
+ <div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;STRCAT&quot;</span>) != std::string::npos)</div>
1250
+ <div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; extType = STRCAT;</div>
1251
+ <div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; }</div>
1252
+ <div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <span class="keywordflow">if</span> (extType == UNCLASSIFIED)</div>
1253
+ <div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; {</div>
1254
+ <div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <span class="keywordflow">if</span> (_func_map.find(fun-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>()) != _func_map.end())</div>
1255
1255
  <div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; {</div>
1256
- <div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> lhsId = _svfir-&gt;getValueNode(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()).<a class="code" href="classSVF_1_1CallSite.html#ac2a0091dab3543a398da890b947e42ef">getInstruction</a>());</div>
1257
- <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="keywordflow">if</span> (_svfir2ExeState-&gt;getEs().inVarToAddrsTable(lhsId))</div>
1258
- <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; {</div>
1259
- <div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; </div>
1260
- <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; }</div>
1261
- <div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; <span class="keywordflow">else</span></div>
1256
+ <div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; _func_map[fun-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>()](cs);</div>
1257
+ <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; }</div>
1258
+ <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <span class="keywordflow">else</span></div>
1259
+ <div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; {</div>
1260
+ <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> lhsId = _svfir-&gt;getValueNode(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()).<a class="code" href="classSVF_1_1CallSite.html#ac2a0091dab3543a398da890b947e42ef">getInstruction</a>());</div>
1261
+ <div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; <span class="keywordflow">if</span> (_svfir2AbsState-&gt;getAbsState().inVarToAddrsTable(lhsId))</div>
1262
1262
  <div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; {</div>
1263
- <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; _svfir2ExeState-&gt;getEs()[lhsId] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>();</div>
1263
+ <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; </div>
1264
1264
  <div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; }</div>
1265
- <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; <span class="keywordflow">return</span>;</div>
1266
- <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; }</div>
1267
- <div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; }</div>
1268
- <div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; <span class="comment">// 1. memcpy functions like memcpy_chk, strncpy, annotate(&quot;MEMCPY&quot;), annotate(&quot;BUF_CHECK:Arg0, Arg2&quot;), annotate(&quot;BUF_CHECK:Arg1, Arg2&quot;)</span></div>
1269
- <div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == MEMCPY)</div>
1270
- <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; {</div>
1271
- <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> len = _svfir2ExeState-&gt;getEs()[_svfir-&gt;getValueNode(cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(2))];</div>
1272
- <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; handleMemcpy(cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(0), cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(1), len, 0);</div>
1273
- <div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; }</div>
1274
- <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == MEMSET)</div>
1275
- <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; {</div>
1276
- <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <span class="comment">// memset dst is arg0, elem is arg1, size is arg2</span></div>
1277
- <div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> len = _svfir2ExeState-&gt;getEs()[_svfir-&gt;getValueNode(cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(2))];</div>
1278
- <div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> elem = _svfir2ExeState-&gt;getEs()[_svfir-&gt;getValueNode(cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(1))];</div>
1279
- <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; handleMemset(cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(0), elem, len);</div>
1280
- <div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; }</div>
1281
- <div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == STRCPY)</div>
1282
- <div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; {</div>
1283
- <div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; handleStrcpy(call);</div>
1284
- <div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; }</div>
1285
- <div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == STRCAT)</div>
1286
- <div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; {</div>
1287
- <div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; handleStrcat(call);</div>
1288
- <div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; }</div>
1289
- <div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <span class="keywordflow">else</span></div>
1290
- <div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; {</div>
1291
- <div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; </div>
1292
- <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; }</div>
1293
- <div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; <span class="keywordflow">return</span>;</div>
1294
- <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;}</div>
1295
- <div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; </div>
1296
- <div class="line"><a name="l01236"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#aae7c67e9c423599442be721b55cd7279"> 1236</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#aae7c67e9c423599442be721b55cd7279">AbstractInterpretation::collectCheckPoint</a>()</div>
1297
- <div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;{</div>
1298
- <div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; <span class="comment">// traverse every ICFGNode</span></div>
1299
- <div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = _svfir-&gt;getICFG()-&gt;begin(); it != _svfir-&gt;getICFG()-&gt;end(); ++it)</div>
1265
+ <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; <span class="keywordflow">else</span></div>
1266
+ <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; {</div>
1267
+ <div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; _svfir2AbsState-&gt;getAbsState()[lhsId] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>();</div>
1268
+ <div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; }</div>
1269
+ <div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="keywordflow">return</span>;</div>
1270
+ <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; }</div>
1271
+ <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; }</div>
1272
+ <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <span class="comment">// 1. memcpy functions like memcpy_chk, strncpy, annotate(&quot;MEMCPY&quot;), annotate(&quot;BUF_CHECK:Arg0, Arg2&quot;), annotate(&quot;BUF_CHECK:Arg1, Arg2&quot;)</span></div>
1273
+ <div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == MEMCPY)</div>
1274
+ <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; {</div>
1275
+ <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> len =</div>
1276
+ <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; _svfir2AbsState</div>
1277
+ <div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; -&gt;getAbsState()[_svfir-&gt;getValueNode(cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(2))];</div>
1278
+ <div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; handleMemcpy(cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(0), cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(1), len, 0);</div>
1279
+ <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; }</div>
1280
+ <div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == MEMSET)</div>
1281
+ <div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; {</div>
1282
+ <div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; <span class="comment">// memset dst is arg0, elem is arg1, size is arg2</span></div>
1283
+ <div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> len =</div>
1284
+ <div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; _svfir2AbsState</div>
1285
+ <div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; -&gt;getAbsState()[_svfir-&gt;getValueNode(cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(2))];</div>
1286
+ <div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> elem =</div>
1287
+ <div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; _svfir2AbsState</div>
1288
+ <div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; -&gt;getAbsState()[_svfir-&gt;getValueNode(cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(1))];</div>
1289
+ <div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; handleMemset(cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(0), elem, len);</div>
1290
+ <div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; }</div>
1291
+ <div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == STRCPY)</div>
1292
+ <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; {</div>
1293
+ <div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; handleStrcpy(call);</div>
1294
+ <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; }</div>
1295
+ <div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == STRCAT)</div>
1296
+ <div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; {</div>
1297
+ <div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; handleStrcat(call);</div>
1298
+ <div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; }</div>
1299
+ <div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <span class="keywordflow">else</span></div>
1300
1300
  <div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; {</div>
1301
- <div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* node = it-&gt;second;</div>
1302
- <div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(node))</div>
1303
- <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; {</div>
1304
- <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(call-&gt;getCallSite()))</div>
1305
- <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; {</div>
1306
- <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; <span class="keywordflow">if</span> (_checkpoint_names.find(fun-&gt;getName()) != _checkpoint_names.end())</div>
1307
- <div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; {</div>
1308
- <div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; _checkpoints.insert(call);</div>
1309
- <div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; }</div>
1310
- <div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; }</div>
1311
- <div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; }</div>
1312
- <div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; }</div>
1313
- <div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;}</div>
1314
- <div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; </div>
1315
- <div class="line"><a name="l01255"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#acea2c82e5b463db6f097e9a9641f601b"> 1255</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#acea2c82e5b463db6f097e9a9641f601b">AbstractInterpretation::checkPointAllSet</a>()</div>
1316
- <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;{</div>
1317
- <div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <span class="keywordflow">if</span> (_checkpoints.size() == 0)</div>
1318
- <div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; {</div>
1319
- <div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; <span class="keywordflow">return</span>;</div>
1320
- <div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; }</div>
1321
- <div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <span class="keywordflow">else</span></div>
1322
- <div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; {</div>
1323
- <div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a05dc00b2bd9a8176aae31b6cfffe725d">SVFUtil::sucMsg</a>(<span class="stringliteral">&quot;There exists checkpoints not checked!!\n&quot;</span>);</div>
1324
- <div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* call: _checkpoints)</div>
1325
- <div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; {</div>
1326
- <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a05dc00b2bd9a8176aae31b6cfffe725d">SVFUtil::sucMsg</a>(call-&gt;toString() + <span class="stringliteral">&quot;\n&quot;</span>);</div>
1327
- <div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; }</div>
1328
- <div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; assert(<span class="keyword">false</span>);</div>
1329
- <div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; }</div>
1330
- <div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; </div>
1331
- <div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;}</div>
1332
- <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; </div>
1333
- <div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; </div>
1334
- <div class="line"><a name="l01274"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#ac941d1eb9b1216c8334d0685a471b774"> 1274</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#ac941d1eb9b1216c8334d0685a471b774">AbstractInterpretation::handleStrcpy</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call)</div>
1335
- <div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;{</div>
1336
- <div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; <span class="comment">// strcpy, __strcpy_chk, stpcpy , wcscpy, __wcscpy_chk</span></div>
1337
- <div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; <span class="comment">// get the dst and src</span></div>
1338
- <div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
1339
- <div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg0Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(0);</div>
1340
- <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg1Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(1);</div>
1341
- <div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> strLen = getStrlen(arg1Val);</div>
1342
- <div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <span class="comment">// no need to -1, since it has \0 as the last byte</span></div>
1343
- <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; handleMemcpy(arg0Val, arg1Val, strLen,strLen.<a class="code" href="structSVF_1_1AbstractValue.html#a6c979397d4efb5b37e3b2bf9feba5648">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a8e19113913c2aa236ab35d3bdd49541c">getIntNumeral</a>());</div>
1344
- <div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;}</div>
1345
- <div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; </div>
1346
- <div class="line"><a name="l01286"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a0e8b546f608417e218c2fab5a5893135"> 1286</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a0e8b546f608417e218c2fab5a5893135">AbstractInterpretation::getAllocaInstByteSize</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a> *addr)</div>
1347
- <div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;{</div>
1348
- <div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>* objvar = SVFUtil::dyn_cast&lt;ObjVar&gt;(addr-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#ad03d28d16754c9049dd4d0ad3b6c1e28">getRHSVar</a>()))</div>
1349
- <div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; {</div>
1350
- <div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; objvar-&gt;getType();</div>
1351
- <div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <span class="keywordflow">if</span> (objvar-&gt;getMemObj()-&gt;isConstantByteSize())</div>
1352
- <div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; {</div>
1353
- <div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sz = objvar-&gt;getMemObj()-&gt;getByteSizeOfObj();</div>
1354
- <div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; <span class="keywordflow">return</span> sz;</div>
1355
- <div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; }</div>
1356
- <div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; </div>
1357
- <div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; <span class="keywordflow">else</span></div>
1358
- <div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; {</div>
1359
- <div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; <span class="keyword">const</span> std::vector&lt;SVFValue*&gt;&amp; sizes = addr-&gt;<a class="code" href="classSVF_1_1AddrStmt.html#a7fe84b92317fb93914053cc48d313acc">getArrSize</a>();</div>
1360
- <div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; <span class="comment">// Default element size is set to 1.</span></div>
1361
- <div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> elementSize = 1;</div>
1362
- <div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> res = elementSize;</div>
1363
- <div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* value: sizes)</div>
1364
- <div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; {</div>
1365
- <div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <span class="keywordflow">if</span> (!_svfir2ExeState-&gt;inVarToValTable(_svfir-&gt;getValueNode(value)))</div>
1366
- <div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; {</div>
1367
- <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; _svfir2ExeState-&gt;getEs()[_svfir-&gt;getValueNode(value)] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(<a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>());</div>
1368
- <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; }</div>
1369
- <div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> itv = _svfir2ExeState-&gt;getEs()[_svfir-&gt;getValueNode(value)];</div>
1370
- <div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; res = res * itv.<a class="code" href="structSVF_1_1AbstractValue.html#aecd8d41379dd6496772537ad51d1cb02">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a8e19113913c2aa236ab35d3bdd49541c">getIntNumeral</a>() &gt; <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>()? <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>(): res * itv.<a class="code" href="structSVF_1_1AbstractValue.html#aecd8d41379dd6496772537ad51d1cb02">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a8e19113913c2aa236ab35d3bdd49541c">getIntNumeral</a>();</div>
1371
- <div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; }</div>
1372
- <div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)res;</div>
1373
- <div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; }</div>
1374
- <div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; }</div>
1375
- <div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; assert (<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Addr rhs value is not ObjVar&quot;</span>);</div>
1376
- <div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; abort();</div>
1377
- <div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;}</div>
1378
- <div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; </div>
1379
- <div class="line"><a name="l01319"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#ac9e8bc430cd530e47811e28f5a9fe963"> 1319</a></span>&#160;<a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> <a class="code" href="classSVF_1_1AbstractInterpretation.html#ac9e8bc430cd530e47811e28f5a9fe963">AbstractInterpretation::traceMemoryAllocationSize</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a> *value)</div>
1380
- <div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;{</div>
1381
- <div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; <a class="code" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList&lt;const SVFValue *&gt;</a> worklist;</div>
1382
- <div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFValue *&gt;</a> visited;</div>
1383
- <div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; visited.insert(value);</div>
1384
- <div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const ICFGNode *, IntervalValue&gt;</a> gep_offsets;</div>
1385
- <div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>(value);</div>
1386
- <div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> total_bytes(0);</div>
1387
- <div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#a071a624c91def82a4bbbf3806c7b7eea">empty</a>())</div>
1388
- <div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; {</div>
1389
- <div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; value = worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#a3fd9acb6d09fd142bfd402fdf8cac93b">pop</a>();</div>
1390
- <div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* ins = SVFUtil::dyn_cast&lt;SVFInstruction&gt;(value))</div>
1391
- <div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; {</div>
1392
- <div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* node = _svfir-&gt;getICFG()-&gt;getICFGNode(ins);</div>
1393
- <div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callnode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(node))</div>
1394
- <div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; {</div>
1395
- <div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; <span class="comment">//to handle Ret PE</span></div>
1396
- <div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; AccessMemoryViaRetNode(callnode, worklist, visited);</div>
1397
- <div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; }</div>
1398
- <div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> *stmt: node-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>())</div>
1399
- <div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; {</div>
1400
- <div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a> *<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a> = SVFUtil::dyn_cast&lt;CopyStmt&gt;(stmt))</div>
1401
- <div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; {</div>
1402
- <div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; <span class="comment">// Copy Stmt, forward to lhs</span></div>
1403
- <div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; AccessMemoryViaCopyStmt(<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>, worklist, visited);</div>
1404
- <div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; }</div>
1405
- <div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a> *load = SVFUtil::dyn_cast&lt;LoadStmt&gt;(stmt))</div>
1406
- <div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; {</div>
1407
- <div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <span class="comment">// Load Stmt, forward to the Var from last Store Stmt</span></div>
1408
- <div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; AccessMemoryViaLoadStmt(load, worklist, visited);</div>
1409
- <div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; }</div>
1410
- <div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a> *gep = SVFUtil::dyn_cast&lt;GepStmt&gt;(stmt))</div>
1411
- <div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; {</div>
1412
- <div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; <span class="comment">// there are 3 type of gepStmt</span></div>
1413
- <div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; <span class="comment">// 1. ptr get offset</span></div>
1414
- <div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; <span class="comment">// 2. struct get field</span></div>
1415
- <div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; <span class="comment">// 3. array get element</span></div>
1416
- <div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; <span class="comment">// for array gep, there are two kind of overflow checking</span></div>
1417
- <div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; <span class="comment">// Arr [Struct.C * 10] arr, Struct.C {i32 a, i32 b}</span></div>
1418
- <div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; <span class="comment">// arr[11].a = **, it is &quot;lhs = gep *arr, 0 (ptr), 11 (arrIdx), 0 (ptr), 0(struct field)&quot;</span></div>
1419
- <div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; <span class="comment">// 1) in this case arrIdx 11 is overflow.</span></div>
1420
- <div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; <span class="comment">// Other case,</span></div>
1421
- <div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; <span class="comment">// Struct.C {i32 a, [i32*10] b, i32 c}, C.b[11] = 1</span></div>
1422
- <div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; <span class="comment">// it is &quot;lhs - gep *C, 0(ptr), 1(struct field), 0(ptr), 11(arrIdx)&quot;</span></div>
1423
- <div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; <span class="comment">// 2) in this case arrIdx 11 is larger than its getOffsetVar.Type Array([i32*10])</span></div>
1424
- <div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; </div>
1425
- <div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; <span class="comment">// therefore, if last getOffsetVar.Type is not the Array, just check the overall offset and its</span></div>
1426
- <div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; <span class="comment">// gep source type size (together with totalOffset along the value flow).</span></div>
1427
- <div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; <span class="comment">// Alloc Size: TBD, but totalOffset + current Gep offset</span></div>
1428
- <div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; </div>
1429
- <div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; <span class="comment">// otherwise, if last getOffsetVar.Type is the Array, check the last idx and array. (just offset,</span></div>
1430
- <div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; <span class="comment">// not with totalOffset during check)</span></div>
1431
- <div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; <span class="comment">// Alloc Size: getOffsetVar.TypeByteSize()</span></div>
1432
- <div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; </div>
1433
- <div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; <span class="comment">// make sure it has OffsetVarAndGepType Pair</span></div>
1434
- <div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; <span class="keywordflow">if</span> (gep-&gt;getOffsetVarAndGepTypePairVec().size() &gt; 0)</div>
1435
- <div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; {</div>
1436
- <div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; <span class="comment">// check if last OffsetVarAndGepType Pair is Array</span></div>
1437
- <div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* gepType = gep-&gt;getOffsetVarAndGepTypePairVec().back().second;</div>
1438
- <div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; <span class="comment">// if its array</span></div>
1439
- <div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; <span class="keywordflow">if</span> (gepType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a330084f9a3deb6e5acb52a8ee3eb7fe4">isArrayTy</a>())</div>
1440
- <div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; {</div>
1441
- <div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> rhs_type_bytes = gepType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
1442
- <div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; <span class="comment">// if gepStmt&#39;s base var is Array, compares offset with the arraysize</span></div>
1443
- <div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(rhs_type_bytes);</div>
1444
- <div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; }</div>
1445
- <div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; <span class="keywordflow">else</span></div>
1446
- <div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; {</div>
1447
- <div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> byteOffset;</div>
1448
- <div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; <span class="keywordflow">if</span> (gep-&gt;isConstantOffset())</div>
1449
- <div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; {</div>
1450
- <div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; byteOffset = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(gep-&gt;accumulateConstantByteOffset());</div>
1451
- <div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; }</div>
1452
- <div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; <span class="keywordflow">else</span></div>
1453
- <div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; {</div>
1454
- <div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> byteOffset = _svfir2ExeState-&gt;getByteOffset(gep).getInterval();</div>
1455
- <div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; }</div>
1456
- <div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; <span class="comment">// for variable offset, join with accumulate gep offset</span></div>
1457
- <div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; gep_offsets[gep-&gt;getICFGNode()] = byteOffset;</div>
1458
- <div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; total_bytes = total_bytes + byteOffset;</div>
1459
- <div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; }</div>
1460
- <div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; }</div>
1461
- <div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; <span class="keywordflow">if</span> (!visited.count(gep-&gt;getRHSVar()-&gt;getValue()))</div>
1462
- <div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; {</div>
1463
- <div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; visited.insert(gep-&gt;getRHSVar()-&gt;getValue());</div>
1464
- <div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>(gep-&gt;getRHSVar()-&gt;getValue());</div>
1465
- <div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; }</div>
1466
- <div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; }</div>
1467
- <div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a> *addr = SVFUtil::dyn_cast&lt;AddrStmt&gt;(stmt))</div>
1468
- <div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; {</div>
1469
- <div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; <span class="comment">// addrStmt is source node.</span></div>
1470
- <div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> arr_type_size = getAllocaInstByteSize(addr);</div>
1471
- <div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(arr_type_size) - total_bytes;</div>
1472
- <div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; }</div>
1473
- <div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; }</div>
1474
- <div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; }</div>
1475
- <div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFGlobalValue.html">SVF::SVFGlobalValue</a>* gvalue = SVFUtil::dyn_cast&lt;SVF::SVFGlobalValue&gt;(value))</div>
1476
- <div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; {</div>
1477
- <div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> arr_type_size = 0;</div>
1478
- <div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* svftype = gvalue-&gt;getType();</div>
1479
- <div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFPointerType&gt;(svftype))</div>
1480
- <div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; {</div>
1481
- <div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArrayType.html">SVFArrayType</a>* ptrArrType = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(getPointeeElement(_svfir-&gt;getValueNode(value))))</div>
1482
- <div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; arr_type_size = ptrArrType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
1483
- <div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; <span class="keywordflow">else</span></div>
1484
- <div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; arr_type_size = svftype-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
1485
- <div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; }</div>
1486
- <div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; <span class="keywordflow">else</span></div>
1487
- <div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; arr_type_size = svftype-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
1488
- <div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(arr_type_size) - total_bytes;</div>
1489
- <div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; }</div>
1490
- <div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVF::SVFArgument</a>* arg = SVFUtil::dyn_cast&lt;SVF::SVFArgument&gt;(value))</div>
1491
- <div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; {</div>
1492
- <div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; <span class="comment">// to handle call PE</span></div>
1493
- <div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; AccessMemoryViaCallArgs(arg, worklist, visited);</div>
1494
- <div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; }</div>
1495
- <div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; <span class="keywordflow">else</span></div>
1496
- <div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; {</div>
1497
- <div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; <span class="comment">// maybe SVFConstant</span></div>
1498
- <div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0);</div>
1499
- <div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; }</div>
1500
- <div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; }</div>
1501
- <div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0);</div>
1502
- <div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;}</div>
1503
- <div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; </div>
1504
- <div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; </div>
1505
- <div class="line"><a name="l01451"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a5bba3c0570d73acc743742a30af1b0b4"> 1451</a></span>&#160;<a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a5bba3c0570d73acc743742a30af1b0b4">AbstractInterpretation::getStrlen</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVF::SVFValue</a> *strValue)</div>
1506
- <div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;{</div>
1507
- <div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a>&amp;es = _svfir2ExeState-&gt;getEs();</div>
1508
- <div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> dst_size = traceMemoryAllocationSize(strValue);</div>
1509
- <div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> len = 0;</div>
1510
- <div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstid = _svfir-&gt;getValueNode(strValue);</div>
1511
- <div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> elemSize = 1;</div>
1512
- <div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; <span class="keywordflow">if</span> (_svfir2ExeState-&gt;inVarToAddrsTable(dstid))</div>
1513
- <div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; {</div>
1514
- <div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; dst_size.<a class="code" href="structSVF_1_1AbstractValue.html#a6c979397d4efb5b37e3b2bf9feba5648">lb</a>().getIntNumeral(); <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>++)</div>
1515
- <div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; {</div>
1516
- <div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> expr0 = _svfir2ExeState-&gt;getGepObjAddress(dstid, <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>);</div>
1517
- <div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> val(<a class="code" href="structSVF_1_1AbstractValue.html#af93f4b54b34e74579ad177ead629b53aa3a7df767184a0bf01de99351747f545a">AbstractValue::UnknownType</a>);</div>
1518
- <div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;addr: expr0.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
1519
- <div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; {</div>
1520
- <div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; val.<a class="code" href="structSVF_1_1AbstractValue.html#a52a8a738896179a148581e1060a2ed66">join_with</a>(es.<a class="code" href="classSVF_1_1AbstractState.html#aa057c4c27e613d239161c04daf3a46d0">load</a>(addr));</div>
1521
- <div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; }</div>
1522
- <div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; <span class="keywordflow">if</span> (val.<a class="code" href="structSVF_1_1AbstractValue.html#a61516b8cd3550afd29f80fbe8c9146ff">isUnknown</a>())</div>
1523
- <div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; {</div>
1524
- <div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>((<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a>)0, (<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a>)<a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>());</div>
1525
- <div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; }</div>
1526
- <div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; <span class="keywordflow">if</span> (val.<a class="code" href="structSVF_1_1AbstractValue.html#aae73e4c65c0324946849f03881f05c3b">is_numeral</a>() &amp;&amp; (<span class="keywordtype">char</span>) val.<a class="code" href="structSVF_1_1AbstractValue.html#ac9149740b6c33f33e70cc2aa4f89040e">getIntNumeral</a>() == <span class="charliteral">&#39;\0&#39;</span>)</div>
1527
- <div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; {</div>
1528
- <div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; <span class="keywordflow">break</span>;</div>
1529
- <div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; }</div>
1530
- <div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; ++len;</div>
1531
- <div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; }</div>
1532
- <div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; <span class="keywordflow">if</span> (strValue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a330084f9a3deb6e5acb52a8ee3eb7fe4">isArrayTy</a>())</div>
1533
- <div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; {</div>
1534
- <div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; elemSize = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(strValue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>())-&gt;getTypeOfElement()-&gt;getByteSize();</div>
1535
- <div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; }</div>
1536
- <div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strValue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
1537
- <div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; {</div>
1538
- <div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elemType = getPointeeElement(_svfir-&gt;getValueNode(strValue)))</div>
1539
- <div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; {</div>
1540
- <div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; elemSize = elemType-&gt;getByteSize();</div>
1541
- <div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; }</div>
1542
- <div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; <span class="keywordflow">else</span></div>
1543
- <div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; {</div>
1544
- <div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; elemSize = 1;</div>
1545
- <div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; }</div>
1546
- <div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; }</div>
1547
- <div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; <span class="keywordflow">else</span></div>
1548
- <div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; {</div>
1549
- <div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;we cannot support this type&quot;</span>);</div>
1550
- <div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; }</div>
1551
- <div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; }</div>
1552
- <div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; <span class="keywordflow">if</span> (len == 0)</div>
1553
- <div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; {</div>
1554
- <div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>((<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a>)0, (<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a>)<a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>());</div>
1555
- <div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; }</div>
1556
- <div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; <span class="keywordflow">else</span></div>
1557
- <div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; {</div>
1558
- <div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(len * elemSize);</div>
1559
- <div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; }</div>
1560
- <div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;}</div>
1561
- <div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; </div>
1562
- <div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; </div>
1563
- <div class="line"><a name="l01509"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#acba90e968cebacca3da78ac765df33ef"> 1509</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#acba90e968cebacca3da78ac765df33ef">AbstractInterpretation::handleStrcat</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a> *call)</div>
1564
- <div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;{</div>
1565
- <div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; <span class="comment">// __strcat_chk, strcat, __wcscat_chk, wcscat, __strncat_chk, strncat, __wcsncat_chk, wcsncat</span></div>
1566
- <div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <span class="comment">// to check it is strcat group or strncat group</span></div>
1567
- <div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
1568
- <div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt; strcatGroup = {<span class="stringliteral">&quot;__strcat_chk&quot;</span>, <span class="stringliteral">&quot;strcat&quot;</span>, <span class="stringliteral">&quot;__wcscat_chk&quot;</span>, <span class="stringliteral">&quot;wcscat&quot;</span>};</div>
1569
- <div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt; strncatGroup = {<span class="stringliteral">&quot;__strncat_chk&quot;</span>, <span class="stringliteral">&quot;strncat&quot;</span>, <span class="stringliteral">&quot;__wcsncat_chk&quot;</span>, <span class="stringliteral">&quot;wcsncat&quot;</span>};</div>
1570
- <div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; <span class="keywordflow">if</span> (std::find(strcatGroup.begin(), strcatGroup.end(), fun-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>()) != strcatGroup.end())</div>
1301
+ <div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; </div>
1302
+ <div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; }</div>
1303
+ <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; <span class="keywordflow">return</span>;</div>
1304
+ <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;}</div>
1305
+ <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; </div>
1306
+ <div class="line"><a name="l01246"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#aae7c67e9c423599442be721b55cd7279"> 1246</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#aae7c67e9c423599442be721b55cd7279">AbstractInterpretation::collectCheckPoint</a>()</div>
1307
+ <div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;{</div>
1308
+ <div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; <span class="comment">// traverse every ICFGNode</span></div>
1309
+ <div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = _svfir-&gt;getICFG()-&gt;begin(); it != _svfir-&gt;getICFG()-&gt;end(); ++it)</div>
1310
+ <div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; {</div>
1311
+ <div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* node = it-&gt;second;</div>
1312
+ <div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(node))</div>
1313
+ <div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; {</div>
1314
+ <div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(call-&gt;getCallSite()))</div>
1315
+ <div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; {</div>
1316
+ <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; <span class="keywordflow">if</span> (_checkpoint_names.find(fun-&gt;getName()) != _checkpoint_names.end())</div>
1317
+ <div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; {</div>
1318
+ <div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; _checkpoints.insert(call);</div>
1319
+ <div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; }</div>
1320
+ <div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; }</div>
1321
+ <div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; }</div>
1322
+ <div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; }</div>
1323
+ <div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;}</div>
1324
+ <div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; </div>
1325
+ <div class="line"><a name="l01265"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#acea2c82e5b463db6f097e9a9641f601b"> 1265</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#acea2c82e5b463db6f097e9a9641f601b">AbstractInterpretation::checkPointAllSet</a>()</div>
1326
+ <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;{</div>
1327
+ <div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; <span class="keywordflow">if</span> (_checkpoints.size() == 0)</div>
1328
+ <div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; {</div>
1329
+ <div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; <span class="keywordflow">return</span>;</div>
1330
+ <div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; }</div>
1331
+ <div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="keywordflow">else</span></div>
1332
+ <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; {</div>
1333
+ <div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a05dc00b2bd9a8176aae31b6cfffe725d">SVFUtil::sucMsg</a>(<span class="stringliteral">&quot;There exists checkpoints not checked!!\n&quot;</span>);</div>
1334
+ <div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* call: _checkpoints)</div>
1335
+ <div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; {</div>
1336
+ <div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a05dc00b2bd9a8176aae31b6cfffe725d">SVFUtil::sucMsg</a>(call-&gt;toString() + <span class="stringliteral">&quot;\n&quot;</span>);</div>
1337
+ <div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; }</div>
1338
+ <div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; assert(<span class="keyword">false</span>);</div>
1339
+ <div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; }</div>
1340
+ <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; </div>
1341
+ <div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;}</div>
1342
+ <div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; </div>
1343
+ <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; </div>
1344
+ <div class="line"><a name="l01284"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#ac941d1eb9b1216c8334d0685a471b774"> 1284</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#ac941d1eb9b1216c8334d0685a471b774">AbstractInterpretation::handleStrcpy</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call)</div>
1345
+ <div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;{</div>
1346
+ <div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <span class="comment">// strcpy, __strcpy_chk, stpcpy , wcscpy, __wcscpy_chk</span></div>
1347
+ <div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <span class="comment">// get the dst and src</span></div>
1348
+ <div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
1349
+ <div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg0Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(0);</div>
1350
+ <div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg1Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(1);</div>
1351
+ <div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> strLen = getStrlen(arg1Val);</div>
1352
+ <div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; <span class="comment">// no need to -1, since it has \0 as the last byte</span></div>
1353
+ <div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; handleMemcpy(arg0Val, arg1Val, strLen,strLen.<a class="code" href="structSVF_1_1AbstractValue.html#a6c979397d4efb5b37e3b2bf9feba5648">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a8e19113913c2aa236ab35d3bdd49541c">getIntNumeral</a>());</div>
1354
+ <div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;}</div>
1355
+ <div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; </div>
1356
+ <div class="line"><a name="l01296"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a0e8b546f608417e218c2fab5a5893135"> 1296</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a0e8b546f608417e218c2fab5a5893135">AbstractInterpretation::getAllocaInstByteSize</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a> *addr)</div>
1357
+ <div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;{</div>
1358
+ <div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>* objvar = SVFUtil::dyn_cast&lt;ObjVar&gt;(addr-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#ad03d28d16754c9049dd4d0ad3b6c1e28">getRHSVar</a>()))</div>
1359
+ <div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; {</div>
1360
+ <div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; objvar-&gt;getType();</div>
1361
+ <div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <span class="keywordflow">if</span> (objvar-&gt;getMemObj()-&gt;isConstantByteSize())</div>
1362
+ <div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; {</div>
1363
+ <div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sz = objvar-&gt;getMemObj()-&gt;getByteSizeOfObj();</div>
1364
+ <div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <span class="keywordflow">return</span> sz;</div>
1365
+ <div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; }</div>
1366
+ <div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; </div>
1367
+ <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; <span class="keywordflow">else</span></div>
1368
+ <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; {</div>
1369
+ <div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <span class="keyword">const</span> std::vector&lt;SVFValue*&gt;&amp; sizes = addr-&gt;<a class="code" href="classSVF_1_1AddrStmt.html#a7fe84b92317fb93914053cc48d313acc">getArrSize</a>();</div>
1370
+ <div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="comment">// Default element size is set to 1.</span></div>
1371
+ <div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> elementSize = 1;</div>
1372
+ <div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> res = elementSize;</div>
1373
+ <div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* value: sizes)</div>
1374
+ <div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; {</div>
1375
+ <div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; <span class="keywordflow">if</span> (!_svfir2AbsState-&gt;inVarToValTable(_svfir-&gt;getValueNode(value)))</div>
1376
+ <div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; {</div>
1377
+ <div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; _svfir2AbsState</div>
1378
+ <div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; -&gt;getAbsState()[_svfir-&gt;getValueNode(value)] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(<a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>());</div>
1379
+ <div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; }</div>
1380
+ <div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> itv =</div>
1381
+ <div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; _svfir2AbsState-&gt;getAbsState()[_svfir-&gt;getValueNode(value)];</div>
1382
+ <div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; res = res * itv.<a class="code" href="structSVF_1_1AbstractValue.html#aecd8d41379dd6496772537ad51d1cb02">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a8e19113913c2aa236ab35d3bdd49541c">getIntNumeral</a>() &gt; <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>()? <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>(): res * itv.<a class="code" href="structSVF_1_1AbstractValue.html#aecd8d41379dd6496772537ad51d1cb02">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a8e19113913c2aa236ab35d3bdd49541c">getIntNumeral</a>();</div>
1383
+ <div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; }</div>
1384
+ <div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)res;</div>
1385
+ <div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; }</div>
1386
+ <div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; }</div>
1387
+ <div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; assert (<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Addr rhs value is not ObjVar&quot;</span>);</div>
1388
+ <div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; abort();</div>
1389
+ <div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;}</div>
1390
+ <div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; </div>
1391
+ <div class="line"><a name="l01331"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#ac9e8bc430cd530e47811e28f5a9fe963"> 1331</a></span>&#160;<a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> <a class="code" href="classSVF_1_1AbstractInterpretation.html#ac9e8bc430cd530e47811e28f5a9fe963">AbstractInterpretation::traceMemoryAllocationSize</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a> *value)</div>
1392
+ <div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;{</div>
1393
+ <div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; <a class="code" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList&lt;const SVFValue *&gt;</a> worklist;</div>
1394
+ <div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFValue *&gt;</a> visited;</div>
1395
+ <div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; visited.insert(value);</div>
1396
+ <div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const ICFGNode *, IntervalValue&gt;</a> gep_offsets;</div>
1397
+ <div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>(value);</div>
1398
+ <div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> total_bytes(0);</div>
1399
+ <div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#a071a624c91def82a4bbbf3806c7b7eea">empty</a>())</div>
1400
+ <div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; {</div>
1401
+ <div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; value = worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#a3fd9acb6d09fd142bfd402fdf8cac93b">pop</a>();</div>
1402
+ <div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* ins = SVFUtil::dyn_cast&lt;SVFInstruction&gt;(value))</div>
1403
+ <div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; {</div>
1404
+ <div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* node = _svfir-&gt;getICFG()-&gt;getICFGNode(ins);</div>
1405
+ <div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callnode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(node))</div>
1406
+ <div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; {</div>
1407
+ <div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <span class="comment">//to handle Ret PE</span></div>
1408
+ <div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; AccessMemoryViaRetNode(callnode, worklist, visited);</div>
1409
+ <div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; }</div>
1410
+ <div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> *stmt: node-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>())</div>
1411
+ <div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; {</div>
1412
+ <div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a> *<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a> = SVFUtil::dyn_cast&lt;CopyStmt&gt;(stmt))</div>
1413
+ <div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; {</div>
1414
+ <div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; <span class="comment">// Copy Stmt, forward to lhs</span></div>
1415
+ <div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; AccessMemoryViaCopyStmt(<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>, worklist, visited);</div>
1416
+ <div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; }</div>
1417
+ <div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a> *load = SVFUtil::dyn_cast&lt;LoadStmt&gt;(stmt))</div>
1418
+ <div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; {</div>
1419
+ <div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; <span class="comment">// Load Stmt, forward to the Var from last Store Stmt</span></div>
1420
+ <div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; AccessMemoryViaLoadStmt(load, worklist, visited);</div>
1421
+ <div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; }</div>
1422
+ <div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a> *gep = SVFUtil::dyn_cast&lt;GepStmt&gt;(stmt))</div>
1423
+ <div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; {</div>
1424
+ <div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; <span class="comment">// there are 3 type of gepStmt</span></div>
1425
+ <div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; <span class="comment">// 1. ptr get offset</span></div>
1426
+ <div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; <span class="comment">// 2. struct get field</span></div>
1427
+ <div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; <span class="comment">// 3. array get element</span></div>
1428
+ <div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; <span class="comment">// for array gep, there are two kind of overflow checking</span></div>
1429
+ <div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; <span class="comment">// Arr [Struct.C * 10] arr, Struct.C {i32 a, i32 b}</span></div>
1430
+ <div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; <span class="comment">// arr[11].a = **, it is &quot;lhs = gep *arr, 0 (ptr), 11 (arrIdx), 0 (ptr), 0(struct field)&quot;</span></div>
1431
+ <div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; <span class="comment">// 1) in this case arrIdx 11 is overflow.</span></div>
1432
+ <div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; <span class="comment">// Other case,</span></div>
1433
+ <div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; <span class="comment">// Struct.C {i32 a, [i32*10] b, i32 c}, C.b[11] = 1</span></div>
1434
+ <div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; <span class="comment">// it is &quot;lhs - gep *C, 0(ptr), 1(struct field), 0(ptr), 11(arrIdx)&quot;</span></div>
1435
+ <div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; <span class="comment">// 2) in this case arrIdx 11 is larger than its getOffsetVar.Type Array([i32*10])</span></div>
1436
+ <div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; </div>
1437
+ <div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; <span class="comment">// therefore, if last getOffsetVar.Type is not the Array, just check the overall offset and its</span></div>
1438
+ <div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; <span class="comment">// gep source type size (together with totalOffset along the value flow).</span></div>
1439
+ <div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; <span class="comment">// Alloc Size: TBD, but totalOffset + current Gep offset</span></div>
1440
+ <div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; </div>
1441
+ <div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; <span class="comment">// otherwise, if last getOffsetVar.Type is the Array, check the last idx and array. (just offset,</span></div>
1442
+ <div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; <span class="comment">// not with totalOffset during check)</span></div>
1443
+ <div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; <span class="comment">// Alloc Size: getOffsetVar.TypeByteSize()</span></div>
1444
+ <div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; </div>
1445
+ <div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; <span class="comment">// make sure it has OffsetVarAndGepType Pair</span></div>
1446
+ <div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; <span class="keywordflow">if</span> (gep-&gt;getOffsetVarAndGepTypePairVec().size() &gt; 0)</div>
1447
+ <div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; {</div>
1448
+ <div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; <span class="comment">// check if last OffsetVarAndGepType Pair is Array</span></div>
1449
+ <div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* gepType = gep-&gt;getOffsetVarAndGepTypePairVec().back().second;</div>
1450
+ <div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; <span class="comment">// if its array</span></div>
1451
+ <div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; <span class="keywordflow">if</span> (gepType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a330084f9a3deb6e5acb52a8ee3eb7fe4">isArrayTy</a>())</div>
1452
+ <div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; {</div>
1453
+ <div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> rhs_type_bytes = gepType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
1454
+ <div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <span class="comment">// if gepStmt&#39;s base var is Array, compares offset with the arraysize</span></div>
1455
+ <div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(rhs_type_bytes);</div>
1456
+ <div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; }</div>
1457
+ <div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; <span class="keywordflow">else</span></div>
1458
+ <div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; {</div>
1459
+ <div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> byteOffset;</div>
1460
+ <div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; <span class="keywordflow">if</span> (gep-&gt;isConstantOffset())</div>
1461
+ <div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; {</div>
1462
+ <div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; byteOffset = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(gep-&gt;accumulateConstantByteOffset());</div>
1463
+ <div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; }</div>
1464
+ <div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; <span class="keywordflow">else</span></div>
1465
+ <div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; {</div>
1466
+ <div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> byteOffset =</div>
1467
+ <div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; _svfir2AbsState-&gt;getByteOffset(gep).getInterval();</div>
1468
+ <div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; }</div>
1469
+ <div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; <span class="comment">// for variable offset, join with accumulate gep offset</span></div>
1470
+ <div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; gep_offsets[gep-&gt;getICFGNode()] = byteOffset;</div>
1471
+ <div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; total_bytes = total_bytes + byteOffset;</div>
1472
+ <div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; }</div>
1473
+ <div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; }</div>
1474
+ <div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; <span class="keywordflow">if</span> (!visited.count(gep-&gt;getRHSVar()-&gt;getValue()))</div>
1475
+ <div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; {</div>
1476
+ <div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; visited.insert(gep-&gt;getRHSVar()-&gt;getValue());</div>
1477
+ <div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>(gep-&gt;getRHSVar()-&gt;getValue());</div>
1478
+ <div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; }</div>
1479
+ <div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; }</div>
1480
+ <div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a> *addr = SVFUtil::dyn_cast&lt;AddrStmt&gt;(stmt))</div>
1481
+ <div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; {</div>
1482
+ <div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; <span class="comment">// addrStmt is source node.</span></div>
1483
+ <div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> arr_type_size = getAllocaInstByteSize(addr);</div>
1484
+ <div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(arr_type_size) - total_bytes;</div>
1485
+ <div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; }</div>
1486
+ <div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; }</div>
1487
+ <div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; }</div>
1488
+ <div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFGlobalValue.html">SVF::SVFGlobalValue</a>* gvalue = SVFUtil::dyn_cast&lt;SVF::SVFGlobalValue&gt;(value))</div>
1489
+ <div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; {</div>
1490
+ <div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> arr_type_size = 0;</div>
1491
+ <div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* svftype = gvalue-&gt;getType();</div>
1492
+ <div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFPointerType&gt;(svftype))</div>
1493
+ <div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; {</div>
1494
+ <div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArrayType.html">SVFArrayType</a>* ptrArrType = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(getPointeeElement(_svfir-&gt;getValueNode(value))))</div>
1495
+ <div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; arr_type_size = ptrArrType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
1496
+ <div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; <span class="keywordflow">else</span></div>
1497
+ <div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; arr_type_size = svftype-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
1498
+ <div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; }</div>
1499
+ <div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; <span class="keywordflow">else</span></div>
1500
+ <div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; arr_type_size = svftype-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
1501
+ <div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(arr_type_size) - total_bytes;</div>
1502
+ <div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; }</div>
1503
+ <div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVF::SVFArgument</a>* arg = SVFUtil::dyn_cast&lt;SVF::SVFArgument&gt;(value))</div>
1504
+ <div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; {</div>
1505
+ <div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; <span class="comment">// to handle call PE</span></div>
1506
+ <div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; AccessMemoryViaCallArgs(arg, worklist, visited);</div>
1507
+ <div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; }</div>
1508
+ <div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; <span class="keywordflow">else</span></div>
1509
+ <div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; {</div>
1510
+ <div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; <span class="comment">// maybe SVFConstant</span></div>
1511
+ <div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0);</div>
1512
+ <div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; }</div>
1513
+ <div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; }</div>
1514
+ <div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0);</div>
1515
+ <div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;}</div>
1516
+ <div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; </div>
1517
+ <div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; </div>
1518
+ <div class="line"><a name="l01464"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a5bba3c0570d73acc743742a30af1b0b4"> 1464</a></span>&#160;<a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a5bba3c0570d73acc743742a30af1b0b4">AbstractInterpretation::getStrlen</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVF::SVFValue</a> *strValue)</div>
1519
+ <div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;{</div>
1520
+ <div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a>&amp;es = _svfir2AbsState-&gt;getAbsState();</div>
1521
+ <div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> dst_size = traceMemoryAllocationSize(strValue);</div>
1522
+ <div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> len = 0;</div>
1523
+ <div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstid = _svfir-&gt;getValueNode(strValue);</div>
1524
+ <div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> elemSize = 1;</div>
1525
+ <div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; <span class="keywordflow">if</span> (_svfir2AbsState-&gt;inVarToAddrsTable(dstid))</div>
1526
+ <div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; {</div>
1527
+ <div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; dst_size.<a class="code" href="structSVF_1_1AbstractValue.html#a6c979397d4efb5b37e3b2bf9feba5648">lb</a>().getIntNumeral(); <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>++)</div>
1528
+ <div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; {</div>
1529
+ <div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> expr0 =</div>
1530
+ <div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; _svfir2AbsState-&gt;getGepObjAddress(dstid, <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>);</div>
1531
+ <div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> val(<a class="code" href="structSVF_1_1AbstractValue.html#af93f4b54b34e74579ad177ead629b53aa3a7df767184a0bf01de99351747f545a">AbstractValue::UnknownType</a>);</div>
1532
+ <div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;addr: expr0.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
1533
+ <div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; {</div>
1534
+ <div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; val.<a class="code" href="structSVF_1_1AbstractValue.html#a52a8a738896179a148581e1060a2ed66">join_with</a>(es.<a class="code" href="classSVF_1_1AbstractState.html#aa057c4c27e613d239161c04daf3a46d0">load</a>(addr));</div>
1535
+ <div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; }</div>
1536
+ <div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; <span class="keywordflow">if</span> (val.<a class="code" href="structSVF_1_1AbstractValue.html#a61516b8cd3550afd29f80fbe8c9146ff">isUnknown</a>())</div>
1537
+ <div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; {</div>
1538
+ <div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>((<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a>)0, (<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a>)<a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>());</div>
1539
+ <div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; }</div>
1540
+ <div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; <span class="keywordflow">if</span> (val.<a class="code" href="structSVF_1_1AbstractValue.html#aae73e4c65c0324946849f03881f05c3b">is_numeral</a>() &amp;&amp; (<span class="keywordtype">char</span>) val.<a class="code" href="structSVF_1_1AbstractValue.html#ac9149740b6c33f33e70cc2aa4f89040e">getIntNumeral</a>() == <span class="charliteral">&#39;\0&#39;</span>)</div>
1541
+ <div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; {</div>
1542
+ <div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; <span class="keywordflow">break</span>;</div>
1543
+ <div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; }</div>
1544
+ <div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; ++len;</div>
1545
+ <div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; }</div>
1546
+ <div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; <span class="keywordflow">if</span> (strValue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a330084f9a3deb6e5acb52a8ee3eb7fe4">isArrayTy</a>())</div>
1547
+ <div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; {</div>
1548
+ <div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; elemSize = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(strValue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>())-&gt;getTypeOfElement()-&gt;getByteSize();</div>
1549
+ <div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; }</div>
1550
+ <div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strValue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
1551
+ <div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; {</div>
1552
+ <div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elemType = getPointeeElement(_svfir-&gt;getValueNode(strValue)))</div>
1553
+ <div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; {</div>
1554
+ <div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; elemSize = elemType-&gt;getByteSize();</div>
1555
+ <div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; }</div>
1556
+ <div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; <span class="keywordflow">else</span></div>
1557
+ <div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; {</div>
1558
+ <div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; elemSize = 1;</div>
1559
+ <div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; }</div>
1560
+ <div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; }</div>
1561
+ <div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; <span class="keywordflow">else</span></div>
1562
+ <div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; {</div>
1563
+ <div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;we cannot support this type&quot;</span>);</div>
1564
+ <div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; }</div>
1565
+ <div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; }</div>
1566
+ <div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <span class="keywordflow">if</span> (len == 0)</div>
1567
+ <div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; {</div>
1568
+ <div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>((<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a>)0, (<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a>)<a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>());</div>
1569
+ <div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; }</div>
1570
+ <div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; <span class="keywordflow">else</span></div>
1571
1571
  <div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; {</div>
1572
- <div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
1573
- <div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg0Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(0);</div>
1574
- <div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg1Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(1);</div>
1575
- <div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> strLen0 = getStrlen(arg0Val);</div>
1576
- <div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> strLen1 = getStrlen(arg1Val);</div>
1577
- <div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> totalLen = strLen0 + strLen1;</div>
1578
- <div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160; handleMemcpy(arg0Val, arg1Val, strLen1, strLen0.<a class="code" href="structSVF_1_1AbstractValue.html#a6c979397d4efb5b37e3b2bf9feba5648">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a8e19113913c2aa236ab35d3bdd49541c">getIntNumeral</a>());</div>
1579
- <div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; <span class="comment">// do memcpy</span></div>
1580
- <div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; }</div>
1581
- <div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (std::find(strncatGroup.begin(), strncatGroup.end(), fun-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>()) != strncatGroup.end())</div>
1582
- <div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; {</div>
1583
- <div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
1584
- <div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg0Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(0);</div>
1585
- <div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg1Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(1);</div>
1586
- <div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg2Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(2);</div>
1587
- <div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> arg2Num = _svfir2ExeState-&gt;getEs()[_svfir-&gt;getValueNode(arg2Val)];</div>
1588
- <div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> strLen0 = getStrlen(arg0Val);</div>
1589
- <div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> totalLen = strLen0 + arg2Num;</div>
1590
- <div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; handleMemcpy(arg0Val, arg1Val, arg2Num, strLen0.<a class="code" href="structSVF_1_1AbstractValue.html#a6c979397d4efb5b37e3b2bf9feba5648">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a8e19113913c2aa236ab35d3bdd49541c">getIntNumeral</a>());</div>
1591
- <div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; <span class="comment">// do memcpy</span></div>
1592
- <div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; }</div>
1593
- <div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; <span class="keywordflow">else</span></div>
1594
- <div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; {</div>
1595
- <div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;unknown strcat function, please add it to strcatGroup or strncatGroup&quot;</span>);</div>
1596
- <div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; }</div>
1597
- <div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160;}</div>
1598
- <div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; </div>
1599
- <div class="line"><a name="l01545"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#adf02c5bf1b86f00163b114a78e03120c"> 1545</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#adf02c5bf1b86f00163b114a78e03120c">AbstractInterpretation::handleMemcpy</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVF::SVFValue</a> *dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVF::SVFValue</a> *src, <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> len, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> start_idx)</div>
1600
- <div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;{</div>
1601
- <div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a>&amp;es = _svfir2ExeState-&gt;getEs();</div>
1602
- <div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> dstId = _svfir-&gt;getValueNode(dst); <span class="comment">// pts(dstId) = {objid} objbar objtypeinfo-&gt;getType().</span></div>
1603
- <div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> srcId = _svfir-&gt;getValueNode(src);</div>
1604
- <div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> elemSize = 1;</div>
1605
- <div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; <span class="keywordflow">if</span> (dst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a330084f9a3deb6e5acb52a8ee3eb7fe4">isArrayTy</a>())</div>
1606
- <div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; {</div>
1607
- <div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; elemSize = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(dst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>())-&gt;getTypeOfElement()-&gt;getByteSize();</div>
1608
- <div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; }</div>
1609
- <div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; <span class="comment">// memcpy(i32*, i32*, 40)</span></div>
1610
- <div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
1611
- <div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; {</div>
1612
- <div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elemType = getPointeeElement(_svfir-&gt;getValueNode(dst)))</div>
1613
- <div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; {</div>
1614
- <div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; <span class="keywordflow">if</span> (elemType-&gt;isArrayTy())</div>
1615
- <div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; elemSize = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(elemType)-&gt;getTypeOfElement()-&gt;getByteSize();</div>
1616
- <div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; <span class="keywordflow">else</span></div>
1617
- <div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; elemSize = elemType-&gt;getByteSize();</div>
1618
- <div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; }</div>
1619
- <div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; <span class="keywordflow">else</span></div>
1620
- <div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; {</div>
1621
- <div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; elemSize = 1;</div>
1622
- <div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; }</div>
1572
+ <div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(len * elemSize);</div>
1573
+ <div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; }</div>
1574
+ <div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;}</div>
1575
+ <div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160; </div>
1576
+ <div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160; </div>
1577
+ <div class="line"><a name="l01523"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#acba90e968cebacca3da78ac765df33ef"> 1523</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#acba90e968cebacca3da78ac765df33ef">AbstractInterpretation::handleStrcat</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a> *call)</div>
1578
+ <div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;{</div>
1579
+ <div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; <span class="comment">// __strcat_chk, strcat, __wcscat_chk, wcscat, __strncat_chk, strncat, __wcsncat_chk, wcsncat</span></div>
1580
+ <div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; <span class="comment">// to check it is strcat group or strncat group</span></div>
1581
+ <div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
1582
+ <div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt; strcatGroup = {<span class="stringliteral">&quot;__strcat_chk&quot;</span>, <span class="stringliteral">&quot;strcat&quot;</span>, <span class="stringliteral">&quot;__wcscat_chk&quot;</span>, <span class="stringliteral">&quot;wcscat&quot;</span>};</div>
1583
+ <div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt; strncatGroup = {<span class="stringliteral">&quot;__strncat_chk&quot;</span>, <span class="stringliteral">&quot;strncat&quot;</span>, <span class="stringliteral">&quot;__wcsncat_chk&quot;</span>, <span class="stringliteral">&quot;wcsncat&quot;</span>};</div>
1584
+ <div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; <span class="keywordflow">if</span> (std::find(strcatGroup.begin(), strcatGroup.end(), fun-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>()) != strcatGroup.end())</div>
1585
+ <div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; {</div>
1586
+ <div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
1587
+ <div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg0Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(0);</div>
1588
+ <div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg1Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(1);</div>
1589
+ <div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> strLen0 = getStrlen(arg0Val);</div>
1590
+ <div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> strLen1 = getStrlen(arg1Val);</div>
1591
+ <div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> totalLen = strLen0 + strLen1;</div>
1592
+ <div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; handleMemcpy(arg0Val, arg1Val, strLen1, strLen0.<a class="code" href="structSVF_1_1AbstractValue.html#a6c979397d4efb5b37e3b2bf9feba5648">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a8e19113913c2aa236ab35d3bdd49541c">getIntNumeral</a>());</div>
1593
+ <div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; <span class="comment">// do memcpy</span></div>
1594
+ <div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; }</div>
1595
+ <div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (std::find(strncatGroup.begin(), strncatGroup.end(), fun-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>()) != strncatGroup.end())</div>
1596
+ <div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; {</div>
1597
+ <div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
1598
+ <div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg0Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(0);</div>
1599
+ <div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg1Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(1);</div>
1600
+ <div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg2Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(2);</div>
1601
+ <div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> arg2Num =</div>
1602
+ <div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; _svfir2AbsState-&gt;getAbsState()[_svfir-&gt;getValueNode(arg2Val)];</div>
1603
+ <div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> strLen0 = getStrlen(arg0Val);</div>
1604
+ <div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> totalLen = strLen0 + arg2Num;</div>
1605
+ <div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; handleMemcpy(arg0Val, arg1Val, arg2Num, strLen0.<a class="code" href="structSVF_1_1AbstractValue.html#a6c979397d4efb5b37e3b2bf9feba5648">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a8e19113913c2aa236ab35d3bdd49541c">getIntNumeral</a>());</div>
1606
+ <div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; <span class="comment">// do memcpy</span></div>
1607
+ <div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; }</div>
1608
+ <div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; <span class="keywordflow">else</span></div>
1609
+ <div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; {</div>
1610
+ <div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;unknown strcat function, please add it to strcatGroup or strncatGroup&quot;</span>);</div>
1611
+ <div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; }</div>
1612
+ <div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;}</div>
1613
+ <div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; </div>
1614
+ <div class="line"><a name="l01560"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#adf02c5bf1b86f00163b114a78e03120c"> 1560</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#adf02c5bf1b86f00163b114a78e03120c">AbstractInterpretation::handleMemcpy</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVF::SVFValue</a> *dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVF::SVFValue</a> *src, <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> len, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> start_idx)</div>
1615
+ <div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;{</div>
1616
+ <div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a>&amp;es = _svfir2AbsState-&gt;getAbsState();</div>
1617
+ <div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> dstId = _svfir-&gt;getValueNode(dst); <span class="comment">// pts(dstId) = {objid} objbar objtypeinfo-&gt;getType().</span></div>
1618
+ <div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> srcId = _svfir-&gt;getValueNode(src);</div>
1619
+ <div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> elemSize = 1;</div>
1620
+ <div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; <span class="keywordflow">if</span> (dst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a330084f9a3deb6e5acb52a8ee3eb7fe4">isArrayTy</a>())</div>
1621
+ <div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; {</div>
1622
+ <div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; elemSize = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(dst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>())-&gt;getTypeOfElement()-&gt;getByteSize();</div>
1623
1623
  <div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; }</div>
1624
- <div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; <span class="keywordflow">else</span></div>
1625
- <div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; {</div>
1626
- <div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;we cannot support this type&quot;</span>);</div>
1627
- <div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; }</div>
1628
- <div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> size = std::min((<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)<a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>(), (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>) len.<a class="code" href="structSVF_1_1AbstractValue.html#a6c979397d4efb5b37e3b2bf9feba5648">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a8e19113913c2aa236ab35d3bdd49541c">getIntNumeral</a>());</div>
1629
- <div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> range_val = size / elemSize;</div>
1630
- <div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; <span class="keywordflow">if</span> (_svfir2ExeState-&gt;inVarToAddrsTable(srcId) &amp;&amp; _svfir2ExeState-&gt;inVarToAddrsTable(dstId))</div>
1631
- <div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; {</div>
1632
- <div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; range_val; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>++)</div>
1633
- <div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; {</div>
1634
- <div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; <span class="comment">// dead loop for string and break if there&#39;s a \0. If no \0, it will throw err.</span></div>
1635
- <div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> expr_src = _svfir2ExeState-&gt;getGepObjAddress(srcId, <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>);</div>
1636
- <div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> expr_dst = _svfir2ExeState-&gt;getGepObjAddress(dstId, <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> + start_idx);</div>
1637
- <div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;dst: expr_dst.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
1638
- <div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; {</div>
1639
- <div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;src: expr_src.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
1640
- <div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; {</div>
1641
- <div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> objId = <a class="code" href="classSVF_1_1AbstractState.html#aaabe5850dbf1620c6058f5ac6cb169b6">AbstractState::getInternalID</a>(src);</div>
1642
- <div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; <span class="keywordflow">if</span> (es.<a class="code" href="classSVF_1_1AbstractState.html#aa2ac2ba25a9859232717ee22192feb35">inLocToValTable</a>(objId))</div>
1643
- <div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; {</div>
1644
- <div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; es.<a class="code" href="classSVF_1_1AbstractState.html#a1f935ea8ab16b04699284bf92bbbb23c">store</a>(dst, es.<a class="code" href="classSVF_1_1AbstractState.html#aa057c4c27e613d239161c04daf3a46d0">load</a>(src));</div>
1645
- <div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; }</div>
1646
- <div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (es.<a class="code" href="classSVF_1_1AbstractState.html#aff46e9d0fb20cedd54323c808d06f7cf">inLocToAddrsTable</a>(objId))</div>
1647
- <div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; {</div>
1648
- <div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; es.<a class="code" href="classSVF_1_1AbstractState.html#a1f935ea8ab16b04699284bf92bbbb23c">store</a>(dst, es.<a class="code" href="classSVF_1_1AbstractState.html#aa057c4c27e613d239161c04daf3a46d0">load</a>(src));</div>
1649
- <div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; }</div>
1650
- <div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; }</div>
1651
- <div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; }</div>
1652
- <div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; }</div>
1653
- <div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; }</div>
1654
- <div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;}</div>
1655
- <div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; </div>
1656
- <div class="line"><a name="l01602"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a2057e8e1c0aaf39e74f0a8fb2a1b580c"> 1602</a></span>&#160;<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* <a class="code" href="classSVF_1_1AbstractInterpretation.html#a2057e8e1c0aaf39e74f0a8fb2a1b580c">AbstractInterpretation::getPointeeElement</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div>
1657
- <div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;{</div>
1658
- <div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; <span class="keywordflow">if</span> (_svfir2ExeState-&gt;inVarToAddrsTable(<span class="keywordtype">id</span>))</div>
1659
- <div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; {</div>
1660
- <div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; <span class="keyword">const</span> <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a>&amp; addrs = _svfir2ExeState-&gt;<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>(<span class="keywordtype">id</span>);</div>
1661
- <div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> addr: addrs.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
1662
- <div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160; {</div>
1663
- <div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> addr_id = _svfir2ExeState-&gt;<a class="code" href="classSVF_1_1AddressValue.html#a3be7a2e3ec3215b67cd60f122d2cd10e">getInternalID</a>(addr);</div>
1664
- <div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; <span class="keywordflow">if</span> (addr_id == 0) <span class="comment">// nullptr has no memobj, skip</span></div>
1665
- <div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; <span class="keywordflow">continue</span>;</div>
1666
- <div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; <span class="keywordflow">return</span> SVFUtil::dyn_cast&lt;ObjVar&gt;(_svfir-&gt;getGNode(addr_id))-&gt;getMemObj()-&gt;getType();</div>
1667
- <div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; }</div>
1668
- <div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; }</div>
1669
- <div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; <span class="keywordflow">else</span></div>
1670
- <div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; {</div>
1671
- <div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; <span class="comment">// do nothing if no record in addrs table.</span></div>
1672
- <div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; }</div>
1673
- <div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
1674
- <div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;}</div>
1675
- <div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; </div>
1676
- <div class="line"><a name="l01622"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a568e2247536de76694dabfc5a5052b57"> 1622</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a568e2247536de76694dabfc5a5052b57">AbstractInterpretation::handleMemset</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVF::SVFValue</a> *dst, <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> elem, <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> len)</div>
1677
- <div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;{</div>
1678
- <div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a>&amp;es = _svfir2ExeState-&gt;getEs();</div>
1679
- <div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> dstId = _svfir-&gt;getValueNode(dst);</div>
1680
- <div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> size = std::min((<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)<a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>(), (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>) len.<a class="code" href="structSVF_1_1AbstractValue.html#a6c979397d4efb5b37e3b2bf9feba5648">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a8e19113913c2aa236ab35d3bdd49541c">getIntNumeral</a>());</div>
1681
- <div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> elemSize = 1;</div>
1682
- <div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; <span class="keywordflow">if</span> (dst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a330084f9a3deb6e5acb52a8ee3eb7fe4">isArrayTy</a>())</div>
1683
- <div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; {</div>
1684
- <div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; elemSize = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(dst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>())-&gt;getTypeOfElement()-&gt;getByteSize();</div>
1685
- <div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; }</div>
1686
- <div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
1687
- <div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; {</div>
1688
- <div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elemType = getPointeeElement(_svfir-&gt;getValueNode(dst)))</div>
1689
- <div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; {</div>
1690
- <div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; elemSize = elemType-&gt;getByteSize();</div>
1691
- <div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; }</div>
1692
- <div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; <span class="keywordflow">else</span></div>
1693
- <div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; {</div>
1694
- <div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; elemSize = 1;</div>
1695
- <div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; }</div>
1696
- <div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; }</div>
1697
- <div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; <span class="keywordflow">else</span></div>
1698
- <div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; {</div>
1699
- <div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;we cannot support this type&quot;</span>);</div>
1700
- <div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; }</div>
1701
- <div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; </div>
1702
- <div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> range_val = size / elemSize;</div>
1703
- <div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; range_val; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>++)</div>
1704
- <div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; {</div>
1705
- <div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; <span class="comment">// dead loop for string and break if there&#39;s a \0. If no \0, it will throw err.</span></div>
1706
- <div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <span class="keywordflow">if</span> (_svfir2ExeState-&gt;inVarToAddrsTable(dstId))</div>
1624
+ <div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; <span class="comment">// memcpy(i32*, i32*, 40)</span></div>
1625
+ <div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
1626
+ <div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; {</div>
1627
+ <div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elemType = getPointeeElement(_svfir-&gt;getValueNode(dst)))</div>
1628
+ <div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; {</div>
1629
+ <div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; <span class="keywordflow">if</span> (elemType-&gt;isArrayTy())</div>
1630
+ <div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; elemSize = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(elemType)-&gt;getTypeOfElement()-&gt;getByteSize();</div>
1631
+ <div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; <span class="keywordflow">else</span></div>
1632
+ <div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; elemSize = elemType-&gt;getByteSize();</div>
1633
+ <div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; }</div>
1634
+ <div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; <span class="keywordflow">else</span></div>
1635
+ <div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; {</div>
1636
+ <div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; elemSize = 1;</div>
1637
+ <div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; }</div>
1638
+ <div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; }</div>
1639
+ <div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; <span class="keywordflow">else</span></div>
1640
+ <div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; {</div>
1641
+ <div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;we cannot support this type&quot;</span>);</div>
1642
+ <div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; }</div>
1643
+ <div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> size = std::min((<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)<a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>(), (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>) len.<a class="code" href="structSVF_1_1AbstractValue.html#a6c979397d4efb5b37e3b2bf9feba5648">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a8e19113913c2aa236ab35d3bdd49541c">getIntNumeral</a>());</div>
1644
+ <div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> range_val = size / elemSize;</div>
1645
+ <div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; <span class="keywordflow">if</span> (_svfir2AbsState-&gt;inVarToAddrsTable(srcId) &amp;&amp;</div>
1646
+ <div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; _svfir2AbsState-&gt;inVarToAddrsTable(dstId))</div>
1647
+ <div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; {</div>
1648
+ <div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; range_val; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>++)</div>
1649
+ <div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; {</div>
1650
+ <div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; <span class="comment">// dead loop for string and break if there&#39;s a \0. If no \0, it will throw err.</span></div>
1651
+ <div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> expr_src =</div>
1652
+ <div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; _svfir2AbsState-&gt;getGepObjAddress(srcId, <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>);</div>
1653
+ <div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> expr_dst =</div>
1654
+ <div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; _svfir2AbsState-&gt;getGepObjAddress(dstId, <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> + start_idx);</div>
1655
+ <div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;dst: expr_dst.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
1656
+ <div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; {</div>
1657
+ <div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;src: expr_src.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
1658
+ <div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; {</div>
1659
+ <div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> objId = <a class="code" href="classSVF_1_1AbstractState.html#aaabe5850dbf1620c6058f5ac6cb169b6">AbstractState::getInternalID</a>(src);</div>
1660
+ <div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; <span class="keywordflow">if</span> (es.<a class="code" href="classSVF_1_1AbstractState.html#aa2ac2ba25a9859232717ee22192feb35">inLocToValTable</a>(objId))</div>
1661
+ <div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; {</div>
1662
+ <div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160; es.<a class="code" href="classSVF_1_1AbstractState.html#a1f935ea8ab16b04699284bf92bbbb23c">store</a>(dst, es.<a class="code" href="classSVF_1_1AbstractState.html#aa057c4c27e613d239161c04daf3a46d0">load</a>(src));</div>
1663
+ <div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; }</div>
1664
+ <div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (es.<a class="code" href="classSVF_1_1AbstractState.html#aff46e9d0fb20cedd54323c808d06f7cf">inLocToAddrsTable</a>(objId))</div>
1665
+ <div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; {</div>
1666
+ <div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; es.<a class="code" href="classSVF_1_1AbstractState.html#a1f935ea8ab16b04699284bf92bbbb23c">store</a>(dst, es.<a class="code" href="classSVF_1_1AbstractState.html#aa057c4c27e613d239161c04daf3a46d0">load</a>(src));</div>
1667
+ <div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; }</div>
1668
+ <div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; }</div>
1669
+ <div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; }</div>
1670
+ <div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; }</div>
1671
+ <div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; }</div>
1672
+ <div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160;}</div>
1673
+ <div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; </div>
1674
+ <div class="line"><a name="l01620"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a2057e8e1c0aaf39e74f0a8fb2a1b580c"> 1620</a></span>&#160;<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* <a class="code" href="classSVF_1_1AbstractInterpretation.html#a2057e8e1c0aaf39e74f0a8fb2a1b580c">AbstractInterpretation::getPointeeElement</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div>
1675
+ <div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;{</div>
1676
+ <div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; <span class="keywordflow">if</span> (_svfir2AbsState-&gt;inVarToAddrsTable(<span class="keywordtype">id</span>))</div>
1677
+ <div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; {</div>
1678
+ <div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; <span class="keyword">const</span> <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a>&amp; addrs = _svfir2AbsState-&gt;<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>(<span class="keywordtype">id</span>);</div>
1679
+ <div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> addr: addrs.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
1680
+ <div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; {</div>
1681
+ <div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> addr_id = _svfir2AbsState-&gt;<a class="code" href="classSVF_1_1AddressValue.html#a3be7a2e3ec3215b67cd60f122d2cd10e">getInternalID</a>(addr);</div>
1682
+ <div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; <span class="keywordflow">if</span> (addr_id == 0) <span class="comment">// nullptr has no memobj, skip</span></div>
1683
+ <div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; <span class="keywordflow">continue</span>;</div>
1684
+ <div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; <span class="keywordflow">return</span> SVFUtil::dyn_cast&lt;ObjVar&gt;(_svfir-&gt;getGNode(addr_id))-&gt;getMemObj()-&gt;getType();</div>
1685
+ <div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; }</div>
1686
+ <div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; }</div>
1687
+ <div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; <span class="keywordflow">else</span></div>
1688
+ <div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; {</div>
1689
+ <div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; <span class="comment">// do nothing if no record in addrs table.</span></div>
1690
+ <div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; }</div>
1691
+ <div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
1692
+ <div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;}</div>
1693
+ <div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; </div>
1694
+ <div class="line"><a name="l01640"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a568e2247536de76694dabfc5a5052b57"> 1640</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a568e2247536de76694dabfc5a5052b57">AbstractInterpretation::handleMemset</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVF::SVFValue</a> *dst, <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> elem, <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> len)</div>
1695
+ <div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;{</div>
1696
+ <div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; <a class="code" href="classSVF_1_1AbstractState.html">AbstractState</a>&amp;es = _svfir2AbsState-&gt;getAbsState();</div>
1697
+ <div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> dstId = _svfir-&gt;getValueNode(dst);</div>
1698
+ <div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> size = std::min((<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)<a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>(), (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>) len.<a class="code" href="structSVF_1_1AbstractValue.html#a6c979397d4efb5b37e3b2bf9feba5648">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a8e19113913c2aa236ab35d3bdd49541c">getIntNumeral</a>());</div>
1699
+ <div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> elemSize = 1;</div>
1700
+ <div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; <span class="keywordflow">if</span> (dst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a330084f9a3deb6e5acb52a8ee3eb7fe4">isArrayTy</a>())</div>
1701
+ <div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; {</div>
1702
+ <div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160; elemSize = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(dst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>())-&gt;getTypeOfElement()-&gt;getByteSize();</div>
1703
+ <div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; }</div>
1704
+ <div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
1705
+ <div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; {</div>
1706
+ <div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elemType = getPointeeElement(_svfir-&gt;getValueNode(dst)))</div>
1707
1707
  <div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; {</div>
1708
- <div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> lhs_gep = _svfir2ExeState-&gt;getGepObjAddress(dstId, <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>);</div>
1709
- <div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;addr: lhs_gep.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
1710
- <div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; {</div>
1711
- <div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> objId = <a class="code" href="classSVF_1_1AbstractState.html#aaabe5850dbf1620c6058f5ac6cb169b6">AbstractState::getInternalID</a>(addr);</div>
1712
- <div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; <span class="keywordflow">if</span> (es.<a class="code" href="classSVF_1_1AbstractState.html#aa2ac2ba25a9859232717ee22192feb35">inLocToValTable</a>(objId))</div>
1713
- <div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; {</div>
1714
- <div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> tmp = es.<a class="code" href="classSVF_1_1AbstractState.html#aa057c4c27e613d239161c04daf3a46d0">load</a>(addr);</div>
1715
- <div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; tmp.<a class="code" href="structSVF_1_1AbstractValue.html#a52a8a738896179a148581e1060a2ed66">join_with</a>(elem);</div>
1716
- <div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; es.<a class="code" href="classSVF_1_1AbstractState.html#a1f935ea8ab16b04699284bf92bbbb23c">store</a>(addr, tmp);</div>
1717
- <div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; }</div>
1718
- <div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; <span class="keywordflow">else</span></div>
1719
- <div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; {</div>
1720
- <div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; es.<a class="code" href="classSVF_1_1AbstractState.html#a1f935ea8ab16b04699284bf92bbbb23c">store</a>(addr, elem);</div>
1721
- <div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; }</div>
1722
- <div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; }</div>
1723
- <div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; }</div>
1724
- <div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; <span class="keywordflow">else</span></div>
1725
- <div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; <span class="keywordflow">break</span>;</div>
1726
- <div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; }</div>
1727
- <div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;}</div>
1728
- <div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; </div>
1729
- <div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; </div>
1730
- <div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; </div>
1731
- <div class="line"><a name="l01677"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a29fe7c63c61a7aec8ae1477a061f5bf2"> 1677</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a29fe7c63c61a7aec8ae1477a061f5bf2">AbstractInterpretation::AccessMemoryViaRetNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *callnode, <a class="code" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList&lt;const SVFValue *&gt;</a>&amp; worklist, <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFValue *&gt;</a>&amp; visited)</div>
1732
- <div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;{</div>
1733
- <div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; <span class="keywordflow">if</span> (callnode-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#ae23a7540609879ac0379fc53b4e7eead">getRetICFGNode</a>()-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>().size() &gt; 0)</div>
1734
- <div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; {</div>
1735
- <div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a> *ret = SVFUtil::dyn_cast&lt;RetPE&gt;(*callnode-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#ae23a7540609879ac0379fc53b4e7eead">getRetICFGNode</a>()-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>().begin());</div>
1736
- <div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; <a class="code" href="classSVF_1_1ValVar.html">SVF::ValVar</a> *ret_gnode = SVFUtil::dyn_cast&lt;ValVar&gt;(_svfir-&gt;getGNode(ret-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#ad03d28d16754c9049dd4d0ad3b6c1e28">getRHSVar</a>()-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>()));</div>
1737
- <div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; <span class="keywordflow">if</span> (ret_gnode-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a747b2c92c81d32fcd357e80d2d8fe7cc">hasIncomingEdges</a>(SVFStmt::PEDGEK::Phi))</div>
1738
- <div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; {</div>
1739
- <div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a> &amp;stmt_set = ret_gnode-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a76964ef7d4842a469d7720881499d8a6">getIncomingEdges</a>(SVFStmt::PEDGEK::Phi);</div>
1740
- <div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = stmt_set.begin(); it != stmt_set.end(); ++it)</div>
1741
- <div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; {</div>
1742
- <div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> *stmt = *it;</div>
1743
- <div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1PhiStmt.html">PhiStmt</a> *phi = SVFUtil::dyn_cast&lt;PhiStmt&gt;(stmt))</div>
1744
- <div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160; {</div>
1745
- <div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; <span class="keywordflow">if</span> (!visited.count(phi-&gt;getOpVar(0)-&gt;getValue()))</div>
1746
- <div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160; {</div>
1747
- <div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>(phi-&gt;getOpVar(0)-&gt;getValue());</div>
1748
- <div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; visited.insert(phi-&gt;getOpVar(0)-&gt;getValue());</div>
1749
- <div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; }</div>
1750
- <div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; }</div>
1751
- <div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; }</div>
1752
- <div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; }</div>
1753
- <div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; }</div>
1754
- <div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;}</div>
1755
- <div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; </div>
1756
- <div class="line"><a name="l01702"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a550c12360c2149ba0e55bdf4cf7b8dd0"> 1702</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a550c12360c2149ba0e55bdf4cf7b8dd0">AbstractInterpretation::AccessMemoryViaCopyStmt</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a> *<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>, <a class="code" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList&lt;const SVFValue *&gt;</a>&amp; worklist, <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFValue *&gt;</a>&amp; visited)</div>
1757
- <div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;{</div>
1758
- <div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160; <span class="keywordflow">if</span> (!visited.count(<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>-&gt;getRHSVar()-&gt;getValue()))</div>
1759
- <div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; {</div>
1760
- <div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; visited.insert(<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>-&gt;getRHSVar()-&gt;getValue());</div>
1761
- <div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160; worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>(<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>-&gt;getRHSVar()-&gt;getValue());</div>
1762
- <div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160; }</div>
1763
- <div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;}</div>
1764
- <div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; </div>
1765
- <div class="line"><a name="l01711"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#ac60581a57407fa4c65b1975f5be687b8"> 1711</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#ac60581a57407fa4c65b1975f5be687b8">AbstractInterpretation::AccessMemoryViaLoadStmt</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a> *load, <a class="code" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList&lt;const SVFValue *&gt;</a>&amp; worklist, <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFValue *&gt;</a>&amp; visited)</div>
1766
- <div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160;{</div>
1767
- <div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; <span class="keywordflow">if</span> (_svfir2ExeState-&gt;inVarToAddrsTable(load-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>()))</div>
1768
- <div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160; {</div>
1769
- <div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; <span class="keyword">const</span> <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> &amp;Addrs = _svfir2ExeState-&gt;<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>(load-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>());</div>
1770
- <div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> vaddr: Addrs.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
1771
- <div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; {</div>
1772
- <div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = _svfir2ExeState-&gt;<a class="code" href="classSVF_1_1AddressValue.html#a3be7a2e3ec3215b67cd60f122d2cd10e">getInternalID</a>(vaddr);</div>
1773
- <div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == 0) <span class="comment">// nullptr has no memobj, skip</span></div>
1774
- <div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; <span class="keywordflow">continue</span>;</div>
1775
- <div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *val = _svfir-&gt;getGNode(<span class="keywordtype">id</span>);</div>
1776
- <div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160; <span class="keywordflow">if</span> (!visited.count(val-&gt;getValue()))</div>
1777
- <div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160; {</div>
1778
- <div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; visited.insert(val-&gt;getValue());</div>
1779
- <div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160; worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>(val-&gt;getValue());</div>
1780
- <div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160; }</div>
1781
- <div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160; }</div>
1782
- <div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160; }</div>
1783
- <div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;}</div>
1784
- <div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160; </div>
1785
- <div class="line"><a name="l01731"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a048e203517ac727e6fe0653e1f24052c"> 1731</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a048e203517ac727e6fe0653e1f24052c">AbstractInterpretation::AccessMemoryViaCallArgs</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVF::SVFArgument</a> *arg,</div>
1786
- <div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160; <a class="code" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList&lt;const SVFValue *&gt;</a> &amp;worklist,</div>
1787
- <div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVF::SVFValue *&gt;</a> &amp;visited)</div>
1788
- <div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160;{</div>
1789
- <div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; std::vector&lt;const CallICFGNode *&gt; callstack = _callSiteStack;</div>
1790
- <div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; <a class="code" href="classSVF_1_1ValVar.html">SVF::ValVar</a> *arg_gnode = SVFUtil::cast&lt;ValVar&gt;(_svfir-&gt;getGNode(_svfir-&gt;getValueNode(arg)));</div>
1791
- <div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; <span class="keywordflow">if</span> (arg_gnode-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a747b2c92c81d32fcd357e80d2d8fe7cc">hasIncomingEdges</a>(SVFStmt::PEDGEK::Call))</div>
1792
- <div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; {</div>
1793
- <div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; <span class="keywordflow">while</span> (!callstack.empty())</div>
1794
- <div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; {</div>
1795
- <div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *cur_call = callstack.back();</div>
1796
- <div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; callstack.pop_back();</div>
1797
- <div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> *stmt: cur_call-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>())</div>
1798
- <div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; {</div>
1799
- <div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a> *callPE = SVFUtil::dyn_cast&lt;CallPE&gt;(stmt))</div>
1800
- <div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; {</div>
1801
- <div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; <span class="keywordflow">if</span> (callPE-&gt;getLHSVarID() == _svfir-&gt;getValueNode(arg))</div>
1802
- <div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160; {</div>
1803
- <div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;DummyObjVar&gt;(callPE-&gt;getRHSVar()) &amp;&amp;</div>
1804
- <div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160; !SVFUtil::isa&lt;DummyValVar&gt;(callPE-&gt;getRHSVar()))</div>
1805
- <div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160; {</div>
1806
- <div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; <span class="keywordflow">if</span> (!visited.count(callPE-&gt;getRHSVar()-&gt;getValue()))</div>
1807
- <div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; {</div>
1808
- <div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160; visited.insert(callPE-&gt;getRHSVar()-&gt;getValue());</div>
1809
- <div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>(callPE-&gt;getRHSVar()-&gt;getValue());</div>
1810
- <div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; <span class="keywordflow">break</span>;</div>
1811
- <div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160; }</div>
1812
- <div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160; }</div>
1813
- <div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; }</div>
1814
- <div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; }</div>
1815
- <div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160; }</div>
1816
- <div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; }</div>
1817
- <div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; }</div>
1818
- <div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;}</div>
1819
- <div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160; </div>
1708
+ <div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; elemSize = elemType-&gt;getByteSize();</div>
1709
+ <div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; }</div>
1710
+ <div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; <span class="keywordflow">else</span></div>
1711
+ <div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; {</div>
1712
+ <div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; elemSize = 1;</div>
1713
+ <div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; }</div>
1714
+ <div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; }</div>
1715
+ <div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; <span class="keywordflow">else</span></div>
1716
+ <div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; {</div>
1717
+ <div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;we cannot support this type&quot;</span>);</div>
1718
+ <div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; }</div>
1719
+ <div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; </div>
1720
+ <div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> range_val = size / elemSize;</div>
1721
+ <div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; range_val; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>++)</div>
1722
+ <div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; {</div>
1723
+ <div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; <span class="comment">// dead loop for string and break if there&#39;s a \0. If no \0, it will throw err.</span></div>
1724
+ <div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; <span class="keywordflow">if</span> (_svfir2AbsState-&gt;inVarToAddrsTable(dstId))</div>
1725
+ <div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; {</div>
1726
+ <div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> lhs_gep =</div>
1727
+ <div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; _svfir2AbsState-&gt;getGepObjAddress(dstId, <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>);</div>
1728
+ <div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;addr: lhs_gep.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
1729
+ <div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; {</div>
1730
+ <div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> objId = <a class="code" href="classSVF_1_1AbstractState.html#aaabe5850dbf1620c6058f5ac6cb169b6">AbstractState::getInternalID</a>(addr);</div>
1731
+ <div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; <span class="keywordflow">if</span> (es.<a class="code" href="classSVF_1_1AbstractState.html#aa2ac2ba25a9859232717ee22192feb35">inLocToValTable</a>(objId))</div>
1732
+ <div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; {</div>
1733
+ <div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> tmp = es.<a class="code" href="classSVF_1_1AbstractState.html#aa057c4c27e613d239161c04daf3a46d0">load</a>(addr);</div>
1734
+ <div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; tmp.<a class="code" href="structSVF_1_1AbstractValue.html#a52a8a738896179a148581e1060a2ed66">join_with</a>(elem);</div>
1735
+ <div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160; es.<a class="code" href="classSVF_1_1AbstractState.html#a1f935ea8ab16b04699284bf92bbbb23c">store</a>(addr, tmp);</div>
1736
+ <div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; }</div>
1737
+ <div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; <span class="keywordflow">else</span></div>
1738
+ <div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; {</div>
1739
+ <div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; es.<a class="code" href="classSVF_1_1AbstractState.html#a1f935ea8ab16b04699284bf92bbbb23c">store</a>(addr, elem);</div>
1740
+ <div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; }</div>
1741
+ <div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; }</div>
1742
+ <div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; }</div>
1743
+ <div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; <span class="keywordflow">else</span></div>
1744
+ <div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160; <span class="keywordflow">break</span>;</div>
1745
+ <div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; }</div>
1746
+ <div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;}</div>
1747
+ <div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; </div>
1748
+ <div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; </div>
1749
+ <div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; </div>
1750
+ <div class="line"><a name="l01696"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a29fe7c63c61a7aec8ae1477a061f5bf2"> 1696</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a29fe7c63c61a7aec8ae1477a061f5bf2">AbstractInterpretation::AccessMemoryViaRetNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *callnode, <a class="code" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList&lt;const SVFValue *&gt;</a>&amp; worklist, <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFValue *&gt;</a>&amp; visited)</div>
1751
+ <div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160;{</div>
1752
+ <div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; <span class="keywordflow">if</span> (callnode-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#ae23a7540609879ac0379fc53b4e7eead">getRetICFGNode</a>()-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>().size() &gt; 0)</div>
1753
+ <div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; {</div>
1754
+ <div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a> *ret = SVFUtil::dyn_cast&lt;RetPE&gt;(*callnode-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#ae23a7540609879ac0379fc53b4e7eead">getRetICFGNode</a>()-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>().begin());</div>
1755
+ <div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; <a class="code" href="classSVF_1_1ValVar.html">SVF::ValVar</a> *ret_gnode = SVFUtil::dyn_cast&lt;ValVar&gt;(_svfir-&gt;getGNode(ret-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#ad03d28d16754c9049dd4d0ad3b6c1e28">getRHSVar</a>()-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>()));</div>
1756
+ <div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160; <span class="keywordflow">if</span> (ret_gnode-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a747b2c92c81d32fcd357e80d2d8fe7cc">hasIncomingEdges</a>(SVFStmt::PEDGEK::Phi))</div>
1757
+ <div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160; {</div>
1758
+ <div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a> &amp;stmt_set = ret_gnode-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a76964ef7d4842a469d7720881499d8a6">getIncomingEdges</a>(SVFStmt::PEDGEK::Phi);</div>
1759
+ <div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = stmt_set.begin(); it != stmt_set.end(); ++it)</div>
1760
+ <div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; {</div>
1761
+ <div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> *stmt = *it;</div>
1762
+ <div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1PhiStmt.html">PhiStmt</a> *phi = SVFUtil::dyn_cast&lt;PhiStmt&gt;(stmt))</div>
1763
+ <div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; {</div>
1764
+ <div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; <span class="keywordflow">if</span> (!visited.count(phi-&gt;getOpVar(0)-&gt;getValue()))</div>
1765
+ <div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; {</div>
1766
+ <div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>(phi-&gt;getOpVar(0)-&gt;getValue());</div>
1767
+ <div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; visited.insert(phi-&gt;getOpVar(0)-&gt;getValue());</div>
1768
+ <div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160; }</div>
1769
+ <div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; }</div>
1770
+ <div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160; }</div>
1771
+ <div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; }</div>
1772
+ <div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; }</div>
1773
+ <div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160;}</div>
1774
+ <div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; </div>
1775
+ <div class="line"><a name="l01721"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a550c12360c2149ba0e55bdf4cf7b8dd0"> 1721</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a550c12360c2149ba0e55bdf4cf7b8dd0">AbstractInterpretation::AccessMemoryViaCopyStmt</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a> *<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>, <a class="code" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList&lt;const SVFValue *&gt;</a>&amp; worklist, <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFValue *&gt;</a>&amp; visited)</div>
1776
+ <div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;{</div>
1777
+ <div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160; <span class="keywordflow">if</span> (!visited.count(<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>-&gt;getRHSVar()-&gt;getValue()))</div>
1778
+ <div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; {</div>
1779
+ <div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160; visited.insert(<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>-&gt;getRHSVar()-&gt;getValue());</div>
1780
+ <div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160; worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>(<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>-&gt;getRHSVar()-&gt;getValue());</div>
1781
+ <div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160; }</div>
1782
+ <div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;}</div>
1783
+ <div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160; </div>
1784
+ <div class="line"><a name="l01730"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#ac60581a57407fa4c65b1975f5be687b8"> 1730</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#ac60581a57407fa4c65b1975f5be687b8">AbstractInterpretation::AccessMemoryViaLoadStmt</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a> *load, <a class="code" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList&lt;const SVFValue *&gt;</a>&amp; worklist, <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFValue *&gt;</a>&amp; visited)</div>
1785
+ <div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;{</div>
1786
+ <div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160; <span class="keywordflow">if</span> (_svfir2AbsState-&gt;inVarToAddrsTable(load-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>()))</div>
1787
+ <div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; {</div>
1788
+ <div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; <span class="keyword">const</span> <a class="code" href="structSVF_1_1AbstractValue.html">AbstractValue</a> &amp;Addrs =</div>
1789
+ <div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; _svfir2AbsState-&gt;<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>(load-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>());</div>
1790
+ <div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> vaddr: Addrs.<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
1791
+ <div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; {</div>
1792
+ <div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = _svfir2AbsState-&gt;<a class="code" href="classSVF_1_1AddressValue.html#a3be7a2e3ec3215b67cd60f122d2cd10e">getInternalID</a>(vaddr);</div>
1793
+ <div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == 0) <span class="comment">// nullptr has no memobj, skip</span></div>
1794
+ <div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; <span class="keywordflow">continue</span>;</div>
1795
+ <div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *val = _svfir-&gt;getGNode(<span class="keywordtype">id</span>);</div>
1796
+ <div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; <span class="keywordflow">if</span> (!visited.count(val-&gt;getValue()))</div>
1797
+ <div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; {</div>
1798
+ <div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; visited.insert(val-&gt;getValue());</div>
1799
+ <div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>(val-&gt;getValue());</div>
1800
+ <div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; }</div>
1801
+ <div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; }</div>
1802
+ <div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160; }</div>
1803
+ <div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;}</div>
1804
+ <div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160; </div>
1805
+ <div class="line"><a name="l01751"></a><span class="lineno"><a class="line" href="classSVF_1_1AbstractInterpretation.html#a048e203517ac727e6fe0653e1f24052c"> 1751</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AbstractInterpretation.html#a048e203517ac727e6fe0653e1f24052c">AbstractInterpretation::AccessMemoryViaCallArgs</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVF::SVFArgument</a> *arg,</div>
1806
+ <div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; <a class="code" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList&lt;const SVFValue *&gt;</a> &amp;worklist,</div>
1807
+ <div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVF::SVFValue *&gt;</a> &amp;visited)</div>
1808
+ <div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160;{</div>
1809
+ <div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; std::vector&lt;const CallICFGNode *&gt; callstack = _callSiteStack;</div>
1810
+ <div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; <a class="code" href="classSVF_1_1ValVar.html">SVF::ValVar</a> *arg_gnode = SVFUtil::cast&lt;ValVar&gt;(_svfir-&gt;getGNode(_svfir-&gt;getValueNode(arg)));</div>
1811
+ <div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160; <span class="keywordflow">if</span> (arg_gnode-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a747b2c92c81d32fcd357e80d2d8fe7cc">hasIncomingEdges</a>(SVFStmt::PEDGEK::Call))</div>
1812
+ <div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160; {</div>
1813
+ <div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; <span class="keywordflow">while</span> (!callstack.empty())</div>
1814
+ <div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; {</div>
1815
+ <div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *cur_call = callstack.back();</div>
1816
+ <div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; callstack.pop_back();</div>
1817
+ <div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> *stmt: cur_call-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>())</div>
1818
+ <div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160; {</div>
1819
+ <div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a> *callPE = SVFUtil::dyn_cast&lt;CallPE&gt;(stmt))</div>
1820
+ <div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160; {</div>
1821
+ <div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160; <span class="keywordflow">if</span> (callPE-&gt;getLHSVarID() == _svfir-&gt;getValueNode(arg))</div>
1822
+ <div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160; {</div>
1823
+ <div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;DummyObjVar&gt;(callPE-&gt;getRHSVar()) &amp;&amp;</div>
1824
+ <div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; !SVFUtil::isa&lt;DummyValVar&gt;(callPE-&gt;getRHSVar()))</div>
1825
+ <div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160; {</div>
1826
+ <div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160; <span class="keywordflow">if</span> (!visited.count(callPE-&gt;getRHSVar()-&gt;getValue()))</div>
1827
+ <div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160; {</div>
1828
+ <div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160; visited.insert(callPE-&gt;getRHSVar()-&gt;getValue());</div>
1829
+ <div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160; worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>(callPE-&gt;getRHSVar()-&gt;getValue());</div>
1830
+ <div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160; <span class="keywordflow">break</span>;</div>
1831
+ <div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160; }</div>
1832
+ <div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160; }</div>
1833
+ <div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160; }</div>
1834
+ <div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160; }</div>
1835
+ <div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160; }</div>
1836
+ <div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160; }</div>
1837
+ <div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160; }</div>
1838
+ <div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;}</div>
1839
+ <div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; </div>
1820
1840
  </div><!-- fragment --></div><!-- contents -->
1821
1841
  <div class="ttc" id="aclassSVF_1_1FIFOWorkList_html_a0df409a67428e528321869d201f2a474"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">SVF::FIFOWorkList::push</a></div><div class="ttdeci">bool push(const Data &amp;data)</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00165">WorkList.h:165</a></div></div>
1822
1842
  <div class="ttc" id="aAbstractInterpretation_8cpp_html_a3b70282b79998dcb9f6df78370bc1fe9"><div class="ttname"><a href="AbstractInterpretation_8cpp.html#a3b70282b79998dcb9f6df78370bc1fe9">_switch_lhsrhs_predicate</a></div><div class="ttdeci">Map&lt; s32_t, s32_t &gt; _switch_lhsrhs_predicate</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00066">AbstractInterpretation.cpp:66</a></div></div>
@@ -1844,14 +1864,14 @@ $(function() {
1844
1864
  <div class="ttc" id="aclassSVF_1_1ObjVar_html"><div class="ttname"><a href="classSVF_1_1ObjVar.html">SVF::ObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00315">SVFVariables.h:315</a></div></div>
1845
1865
  <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a738d1768c632f86d04599ec1aa53952a"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a738d1768c632f86d04599ec1aa53952a">SVF::AbstractInterpretation::markRecursiveFuns</a></div><div class="ttdeci">void markRecursiveFuns()</div><div class="ttdoc">mark recursive functions by detecting SCC in callgraph</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00138">AbstractInterpretation.cpp:138</a></div></div>
1846
1866
  <div class="ttc" id="anamespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00067">BasicTypes.h:67</a></div></div>
1847
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a5bba3c0570d73acc743742a30af1b0b4"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a5bba3c0570d73acc743742a30af1b0b4">SVF::AbstractInterpretation::getStrlen</a></div><div class="ttdeci">AbstractValue getStrlen(const SVF::SVFValue *strValue)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01451">AbstractInterpretation.cpp:1451</a></div></div>
1867
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a5bba3c0570d73acc743742a30af1b0b4"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a5bba3c0570d73acc743742a30af1b0b4">SVF::AbstractInterpretation::getStrlen</a></div><div class="ttdeci">AbstractValue getStrlen(const SVF::SVFValue *strValue)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01464">AbstractInterpretation.cpp:1464</a></div></div>
1848
1868
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a9815a5b31ac7dc21239d08e5b9f61106"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVF::SVFUtil::getSVFCallSite</a></div><div class="ttdeci">CallSite getSVFCallSite(const SVFInstruction *inst)</div><div class="ttdoc">Return LLVM callsite given an instruction.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00196">SVFUtil.h:196</a></div></div>
1849
1869
  <div class="ttc" id="astructSVF_1_1AbstractValue_html_aae73e4c65c0324946849f03881f05c3b"><div class="ttname"><a href="structSVF_1_1AbstractValue.html#aae73e4c65c0324946849f03881f05c3b">SVF::AbstractValue::is_numeral</a></div><div class="ttdeci">bool is_numeral() const</div><div class="ttdef"><b>Definition:</b> <a href="AbstractValue_8h_source.html#l00264">AbstractValue.h:264</a></div></div>
1850
1870
  <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_aae29a8da31fddd069cb0e19cc2f78d46"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#aae29a8da31fddd069cb0e19cc2f78d46">SVF::AbstractInterpretation::~AbstractInterpretation</a></div><div class="ttdeci">virtual ~AbstractInterpretation()</div><div class="ttdoc">Destructor.</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00129">AbstractInterpretation.cpp:129</a></div></div>
1851
1871
  <div class="ttc" id="aSVFType_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00512">SVFType.h:512</a></div></div>
1852
1872
  <div class="ttc" id="aclassSVF_1_1ICFGNode_html_a6c68f52dd90728073fb79141df9b0661"><div class="ttname"><a href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">SVF::ICFGNode::getSVFStmts</a></div><div class="ttdeci">const SVFStmtList &amp; getSVFStmts() const</div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00127">ICFGNode.h:127</a></div></div>
1853
1873
  <div class="ttc" id="aclassSVF_1_1SelectStmt_html"><div class="ttname"><a href="classSVF_1_1SelectStmt.html">SVF::SelectStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00881">SVFStatements.h:881</a></div></div>
1854
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a2b0a2f7a662909d999634d0ec08cb29c"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a2b0a2f7a662909d999634d0ec08cb29c">SVF::AbstractInterpretation::SkipRecursiveFunc</a></div><div class="ttdeci">virtual void SkipRecursiveFunc(const SVFFunction *func)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00915">AbstractInterpretation.cpp:915</a></div></div>
1874
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a2b0a2f7a662909d999634d0ec08cb29c"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a2b0a2f7a662909d999634d0ec08cb29c">SVF::AbstractInterpretation::SkipRecursiveFunc</a></div><div class="ttdeci">virtual void SkipRecursiveFunc(const SVFFunction *func)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00916">AbstractInterpretation.cpp:916</a></div></div>
1855
1875
  <div class="ttc" id="aclassSVF_1_1IntervalValue_html_a144e17cec654e83654298b379ed4ce9f"><div class="ttname"><a href="classSVF_1_1IntervalValue.html#a144e17cec654e83654298b379ed4ce9f">SVF::IntervalValue::meet_with</a></div><div class="ttdeci">void meet_with(const IntervalValue &amp;other)</div><div class="ttdoc">Return a intersected IntervalValue.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00446">IntervalValue.h:446</a></div></div>
1856
1876
  <div class="ttc" id="aclassSVF_1_1RetPE_html"><div class="ttname"><a href="classSVF_1_1RetPE.html">SVF::RetPE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00670">SVFStatements.h:670</a></div></div>
1857
1877
  <div class="ttc" id="aclassSVF_1_1CmpStmt_html"><div class="ttname"><a href="classSVF_1_1CmpStmt.html">SVF::CmpStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00936">SVFStatements.h:936</a></div></div>
@@ -1865,7 +1885,7 @@ $(function() {
1865
1885
  <div class="ttc" id="acJSON_8h_html_a25d22ecc7e656d2c59332072684e8766"><div class="ttname"><a href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a></div><div class="ttdeci">const char *const name</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00264">cJSON.h:264</a></div></div>
1866
1886
  <div class="ttc" id="anamespaceSVF_html_a366625858f450a1ea5f985a3c83e0f14"><div class="ttname"><a href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">SVF::u64_t</a></div><div class="ttdeci">unsigned long long u64_t</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00048">GeneralType.h:48</a></div></div>
1867
1887
  <div class="ttc" id="aclassSVF_1_1ICFGNode_html"><div class="ttname"><a href="classSVF_1_1ICFGNode.html">SVF::ICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00054">ICFGNode.h:54</a></div></div>
1868
- <div class="ttc" id="aclassSVF_1_1AEStat_html_a798d07cc0a36ce0d9010ab86d1ec216f"><div class="ttname"><a href="classSVF_1_1AEStat.html#a798d07cc0a36ce0d9010ab86d1ec216f">SVF::AEStat::performStat</a></div><div class="ttdeci">void performStat() override</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01006">AbstractInterpretation.cpp:1006</a></div></div>
1888
+ <div class="ttc" id="aclassSVF_1_1AEStat_html_a798d07cc0a36ce0d9010ab86d1ec216f"><div class="ttname"><a href="classSVF_1_1AEStat.html#a798d07cc0a36ce0d9010ab86d1ec216f">SVF::AEStat::performStat</a></div><div class="ttdeci">void performStat() override</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01009">AbstractInterpretation.cpp:1009</a></div></div>
1869
1889
  <div class="ttc" id="aclassSVF_1_1AbstractState_html_aff46e9d0fb20cedd54323c808d06f7cf"><div class="ttname"><a href="classSVF_1_1AbstractState.html#aff46e9d0fb20cedd54323c808d06f7cf">SVF::AbstractState::inLocToAddrsTable</a></div><div class="ttdeci">bool inLocToAddrsTable(u32_t id) const</div><div class="ttdoc">whether the memory address stores memory addresses</div><div class="ttdef"><b>Definition:</b> <a href="AbstractState_8h_source.html#l00227">AbstractState.h:227</a></div></div>
1870
1890
  <div class="ttc" id="aclassSVF_1_1SCCDetection_html_a123b5006a6da7053e5e357140da3c5a3"><div class="ttname"><a href="classSVF_1_1SCCDetection.html#a123b5006a6da7053e5e357140da3c5a3">SVF::SCCDetection::find</a></div><div class="ttdeci">void find(void)</div><div class="ttdef"><b>Definition:</b> <a href="SCC_8h_source.html#l00308">SCC.h:308</a></div></div>
1871
1891
  <div class="ttc" id="aclassSVF_1_1IntervalValue_html_a43f48c744f7bda0dc689b8f186449371"><div class="ttname"><a href="classSVF_1_1IntervalValue.html#a43f48c744f7bda0dc689b8f186449371">SVF::IntervalValue::minus_infinity</a></div><div class="ttdeci">static NumericLiteral minus_infinity()</div><div class="ttdoc">Get minus infinity -oo.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00066">IntervalValue.h:66</a></div></div>
@@ -1878,7 +1898,7 @@ $(function() {
1878
1898
  <div class="ttc" id="astructSVF_1_1AbstractValue_html_aecd8d41379dd6496772537ad51d1cb02"><div class="ttname"><a href="structSVF_1_1AbstractValue.html#aecd8d41379dd6496772537ad51d1cb02">SVF::AbstractValue::ub</a></div><div class="ttdeci">const NumericLiteral &amp; ub() const</div><div class="ttdef"><b>Definition:</b> <a href="AbstractValue_8h_source.html#l00204">AbstractValue.h:204</a></div></div>
1879
1899
  <div class="ttc" id="aclassSVF_1_1AbstractState_html_a234d0b11624febec605bc028f093240b"><div class="ttname"><a href="classSVF_1_1AbstractState.html#a234d0b11624febec605bc028f093240b">SVF::AbstractState::getAddrs</a></div><div class="ttdeci">AbstractValue &amp; getAddrs(u32_t id)</div><div class="ttdoc">get memory addresses of variable</div><div class="ttdef"><b>Definition:</b> <a href="AbstractState_8h_source.html#l00187">AbstractState.h:187</a></div></div>
1880
1900
  <div class="ttc" id="aclassSVF_1_1CallPE_html"><div class="ttname"><a href="classSVF_1_1CallPE.html">SVF::CallPE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00610">SVFStatements.h:610</a></div></div>
1881
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a568e2247536de76694dabfc5a5052b57"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a568e2247536de76694dabfc5a5052b57">SVF::AbstractInterpretation::handleMemset</a></div><div class="ttdeci">virtual void handleMemset(const SVFValue *dst, AbstractValue elem, AbstractValue len)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01622">AbstractInterpretation.cpp:1622</a></div></div>
1901
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a568e2247536de76694dabfc5a5052b57"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a568e2247536de76694dabfc5a5052b57">SVF::AbstractInterpretation::handleMemset</a></div><div class="ttdeci">virtual void handleMemset(const SVFValue *dst, AbstractValue elem, AbstractValue len)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01640">AbstractInterpretation.cpp:1640</a></div></div>
1882
1902
  <div class="ttc" id="acJSON_8h_html_a750b5d744c39a06bfb13e6eb010e35d0"><div class="ttname"><a href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a></div><div class="ttdeci">int index</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00170">cJSON.h:170</a></div></div>
1883
1903
  <div class="ttc" id="aclassSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID.</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00180">GenericGraph.h:180</a></div></div>
1884
1904
  <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a12cba4105a721ff73a7b13b70ee9c5b2"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a12cba4105a721ff73a7b13b70ee9c5b2">SVF::AbstractInterpretation::hasBranchES</a></div><div class="ttdeci">bool hasBranchES(const IntraCFGEdge *intraEdge, AbstractState &amp;es)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00493">AbstractInterpretation.cpp:493</a></div></div>
@@ -1891,7 +1911,7 @@ $(function() {
1891
1911
  <div class="ttc" id="aclassSVF_1_1SVFFunction_html_a067bd6dbaf74a028d546fa56b095791b"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a067bd6dbaf74a028d546fa56b095791b">SVF::SVFFunction::getAnnotations</a></div><div class="ttdeci">const std::vector&lt; std::string &gt; &amp; getAnnotations() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00466">SVFValue.h:466</a></div></div>
1892
1912
  <div class="ttc" id="aAbstractInterpretation_8cpp_html_a6ded577f411d8dd34071fba96989f93a"><div class="ttname"><a href="AbstractInterpretation_8cpp.html#a6ded577f411d8dd34071fba96989f93a">SSE_FUNC_PROCESS</a></div><div class="ttdeci">#define SSE_FUNC_PROCESS(LLVM_NAME,FUNC_NAME)</div></div>
1893
1913
  <div class="ttc" id="aclassSVF_1_1AssignStmt_html_a4cec89489e82c60c287cae3327f3f01d"><div class="ttname"><a href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">SVF::AssignStmt::getRHSVarID</a></div><div class="ttdeci">NodeID getRHSVarID() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00298">SVFStatements.h:298</a></div></div>
1894
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a0e8b546f608417e218c2fab5a5893135"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a0e8b546f608417e218c2fab5a5893135">SVF::AbstractInterpretation::getAllocaInstByteSize</a></div><div class="ttdeci">u32_t getAllocaInstByteSize(const AddrStmt *addr)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01286">AbstractInterpretation.cpp:1286</a></div></div>
1914
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a0e8b546f608417e218c2fab5a5893135"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a0e8b546f608417e218c2fab5a5893135">SVF::AbstractInterpretation::getAllocaInstByteSize</a></div><div class="ttdeci">u32_t getAllocaInstByteSize(const AddrStmt *addr)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01296">AbstractInterpretation.cpp:1296</a></div></div>
1895
1915
  <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a4080994b793d9510c00cb3a0260e0a61"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a4080994b793d9510c00cb3a0260e0a61">SVF::AbstractInterpretation::AbstractInterpretation</a></div><div class="ttdeci">AbstractInterpretation()</div><div class="ttdoc">Constructor.</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00123">AbstractInterpretation.cpp:123</a></div></div>
1896
1916
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a145abbd2958629718fbca41d25c3124d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVF::SVFUtil::getCallee</a></div><div class="ttdeci">const SVFFunction * getCallee(const CallSite cs)</div><div class="ttdoc">Return callee of a callsite. Return null if this is an indirect call.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00241">SVFUtil.h:241</a></div></div>
1897
1917
  <div class="ttc" id="aclassSVF_1_1ValVar_html"><div class="ttname"><a href="classSVF_1_1ValVar.html">SVF::ValVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00262">SVFVariables.h:262</a></div></div>
@@ -1909,11 +1929,11 @@ $(function() {
1909
1929
  <div class="ttc" id="aclassSVF_1_1SVFArrayType_html"><div class="ttname"><a href="classSVF_1_1SVFArrayType.html">SVF::SVFArrayType</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00377">SVFType.h:377</a></div></div>
1910
1930
  <div class="ttc" id="aclassSVF_1_1Options_html_ab25f7ec430ba1d41597fc409b758b193"><div class="ttname"><a href="classSVF_1_1Options.html#ab25f7ec430ba1d41597fc409b758b193">SVF::Options::WidenDelay</a></div><div class="ttdeci">static const Option&lt; u32_t &gt; WidenDelay</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00265">Options.h:265</a></div></div>
1911
1931
  <div class="ttc" id="aclassSVF_1_1SVFIR_html_a37cfa2aa4e7b98ef9dc8179f581a2362"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVF::SVFIR::getPAG</a></div><div class="ttdeci">static SVFIR * getPAG(bool buildFromFile=false)</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="SVFIR_8h_source.html#l00114">SVFIR.h:114</a></div></div>
1912
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a7dfd11b987d9ff9528277e23191ed95d"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a7dfd11b987d9ff9528277e23191ed95d">SVF::AbstractInterpretation::strRead</a></div><div class="ttdeci">std::string strRead(const SVFValue *rhs)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01139">AbstractInterpretation.cpp:1139</a></div></div>
1932
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a7dfd11b987d9ff9528277e23191ed95d"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a7dfd11b987d9ff9528277e23191ed95d">SVF::AbstractInterpretation::strRead</a></div><div class="ttdeci">std::string strRead(const SVFValue *rhs)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01142">AbstractInterpretation.cpp:1142</a></div></div>
1913
1933
  <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a2a317e4263c4d8acbc5088a18a3849aa"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a2a317e4263c4d8acbc5088a18a3849aa">SVF::AbstractInterpretation::directCallFunPass</a></div><div class="ttdeci">virtual void directCallFunPass(const CallICFGNode *callNode)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00622">AbstractInterpretation.cpp:622</a></div></div>
1914
1934
  <div class="ttc" id="aclassSVF_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#l00385">ICFGNode.h:385</a></div></div>
1915
1935
  <div class="ttc" id="aclassSVF_1_1SVFType_html"><div class="ttname"><a href="classSVF_1_1SVFType.html">SVF::SVFType</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00156">SVFType.h:156</a></div></div>
1916
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a048e203517ac727e6fe0653e1f24052c"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a048e203517ac727e6fe0653e1f24052c">SVF::AbstractInterpretation::AccessMemoryViaCallArgs</a></div><div class="ttdeci">void AccessMemoryViaCallArgs(const SVF::SVFArgument *arg, SVF::FILOWorkList&lt; const SVFValue * &gt; &amp;worklist, Set&lt; const SVFValue * &gt; &amp;visited)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01731">AbstractInterpretation.cpp:1731</a></div></div>
1936
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a048e203517ac727e6fe0653e1f24052c"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a048e203517ac727e6fe0653e1f24052c">SVF::AbstractInterpretation::AccessMemoryViaCallArgs</a></div><div class="ttdeci">void AccessMemoryViaCallArgs(const SVF::SVFArgument *arg, SVF::FILOWorkList&lt; const SVFValue * &gt; &amp;worklist, Set&lt; const SVFValue * &gt; &amp;visited)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01751">AbstractInterpretation.cpp:1751</a></div></div>
1917
1937
  <div class="ttc" id="aclassSVF_1_1SVFVar_html_a747b2c92c81d32fcd357e80d2d8fe7cc"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a747b2c92c81d32fcd357e80d2d8fe7cc">SVF::SVFVar::hasIncomingEdges</a></div><div class="ttdeci">bool hasIncomingEdges(SVFStmt::PEDGEK kind) const</div><div class="ttdoc">Has incoming SVFIR statements (edges)</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00158">SVFVariables.h:158</a></div></div>
1918
1938
  <div class="ttc" id="astructSVF_1_1AbstractValue_html_a61516b8cd3550afd29f80fbe8c9146ff"><div class="ttname"><a href="structSVF_1_1AbstractValue.html#a61516b8cd3550afd29f80fbe8c9146ff">SVF::AbstractValue::isUnknown</a></div><div class="ttdeci">bool isUnknown() const</div><div class="ttdef"><b>Definition:</b> <a href="AbstractValue_8h_source.html#l00083">AbstractValue.h:83</a></div></div>
1919
1939
  <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_ac3f8e4602627135c6fb03ba843893d6a"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#ac3f8e4602627135c6fb03ba843893d6a">SVF::AbstractInterpretation::hasSwitchBranchES</a></div><div class="ttdeci">bool hasSwitchBranchES(const SVFVar *var, s64_t succ, AbstractState &amp;es)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00449">AbstractInterpretation.cpp:449</a></div></div>
@@ -1923,7 +1943,7 @@ $(function() {
1923
1943
  <div class="ttc" id="aclassSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00297">SVFValue.h:297</a></div></div>
1924
1944
  <div class="ttc" id="aextapi_8c_html_a9d60842d6ae065229ba810e6b01110da"><div class="ttname"><a href="extapi_8c.html#a9d60842d6ae065229ba810e6b01110da">ispunct</a></div><div class="ttdeci">int ispunct(int argument)</div><div class="ttdef"><b>Definition:</b> <a href="extapi_8c_source.html#l00872">extapi.c:872</a></div></div>
1925
1945
  <div class="ttc" id="aclassSVF_1_1FILOWorkList_html_afcf3fcda18e8d3e2bad70a51376c0ce1"><div class="ttname"><a href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">SVF::FILOWorkList::push</a></div><div class="ttdeci">bool push(const Data &amp;data)</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00257">WorkList.h:257</a></div></div>
1926
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a550c12360c2149ba0e55bdf4cf7b8dd0"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a550c12360c2149ba0e55bdf4cf7b8dd0">SVF::AbstractInterpretation::AccessMemoryViaCopyStmt</a></div><div class="ttdeci">void AccessMemoryViaCopyStmt(const CopyStmt *copy, SVF::FILOWorkList&lt; const SVFValue * &gt; &amp;worklist, Set&lt; const SVFValue * &gt; &amp;visited)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01702">AbstractInterpretation.cpp:1702</a></div></div>
1946
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a550c12360c2149ba0e55bdf4cf7b8dd0"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a550c12360c2149ba0e55bdf4cf7b8dd0">SVF::AbstractInterpretation::AccessMemoryViaCopyStmt</a></div><div class="ttdeci">void AccessMemoryViaCopyStmt(const CopyStmt *copy, SVF::FILOWorkList&lt; const SVFValue * &gt; &amp;worklist, Set&lt; const SVFValue * &gt; &amp;visited)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01721">AbstractInterpretation.cpp:1721</a></div></div>
1927
1947
  <div class="ttc" id="aclassSVF_1_1AbstractState_html_afd37c4419cfc79b6765fa243fcbea573"><div class="ttname"><a href="classSVF_1_1AbstractState.html#afd37c4419cfc79b6765fa243fcbea573">SVF::AbstractState::widening</a></div><div class="ttdeci">AbstractState widening(const AbstractState &amp;other)</div><div class="ttdoc">domain widen with other, and return the widened domain</div><div class="ttdef"><b>Definition:</b> <a href="AbstractState_8cpp_source.html#l00058">AbstractState.cpp:58</a></div></div>
1928
1948
  <div class="ttc" id="aclassSVF_1_1WTONode_html"><div class="ttname"><a href="classSVF_1_1WTONode.html">SVF::WTONode</a></div><div class="ttdef"><b>Definition:</b> <a href="WTO_8h_source.html#l00046">WTO.h:46</a></div></div>
1929
1949
  <div class="ttc" id="aclassSVF_1_1SVFGlobalValue_html"><div class="ttname"><a href="classSVF_1_1SVFGlobalValue.html">SVF::SVFGlobalValue</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00856">SVFValue.h:856</a></div></div>
@@ -1931,32 +1951,32 @@ $(function() {
1931
1951
  <div class="ttc" id="aAbstractInterpretation_8cpp_html_a6baa35cec0782ac3179849752a732e5c"><div class="ttname"><a href="AbstractInterpretation_8cpp.html#a6baa35cec0782ac3179849752a732e5c">_reverse_predicate</a></div><div class="ttdeci">Map&lt; s32_t, s32_t &gt; _reverse_predicate</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00045">AbstractInterpretation.cpp:45</a></div></div>
1932
1952
  <div class="ttc" id="aclassSVF_1_1SVFStmt_html"><div class="ttname"><a href="classSVF_1_1SVFStmt.html">SVF::SVFStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00051">SVFStatements.h:51</a></div></div>
1933
1953
  <div class="ttc" id="aclassSVF_1_1SVFVar_html"><div class="ttname"><a href="classSVF_1_1SVFVar.html">SVF::SVFVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00045">SVFVariables.h:45</a></div></div>
1934
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a1b8e1e0cc9803687a0eb951015ac59af"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a1b8e1e0cc9803687a0eb951015ac59af">SVF::AbstractInterpretation::widenFixpointPass</a></div><div class="ttdeci">bool widenFixpointPass(const ICFGNode *cycle_head, AbstractState &amp;pre_es)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00759">AbstractInterpretation.cpp:759</a></div></div>
1935
- <div class="ttc" id="aclassSVF_1_1AEStat_html_ae2cfe939670689a4ec5030c096a5f546"><div class="ttname"><a href="classSVF_1_1AEStat.html#ae2cfe939670689a4ec5030c096a5f546">SVF::AEStat::countStateSize</a></div><div class="ttdeci">void countStateSize()</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00951">AbstractInterpretation.cpp:951</a></div></div>
1954
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a1b8e1e0cc9803687a0eb951015ac59af"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a1b8e1e0cc9803687a0eb951015ac59af">SVF::AbstractInterpretation::widenFixpointPass</a></div><div class="ttdeci">bool widenFixpointPass(const ICFGNode *cycle_head, AbstractState &amp;pre_es)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00760">AbstractInterpretation.cpp:760</a></div></div>
1955
+ <div class="ttc" id="aclassSVF_1_1AEStat_html_ae2cfe939670689a4ec5030c096a5f546"><div class="ttname"><a href="classSVF_1_1AEStat.html#ae2cfe939670689a4ec5030c096a5f546">SVF::AEStat::countStateSize</a></div><div class="ttdeci">void countStateSize()</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00952">AbstractInterpretation.cpp:952</a></div></div>
1936
1956
  <div class="ttc" id="aclassSVF_1_1WTOCycle_html_a807c883d1cfe98c791c903125742f95b"><div class="ttname"><a href="classSVF_1_1WTOCycle.html#a807c883d1cfe98c791c903125742f95b">SVF::WTOCycle::begin</a></div><div class="ttdeci">Iterator begin() const</div><div class="ttdoc">Begin iterator over the components.</div><div class="ttdef"><b>Definition:</b> <a href="WTO_8h_source.html#l00418">WTO.h:418</a></div></div>
1937
1957
  <div class="ttc" id="aclassSVF_1_1IntraCFGEdge_html_a2657751b285cb6db8084da38b00dcab9"><div class="ttname"><a href="classSVF_1_1IntraCFGEdge.html#a2657751b285cb6db8084da38b00dcab9">SVF::IntraCFGEdge::getCondition</a></div><div class="ttdeci">const SVFValue * getCondition() const</div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00140">ICFGEdge.h:140</a></div></div>
1938
1958
  <div class="ttc" id="aclassSVF_1_1LoadStmt_html"><div class="ttname"><a href="classSVF_1_1LoadStmt.html">SVF::LoadStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00489">SVFStatements.h:489</a></div></div>
1939
1959
  <div class="ttc" id="aclassSVF_1_1IntervalValue_html"><div class="ttname"><a href="classSVF_1_1IntervalValue.html">SVF::IntervalValue</a></div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00043">IntervalValue.h:43</a></div></div>
1940
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a6cac9b69d85111a5a26373ec848a3282"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a6cac9b69d85111a5a26373ec848a3282">SVF::AbstractInterpretation::handleExtAPI</a></div><div class="ttdeci">virtual void handleExtAPI(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01170">AbstractInterpretation.cpp:1170</a></div></div>
1960
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a6cac9b69d85111a5a26373ec848a3282"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a6cac9b69d85111a5a26373ec848a3282">SVF::AbstractInterpretation::handleExtAPI</a></div><div class="ttdeci">virtual void handleExtAPI(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01174">AbstractInterpretation.cpp:1174</a></div></div>
1941
1961
  <div class="ttc" id="astructSVF_1_1AbstractValue_html_ac9149740b6c33f33e70cc2aa4f89040e"><div class="ttname"><a href="structSVF_1_1AbstractValue.html#ac9149740b6c33f33e70cc2aa4f89040e">SVF::AbstractValue::getIntNumeral</a></div><div class="ttdeci">s64_t getIntNumeral() const</div><div class="ttdef"><b>Definition:</b> <a href="AbstractValue_8h_source.html#l00252">AbstractValue.h:252</a></div></div>
1942
1962
  <div class="ttc" id="aclassSVF_1_1AbstractState_html_aa057c4c27e613d239161c04daf3a46d0"><div class="ttname"><a href="classSVF_1_1AbstractState.html#aa057c4c27e613d239161c04daf3a46d0">SVF::AbstractState::load</a></div><div class="ttdeci">virtual AbstractValue &amp; load(u32_t addr)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractState_8h_source.html#l00329">AbstractState.h:329</a></div></div>
1943
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_adf02c5bf1b86f00163b114a78e03120c"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#adf02c5bf1b86f00163b114a78e03120c">SVF::AbstractInterpretation::handleMemcpy</a></div><div class="ttdeci">virtual void handleMemcpy(const SVFValue *dst, const SVFValue *src, AbstractValue len, u32_t start_idx)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01545">AbstractInterpretation.cpp:1545</a></div></div>
1963
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_adf02c5bf1b86f00163b114a78e03120c"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#adf02c5bf1b86f00163b114a78e03120c">SVF::AbstractInterpretation::handleMemcpy</a></div><div class="ttdeci">virtual void handleMemcpy(const SVFValue *dst, const SVFValue *src, AbstractValue len, u32_t start_idx)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01560">AbstractInterpretation.cpp:1560</a></div></div>
1944
1964
  <div class="ttc" id="aclassSVF_1_1AssignStmt_html_ad03d28d16754c9049dd4d0ad3b6c1e28"><div class="ttname"><a href="classSVF_1_1AssignStmt.html#ad03d28d16754c9049dd4d0ad3b6c1e28">SVF::AssignStmt::getRHSVar</a></div><div class="ttdeci">SVFVar * getRHSVar() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00290">SVFStatements.h:290</a></div></div>
1945
1965
  <div class="ttc" id="aclassSVF_1_1SCCDetection_html_a5d699af73b1e7ad4e3a5f6d26b8b6d15"><div class="ttname"><a href="classSVF_1_1SCCDetection.html#a5d699af73b1e7ad4e3a5f6d26b8b6d15">SVF::SCCDetection::isInCycle</a></div><div class="ttdeci">bool isInCycle(NodeID n) const</div><div class="ttdoc">whether the node is in a cycle</div><div class="ttdef"><b>Definition:</b> <a href="SCC_8h_source.html#l00149">SCC.h:149</a></div></div>
1946
1966
  <div class="ttc" id="aextapi_8c_html_a99355d8f0fb41ec43effb95189db0ed4"><div class="ttname"><a href="extapi_8c.html#a99355d8f0fb41ec43effb95189db0ed4">isprint</a></div><div class="ttdeci">int isprint(int c)</div><div class="ttdef"><b>Definition:</b> <a href="extapi_8c_source.html#l00867">extapi.c:867</a></div></div>
1947
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a29fe7c63c61a7aec8ae1477a061f5bf2"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a29fe7c63c61a7aec8ae1477a061f5bf2">SVF::AbstractInterpretation::AccessMemoryViaRetNode</a></div><div class="ttdeci">void AccessMemoryViaRetNode(const CallICFGNode *callnode, SVF::FILOWorkList&lt; const SVFValue * &gt; &amp;worklist, Set&lt; const SVFValue * &gt; &amp;visited)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01677">AbstractInterpretation.cpp:1677</a></div></div>
1967
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a29fe7c63c61a7aec8ae1477a061f5bf2"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a29fe7c63c61a7aec8ae1477a061f5bf2">SVF::AbstractInterpretation::AccessMemoryViaRetNode</a></div><div class="ttdeci">void AccessMemoryViaRetNode(const CallICFGNode *callnode, SVF::FILOWorkList&lt; const SVFValue * &gt; &amp;worklist, Set&lt; const SVFValue * &gt; &amp;visited)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01696">AbstractInterpretation.cpp:1696</a></div></div>
1948
1968
  <div class="ttc" id="aclassSVF_1_1AbstractState_html"><div class="ttname"><a href="classSVF_1_1AbstractState.html">SVF::AbstractState</a></div><div class="ttdef"><b>Definition:</b> <a href="AbstractState_8h_source.html#l00054">AbstractState.h:54</a></div></div>
1949
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_ac60581a57407fa4c65b1975f5be687b8"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#ac60581a57407fa4c65b1975f5be687b8">SVF::AbstractInterpretation::AccessMemoryViaLoadStmt</a></div><div class="ttdeci">void AccessMemoryViaLoadStmt(const LoadStmt *load, SVF::FILOWorkList&lt; const SVFValue * &gt; &amp;worklist, Set&lt; const SVFValue * &gt; &amp;visited)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01711">AbstractInterpretation.cpp:1711</a></div></div>
1950
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_ac9e8bc430cd530e47811e28f5a9fe963"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#ac9e8bc430cd530e47811e28f5a9fe963">SVF::AbstractInterpretation::traceMemoryAllocationSize</a></div><div class="ttdeci">AbstractValue traceMemoryAllocationSize(const SVFValue *value)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01319">AbstractInterpretation.cpp:1319</a></div></div>
1969
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_ac60581a57407fa4c65b1975f5be687b8"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#ac60581a57407fa4c65b1975f5be687b8">SVF::AbstractInterpretation::AccessMemoryViaLoadStmt</a></div><div class="ttdeci">void AccessMemoryViaLoadStmt(const LoadStmt *load, SVF::FILOWorkList&lt; const SVFValue * &gt; &amp;worklist, Set&lt; const SVFValue * &gt; &amp;visited)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01730">AbstractInterpretation.cpp:1730</a></div></div>
1970
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_ac9e8bc430cd530e47811e28f5a9fe963"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#ac9e8bc430cd530e47811e28f5a9fe963">SVF::AbstractInterpretation::traceMemoryAllocationSize</a></div><div class="ttdeci">AbstractValue traceMemoryAllocationSize(const SVFValue *value)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01331">AbstractInterpretation.cpp:1331</a></div></div>
1951
1971
  <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a0e2af184576d9673f535fe80deb944f6"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a0e2af184576d9673f535fe80deb944f6">SVF::AbstractInterpretation::isRecursiveCall</a></div><div class="ttdeci">virtual bool isRecursiveCall(const CallICFGNode *callNode)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00593">AbstractInterpretation.cpp:593</a></div></div>
1952
1972
  <div class="ttc" id="aextapi_8c_html_a0008a4e8e7889734dc1d83297de07158"><div class="ttname"><a href="extapi_8c.html#a0008a4e8e7889734dc1d83297de07158">iscntrl</a></div><div class="ttdeci">int iscntrl(int c)</div><div class="ttdef"><b>Definition:</b> <a href="extapi_8c_source.html#l00847">extapi.c:847</a></div></div>
1953
1973
  <div class="ttc" id="anamespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00047">GeneralType.h:47</a></div></div>
1954
1974
  <div class="ttc" id="aclassSVF_1_1GepStmt_html"><div class="ttname"><a href="classSVF_1_1GepStmt.html">SVF::GepStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00526">SVFStatements.h:526</a></div></div>
1955
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_aae7c67e9c423599442be721b55cd7279"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#aae7c67e9c423599442be721b55cd7279">SVF::AbstractInterpretation::collectCheckPoint</a></div><div class="ttdeci">void collectCheckPoint()</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01236">AbstractInterpretation.cpp:1236</a></div></div>
1975
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_aae7c67e9c423599442be721b55cd7279"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#aae7c67e9c423599442be721b55cd7279">SVF::AbstractInterpretation::collectCheckPoint</a></div><div class="ttdeci">void collectCheckPoint()</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01246">AbstractInterpretation.cpp:1246</a></div></div>
1956
1976
  <div class="ttc" id="anamespaceSVF_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="SVFUtil_8h_source.html#l00309">SVFUtil.h:309</a></div></div>
1957
1977
  <div class="ttc" id="aextapi_8c_html_af947cbf1ae303e5297c9d68c68a6b9cb"><div class="ttname"><a href="extapi_8c.html#af947cbf1ae303e5297c9d68c68a6b9cb">isalpha</a></div><div class="ttdeci">int isalpha(int character)</div><div class="ttdef"><b>Definition:</b> <a href="extapi_8c_source.html#l00837">extapi.c:837</a></div></div>
1958
1978
  <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a13fdb4a6a6d09e3504fdad16b88616da"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616da">SVF::AbstractInterpretation::ExtAPIType</a></div><div class="ttdeci">ExtAPIType</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8h_source.html#l00113">AbstractInterpretation.h:113</a></div></div>
1959
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_ab18fe64117c1692d94ce0e0ee44e940b"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#ab18fe64117c1692d94ce0e0ee44e940b">SVF::AbstractInterpretation::initExtFunMap</a></div><div class="ttdeci">virtual void initExtFunMap()</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01067">AbstractInterpretation.cpp:1067</a></div></div>
1979
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_ab18fe64117c1692d94ce0e0ee44e940b"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#ab18fe64117c1692d94ce0e0ee44e940b">SVF::AbstractInterpretation::initExtFunMap</a></div><div class="ttdeci">virtual void initExtFunMap()</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01070">AbstractInterpretation.cpp:1070</a></div></div>
1960
1980
  <div class="ttc" id="aclassSVF_1_1WTOCycle_html"><div class="ttname"><a href="classSVF_1_1WTOCycle.html">SVF::WTOCycle</a></div><div class="ttdef"><b>Definition:</b> <a href="WTO_8h_source.html#l00048">WTO.h:48</a></div></div>
1961
1981
  <div class="ttc" id="aclassSVF_1_1IntervalValue_html_a4f9d13c0f642fcad6ddb86ea79fac6e3"><div class="ttname"><a href="classSVF_1_1IntervalValue.html#a4f9d13c0f642fcad6ddb86ea79fac6e3">SVF::IntervalValue::getIntNumeral</a></div><div class="ttdeci">s64_t getIntNumeral() const</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00273">IntervalValue.h:273</a></div></div>
1962
1982
  <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a3a12a86670eef9cd22b1853c7c6fa208"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a3a12a86670eef9cd22b1853c7c6fa208">SVF::AbstractInterpretation::propagateStateIfFeasible</a></div><div class="ttdeci">bool propagateStateIfFeasible(const ICFGNode *curNode)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00180">AbstractInterpretation.cpp:180</a></div></div>
@@ -1982,7 +2002,7 @@ $(function() {
1982
2002
  <div class="ttc" id="aclassSVF_1_1AbstractState_html_a413cb1d009e2a080960bb2432e193d0c"><div class="ttname"><a href="classSVF_1_1AbstractState.html#a413cb1d009e2a080960bb2432e193d0c">SVF::AbstractState::joinWith</a></div><div class="ttdeci">void joinWith(const AbstractState &amp;other)</div><div class="ttdoc">domain join with other, important! other widen this.</div><div class="ttdef"><b>Definition:</b> <a href="AbstractState_8cpp_source.html#l00120">AbstractState.cpp:120</a></div></div>
1983
2003
  <div class="ttc" id="aclassSVF_1_1AEStat_html"><div class="ttname"><a href="classSVF_1_1AEStat.html">SVF::AEStat</a></div><div class="ttdoc">AEStat: Statistic for AE.</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8h_source.html#l00051">AbstractInterpretation.h:51</a></div></div>
1984
2004
  <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a0e36af6b826b9eacf183aebd0b8c5f1f"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a0e36af6b826b9eacf183aebd0b8c5f1f">SVF::AbstractInterpretation::recursiveCallPass</a></div><div class="ttdeci">virtual void recursiveCallPass(const CallICFGNode *callNode)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00599">AbstractInterpretation.cpp:599</a></div></div>
1985
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a896d04a02951947bc228bf97b2c00313"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a896d04a02951947bc228bf97b2c00313">SVF::AbstractInterpretation::handleSVFStatement</a></div><div class="ttdeci">virtual void handleSVFStatement(const SVFStmt *stmt)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00829">AbstractInterpretation.cpp:829</a></div></div>
2005
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a896d04a02951947bc228bf97b2c00313"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a896d04a02951947bc228bf97b2c00313">SVF::AbstractInterpretation::handleSVFStatement</a></div><div class="ttdeci">virtual void handleSVFStatement(const SVFStmt *stmt)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00830">AbstractInterpretation.cpp:830</a></div></div>
1986
2006
  <div class="ttc" id="aWorkList_8h_html"><div class="ttname"><a href="WorkList_8h.html">WorkList.h</a></div></div>
1987
2007
  <div class="ttc" id="acJSON_8cpp_html_a7669ee67a0563250c1efaa24d130e1ac"><div class="ttname"><a href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a></div><div class="ttdeci">copy</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l00414">cJSON.cpp:414</a></div></div>
1988
2008
  <div class="ttc" id="aclassSVF_1_1IntraCFGEdge_html_a106513578790247f9d96e34c8385b3d8"><div class="ttname"><a href="classSVF_1_1IntraCFGEdge.html#a106513578790247f9d96e34c8385b3d8">SVF::IntraCFGEdge::getSuccessorCondValue</a></div><div class="ttdeci">s64_t getSuccessorCondValue() const</div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00145">ICFGEdge.h:145</a></div></div>
@@ -1991,9 +2011,9 @@ $(function() {
1991
2011
  <div class="ttc" id="aclassSVF_1_1FIFOWorkList_html"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html">SVF::FIFOWorkList</a></div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00137">WorkList.h:137</a></div></div>
1992
2012
  <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a2eb84610d9a9eca6565e4a8a1e1156d1"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a2eb84610d9a9eca6565e4a8a1e1156d1">SVF::AbstractInterpretation::isExtCall</a></div><div class="ttdeci">virtual bool isExtCall(const CallICFGNode *callNode)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00580">AbstractInterpretation.cpp:580</a></div></div>
1993
2013
  <div class="ttc" id="aclassSVF_1_1CallSite_html_ac2a0091dab3543a398da890b947e42ef"><div class="ttname"><a href="classSVF_1_1CallSite.html#ac2a0091dab3543a398da890b947e42ef">SVF::CallSite::getInstruction</a></div><div class="ttdeci">const SVFInstruction * getInstruction() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l01128">SVFValue.h:1128</a></div></div>
1994
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a8a4b07e6c999bea0b0e69dcab0346933"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a8a4b07e6c999bea0b0e69dcab0346933">SVF::AbstractInterpretation::narrowFixpointPass</a></div><div class="ttdeci">bool narrowFixpointPass(const ICFGNode *cycle_head, AbstractState &amp;pre_es)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00782">AbstractInterpretation.cpp:782</a></div></div>
2014
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a8a4b07e6c999bea0b0e69dcab0346933"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a8a4b07e6c999bea0b0e69dcab0346933">SVF::AbstractInterpretation::narrowFixpointPass</a></div><div class="ttdeci">bool narrowFixpointPass(const ICFGNode *cycle_head, AbstractState &amp;pre_es)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00783">AbstractInterpretation.cpp:783</a></div></div>
1995
2015
  <div class="ttc" id="aclassSVF_1_1AssignStmt_html_a98f731be7be9bc8e7fd09f5c2204c840"><div class="ttname"><a href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">SVF::AssignStmt::getLHSVarID</a></div><div class="ttdeci">NodeID getLHSVarID() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00302">SVFStatements.h:302</a></div></div>
1996
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a2e2253149e2bf114825a4e838118e012"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a2e2253149e2bf114825a4e838118e012">SVF::AbstractInterpretation::handleFunc</a></div><div class="ttdeci">virtual void handleFunc(const SVFFunction *func)</div><div class="ttdoc">handle user defined function, ext function is not included.</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00806">AbstractInterpretation.cpp:806</a></div></div>
2016
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a2e2253149e2bf114825a4e838118e012"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a2e2253149e2bf114825a4e838118e012">SVF::AbstractInterpretation::handleFunc</a></div><div class="ttdeci">virtual void handleFunc(const SVFFunction *func)</div><div class="ttdoc">handle user defined function, ext function is not included.</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00807">AbstractInterpretation.cpp:807</a></div></div>
1997
2017
  <div class="ttc" id="aclassSVF_1_1AbstractState_html_aaabe5850dbf1620c6058f5ac6cb169b6"><div class="ttname"><a href="classSVF_1_1AbstractState.html#aaabe5850dbf1620c6058f5ac6cb169b6">SVF::AbstractState::getInternalID</a></div><div class="ttdeci">static u32_t getInternalID(u32_t idx)</div><div class="ttdoc">Return the internal index if idx is an address otherwise return the value of idx.</div><div class="ttdef"><b>Definition:</b> <a href="AbstractState_8h_source.html#l00093">AbstractState.h:93</a></div></div>
1998
2018
  <div class="ttc" id="aclassSVF_1_1FILOWorkList_html_a3fd9acb6d09fd142bfd402fdf8cac93b"><div class="ttname"><a href="classSVF_1_1FILOWorkList.html#a3fd9acb6d09fd142bfd402fdf8cac93b">SVF::FILOWorkList::pop</a></div><div class="ttdeci">Data pop()</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00272">WorkList.h:272</a></div></div>
1999
2019
  <div class="ttc" id="aclassSVF_1_1FILOWorkList_html"><div class="ttname"><a href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a></div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8h_source.html#l00042">AbstractInterpretation.h:42</a></div></div>
@@ -2001,34 +2021,34 @@ $(function() {
2001
2021
  <div class="ttc" id="astructSVF_1_1AbstractValue_html_af93f4b54b34e74579ad177ead629b53aa3a7df767184a0bf01de99351747f545a"><div class="ttname"><a href="structSVF_1_1AbstractValue.html#af93f4b54b34e74579ad177ead629b53aa3a7df767184a0bf01de99351747f545a">SVF::AbstractValue::UnknownType</a></div><div class="ttdeci">@ UnknownType</div><div class="ttdef"><b>Definition:</b> <a href="AbstractValue_8h_source.html#l00035">AbstractValue.h:35</a></div></div>
2002
2022
  <div class="ttc" id="anamespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
2003
2023
  <div class="ttc" id="aclassSVF_1_1SVFType_html_a870b63af2bf9fe43cdf1df3d56b20f6c"><div class="ttname"><a href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">SVF::SVFType::isPointerTy</a></div><div class="ttdeci">bool isPointerTy() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00249">SVFType.h:249</a></div></div>
2004
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a9b179466955023f275b6692b59048846"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a9b179466955023f275b6692b59048846">SVF::AbstractInterpretation::handleICFGNode</a></div><div class="ttdeci">virtual void handleICFGNode(const ICFGNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00673">AbstractInterpretation.cpp:673</a></div></div>
2024
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a9b179466955023f275b6692b59048846"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a9b179466955023f275b6692b59048846">SVF::AbstractInterpretation::handleICFGNode</a></div><div class="ttdeci">virtual void handleICFGNode(const ICFGNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00674">AbstractInterpretation.cpp:674</a></div></div>
2005
2025
  <div class="ttc" id="aclassSVF_1_1SVFVar_html_a091ef22d4fc428985d604b03f287a941"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a091ef22d4fc428985d604b03f287a941">SVF::SVFVar::isConstDataOrAggDataButNotNullPtr</a></div><div class="ttdeci">bool isConstDataOrAggDataButNotNullPtr() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8cpp_source.html#l00204">SVFVariables.cpp:204</a></div></div>
2006
2026
  <div class="ttc" id="aclassSVF_1_1AndersenWaveDiff_html_a48ff6fc4badc79ad3204ae9bd95cc540"><div class="ttname"><a href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540">SVF::AndersenWaveDiff::createAndersenWaveDiff</a></div><div class="ttdeci">static AndersenWaveDiff * createAndersenWaveDiff(SVFIR *_pag)</div><div class="ttdoc">Create an singleton instance directly instead of invoking llvm pass manager.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00395">Andersen.h:395</a></div></div>
2007
2027
  <div class="ttc" id="aclassSVF_1_1SVFArgument_html"><div class="ttname"><a href="classSVF_1_1SVFArgument.html">SVF::SVFArgument</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00897">SVFValue.h:897</a></div></div>
2008
2028
  <div class="ttc" id="aclassSVF_1_1MultiOpndStmt_html_a71a530eb9fa9f7e273e471b4a75a039e"><div class="ttname"><a href="classSVF_1_1MultiOpndStmt.html#a71a530eb9fa9f7e273e471b4a75a039e">SVF::MultiOpndStmt::getResID</a></div><div class="ttdeci">NodeID getResID() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8cpp_source.html#l00289">SVFStatements.cpp:289</a></div></div>
2009
2029
  <div class="ttc" id="aclassSVF_1_1SVFVar_html_a76964ef7d4842a469d7720881499d8a6"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a76964ef7d4842a469d7720881499d8a6">SVF::SVFVar::getIncomingEdges</a></div><div class="ttdeci">SVFStmt::SVFStmtSetTy &amp; getIncomingEdges(SVFStmt::PEDGEK kind)</div><div class="ttdoc">Get incoming SVFIR statements (edges)</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00148">SVFVariables.h:148</a></div></div>
2010
2030
  <div class="ttc" id="aclassSVF_1_1WTOCycle_html_ace60ecb07603681de5c3020d0d3c5079"><div class="ttname"><a href="classSVF_1_1WTOCycle.html#ace60ecb07603681de5c3020d0d3c5079">SVF::WTOCycle::head</a></div><div class="ttdeci">const NodeT * head() const</div><div class="ttdoc">Return the head of the cycle.</div><div class="ttdef"><b>Definition:</b> <a href="WTO_8h_source.html#l00412">WTO.h:412</a></div></div>
2011
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a71dff5d6a5b291014c0a65d3a6d7c8c1"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a71dff5d6a5b291014c0a65d3a6d7c8c1">SVF::AbstractInterpretation::handleCycle</a></div><div class="ttdeci">virtual void handleCycle(const ICFGWTOCycle *cycle)</div><div class="ttdoc">handle wto cycle (loop)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00694">AbstractInterpretation.cpp:694</a></div></div>
2012
- <div class="ttc" id="aclassSVF_1_1AEStat_html_a5b246c2175c44454236242dcf426f21f"><div class="ttname"><a href="classSVF_1_1AEStat.html#a5b246c2175c44454236242dcf426f21f">SVF::AEStat::finializeStat</a></div><div class="ttdeci">void finializeStat()</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00965">AbstractInterpretation.cpp:965</a></div></div>
2031
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a71dff5d6a5b291014c0a65d3a6d7c8c1"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a71dff5d6a5b291014c0a65d3a6d7c8c1">SVF::AbstractInterpretation::handleCycle</a></div><div class="ttdeci">virtual void handleCycle(const ICFGWTOCycle *cycle)</div><div class="ttdoc">handle wto cycle (loop)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00695">AbstractInterpretation.cpp:695</a></div></div>
2032
+ <div class="ttc" id="aclassSVF_1_1AEStat_html_a5b246c2175c44454236242dcf426f21f"><div class="ttname"><a href="classSVF_1_1AEStat.html#a5b246c2175c44454236242dcf426f21f">SVF::AEStat::finializeStat</a></div><div class="ttdeci">void finializeStat()</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00968">AbstractInterpretation.cpp:968</a></div></div>
2013
2033
  <div class="ttc" id="aextapi_8c_html_a84b34b0058324ae5c0eae4956cf00cc5"><div class="ttname"><a href="extapi_8c.html#a84b34b0058324ae5c0eae4956cf00cc5">isspace</a></div><div class="ttdeci">int isspace(char c)</div><div class="ttdef"><b>Definition:</b> <a href="extapi_8c_source.html#l00877">extapi.c:877</a></div></div>
2014
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a2057e8e1c0aaf39e74f0a8fb2a1b580c"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a2057e8e1c0aaf39e74f0a8fb2a1b580c">SVF::AbstractInterpretation::getPointeeElement</a></div><div class="ttdeci">const SVFType * getPointeeElement(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01602">AbstractInterpretation.cpp:1602</a></div></div>
2015
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_acea2c82e5b463db6f097e9a9641f601b"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#acea2c82e5b463db6f097e9a9641f601b">SVF::AbstractInterpretation::checkPointAllSet</a></div><div class="ttdeci">void checkPointAllSet()</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01255">AbstractInterpretation.cpp:1255</a></div></div>
2016
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_acba90e968cebacca3da78ac765df33ef"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#acba90e968cebacca3da78ac765df33ef">SVF::AbstractInterpretation::handleStrcat</a></div><div class="ttdeci">virtual void handleStrcat(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01509">AbstractInterpretation.cpp:1509</a></div></div>
2034
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a2057e8e1c0aaf39e74f0a8fb2a1b580c"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a2057e8e1c0aaf39e74f0a8fb2a1b580c">SVF::AbstractInterpretation::getPointeeElement</a></div><div class="ttdeci">const SVFType * getPointeeElement(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01620">AbstractInterpretation.cpp:1620</a></div></div>
2035
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_acea2c82e5b463db6f097e9a9641f601b"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#acea2c82e5b463db6f097e9a9641f601b">SVF::AbstractInterpretation::checkPointAllSet</a></div><div class="ttdeci">void checkPointAllSet()</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01265">AbstractInterpretation.cpp:1265</a></div></div>
2036
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_acba90e968cebacca3da78ac765df33ef"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#acba90e968cebacca3da78ac765df33ef">SVF::AbstractInterpretation::handleStrcat</a></div><div class="ttdeci">virtual void handleStrcat(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01523">AbstractInterpretation.cpp:1523</a></div></div>
2017
2037
  <div class="ttc" id="aclassSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00631">SVFValue.h:631</a></div></div>
2018
2038
  <div class="ttc" id="anamespaceSVF_html_ad781b0b14e89773e774072b280658ef3"><div class="ttname"><a href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">SVF::s64_t</a></div><div class="ttdeci">signed long long s64_t</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00049">GeneralType.h:49</a></div></div>
2019
2039
  <div class="ttc" id="anamespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00101">GeneralType.h:101</a></div></div>
2020
2040
  <div class="ttc" id="astructSVF_1_1AbstractValue_html"><div class="ttname"><a href="structSVF_1_1AbstractValue.html">SVF::AbstractValue</a></div><div class="ttdef"><b>Definition:</b> <a href="AbstractValue_8h_source.html#l00029">AbstractValue.h:29</a></div></div>
2021
2041
  <div class="ttc" id="aclassSVF_1_1CallICFGNode_html_ae23a7540609879ac0379fc53b4e7eead"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html#ae23a7540609879ac0379fc53b4e7eead">SVF::CallICFGNode::getRetICFGNode</a></div><div class="ttdeci">const RetICFGNode * getRetICFGNode() const</div><div class="ttdoc">Return callsite.</div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00415">ICFGNode.h:415</a></div></div>
2022
2042
  <div class="ttc" id="aclassSVF_1_1AbstractState_html_a7c802c006225a50b1d83b5f78d0891fa"><div class="ttname"><a href="classSVF_1_1AbstractState.html#a7c802c006225a50b1d83b5f78d0891fa">SVF::AbstractState::toString</a></div><div class="ttdeci">std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="AbstractState_8h_source.html#l00347">AbstractState.h:347</a></div></div>
2023
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_ac941d1eb9b1216c8334d0685a471b774"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#ac941d1eb9b1216c8334d0685a471b774">SVF::AbstractInterpretation::handleStrcpy</a></div><div class="ttdeci">virtual void handleStrcpy(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01274">AbstractInterpretation.cpp:1274</a></div></div>
2043
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_ac941d1eb9b1216c8334d0685a471b774"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#ac941d1eb9b1216c8334d0685a471b774">SVF::AbstractInterpretation::handleStrcpy</a></div><div class="ttdeci">virtual void handleStrcpy(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01284">AbstractInterpretation.cpp:1284</a></div></div>
2024
2044
  <div class="ttc" id="aclassSVF_1_1CallSite_html_a9e7c94ee7f689466111487e03b2cebcc"><div class="ttname"><a href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">SVF::CallSite::getArgument</a></div><div class="ttdeci">const SVFValue * getArgument(u32_t ArgNo) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l01132">SVFValue.h:1132</a></div></div>
2025
- <div class="ttc" id="aclassSVF_1_1AEStat_html_ae24590233a864e18a6b0948bef89201a"><div class="ttname"><a href="classSVF_1_1AEStat.html#ae24590233a864e18a6b0948bef89201a">SVF::AEStat::reportBug</a></div><div class="ttdeci">void reportBug()</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01043">AbstractInterpretation.cpp:1043</a></div></div>
2045
+ <div class="ttc" id="aclassSVF_1_1AEStat_html_ae24590233a864e18a6b0948bef89201a"><div class="ttname"><a href="classSVF_1_1AEStat.html#ae24590233a864e18a6b0948bef89201a">SVF::AEStat::reportBug</a></div><div class="ttdeci">void reportBug()</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01046">AbstractInterpretation.cpp:1046</a></div></div>
2026
2046
  <div class="ttc" id="aclassSVF_1_1AbstractState_html_aa2ac2ba25a9859232717ee22192feb35"><div class="ttname"><a href="classSVF_1_1AbstractState.html#aa2ac2ba25a9859232717ee22192feb35">SVF::AbstractState::inLocToValTable</a></div><div class="ttdeci">virtual bool inLocToValTable(u32_t id) const</div><div class="ttdoc">whether the memory address stores abstract value</div><div class="ttdef"><b>Definition:</b> <a href="AbstractState_8h_source.html#l00240">AbstractState.h:240</a></div></div>
2027
2047
  <div class="ttc" id="aclassSVF_1_1GenericNode_html_a2d9cd758d6f8c5189d9b90b74f43e009"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">SVF::GenericNode::getOutEdges</a></div><div class="ttdeci">const GEdgeSetTy &amp; getOutEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00193">GenericGraph.h:193</a></div></div>
2028
2048
  <div class="ttc" id="acJSON_8h_html_ad43c3812e6d13e0518d9f8b8f463ffcf"><div class="ttname"><a href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a></div><div class="ttdeci">int count</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00216">cJSON.h:216</a></div></div>
2029
2049
  <div class="ttc" id="anamespaceSVF_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="GeneralType_8h_source.html#l00046">GeneralType.h:46</a></div></div>
2030
2050
  <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a01650b2a16e327408ce180b2d1bc9631"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a01650b2a16e327408ce180b2d1bc9631">SVF::AbstractInterpretation::hasCmpBranchES</a></div><div class="ttdeci">bool hasCmpBranchES(const CmpStmt *cmpStmt, s64_t succ, AbstractState &amp;es)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00228">AbstractInterpretation.cpp:228</a></div></div>
2031
- <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_af966130d5cb8d7db786c3ec056cc2dd4"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#af966130d5cb8d7db786c3ec056cc2dd4">SVF::AbstractInterpretation::SkipRecursiveCall</a></div><div class="ttdeci">virtual void SkipRecursiveCall(const CallICFGNode *callnode)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00888">AbstractInterpretation.cpp:888</a></div></div>
2051
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_af966130d5cb8d7db786c3ec056cc2dd4"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#af966130d5cb8d7db786c3ec056cc2dd4">SVF::AbstractInterpretation::SkipRecursiveCall</a></div><div class="ttdeci">virtual void SkipRecursiveCall(const CallICFGNode *callnode)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00889">AbstractInterpretation.cpp:889</a></div></div>
2032
2052
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ab65033f068bfbeb0a1c52dcec3beb6bc"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVF::SVFUtil::errs</a></div><div class="ttdeci">std::ostream &amp; errs()</div><div class="ttdoc">Overwrite llvm::errs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00056">SVFUtil.h:56</a></div></div>
2033
2053
  <div class="ttc" id="aclassSVF_1_1AddressValue_html_aed0b4789beda4980e4e215a65350f323"><div class="ttname"><a href="classSVF_1_1AddressValue.html#aed0b4789beda4980e4e215a65350f323">SVF::AddressValue::begin</a></div><div class="ttdeci">AddrSet::const_iterator begin() const</div><div class="ttdef"><b>Definition:</b> <a href="AddressValue_8h_source.html#l00092">AddressValue.h:92</a></div></div>
2034
2054
  <!-- start footer part -->