svf-tools 1.0.358 → 1.0.362

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +1 -1
  3. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +7 -7
  4. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +1 -1
  5. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +2 -2
  7. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
  8. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
  9. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +1 -3
  10. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +6 -6
  11. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +3 -3
  12. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +25 -25
  13. package/SVF-doxygen/html/html/ICFG_8h_source.html +17 -18
  14. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +2 -2
  15. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +3 -3
  16. package/SVF-doxygen/html/html/LocationSet_8h_source.html +1 -1
  17. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
  18. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +2 -2
  19. package/SVF-doxygen/html/html/MHP_8h_source.html +2 -2
  20. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
  21. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +4 -4
  22. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
  23. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +2 -2
  24. package/SVF-doxygen/html/html/PCG_8cpp_source.html +1 -1
  25. package/SVF-doxygen/html/html/PCG_8h_source.html +3 -3
  26. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +2 -2
  27. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +3 -3
  28. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +5 -5
  29. package/SVF-doxygen/html/html/SVFG_8h_source.html +5 -5
  30. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +6 -6
  31. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +12 -12
  32. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +13 -13
  33. package/SVF-doxygen/html/html/SVFIR_8h_source.html +13 -13
  34. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +91 -89
  35. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +2 -1
  36. package/SVF-doxygen/html/html/TCT_8cpp_source.html +1 -1
  37. package/SVF-doxygen/html/html/TCT_8h_source.html +2 -2
  38. package/SVF-doxygen/html/html/VFGNode_8h_source.html +7 -7
  39. package/SVF-doxygen/html/html/VFG_8cpp_source.html +17 -17
  40. package/SVF-doxygen/html/html/VFG_8h_source.html +16 -16
  41. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +2 -2
  42. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +5 -5
  43. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +15 -15
  44. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +30 -30
  45. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +3 -3
  46. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +2 -2
  47. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode-members.html +1 -1
  48. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +6 -6
  49. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +15 -15
  50. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +16 -16
  51. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +7 -7
  52. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +1 -1
  53. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +1 -1
  54. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +1 -1
  55. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +2 -2
  56. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +2 -2
  57. package/SVF-doxygen/html/html/classSVF_1_1GepStmt-members.html +7 -5
  58. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +80 -12
  59. package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +22 -22
  60. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +236 -235
  61. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder-members.html +3 -3
  62. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +45 -49
  63. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +11 -11
  64. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +18 -18
  65. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
  66. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +2 -1
  67. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +8 -8
  68. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +2 -2
  69. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +2 -2
  70. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +9 -9
  71. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +2 -2
  72. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +6 -6
  73. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +25 -25
  74. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +2 -2
  75. package/SVF-doxygen/html/html/classSVF_1_1PCG-members.html +1 -1
  76. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +9 -9
  77. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +15 -15
  78. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +2 -2
  79. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode-members.html +1 -1
  80. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +5 -5
  81. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +15 -15
  82. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +13 -13
  83. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +3 -3
  84. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +17 -17
  85. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +27 -27
  86. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +2 -2
  87. package/SVF-doxygen/html/html/classSVF_1_1TCT-members.html +1 -1
  88. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +12 -12
  89. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +9 -9
  90. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +9 -9
  91. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +2 -2
  92. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +20 -20
  93. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +29 -29
  94. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +6 -6
  95. package/SVF-doxygen/html/html/functions_a.html +12 -12
  96. package/SVF-doxygen/html/html/functions_f.html +3 -3
  97. package/SVF-doxygen/html/html/functions_func.html +12 -12
  98. package/SVF-doxygen/html/html/functions_func_g.html +36 -42
  99. package/SVF-doxygen/html/html/functions_func_i.html +9 -8
  100. package/SVF-doxygen/html/html/functions_g.html +34 -40
  101. package/SVF-doxygen/html/html/functions_i.html +12 -11
  102. package/SVF-doxygen/html/html/functions_l.html +8 -8
  103. package/SVF-doxygen/html/html/functions_m.html +1 -1
  104. package/SVF-doxygen/html/html/functions_n.html +3 -3
  105. package/SVF-doxygen/html/html/functions_o.html +11 -11
  106. package/SVF-doxygen/html/html/functions_p.html +1 -1
  107. package/SVF-doxygen/html/html/functions_s.html +9 -7
  108. package/SVF-doxygen/html/html/functions_t.html +4 -4
  109. package/SVF-doxygen/html/html/functions_v.html +6 -6
  110. package/SVF-doxygen/html/html/functions_w.html +9 -5
  111. package/SVF-doxygen/html/html/search/all_1.js +5 -5
  112. package/SVF-doxygen/html/html/search/all_10.js +3 -3
  113. package/SVF-doxygen/html/html/search/all_13.js +6 -6
  114. package/SVF-doxygen/html/html/search/all_14.js +4 -4
  115. package/SVF-doxygen/html/html/search/all_16.js +2 -2
  116. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  117. package/SVF-doxygen/html/html/search/all_6.js +1 -1
  118. package/SVF-doxygen/html/html/search/all_7.js +13 -16
  119. package/SVF-doxygen/html/html/search/all_9.js +1 -1
  120. package/SVF-doxygen/html/html/search/all_c.js +3 -3
  121. package/SVF-doxygen/html/html/search/all_d.js +1 -1
  122. package/SVF-doxygen/html/html/search/all_e.js +3 -3
  123. package/SVF-doxygen/html/html/search/all_f.js +1 -1
  124. package/SVF-doxygen/html/html/search/functions_0.js +5 -5
  125. package/SVF-doxygen/html/html/search/functions_10.js +1 -1
  126. package/SVF-doxygen/html/html/search/functions_6.js +13 -16
  127. package/SVF-doxygen/html/html/search/functions_8.js +1 -1
  128. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  129. package/SVF-doxygen/html/html/search/variables_14.js +2 -2
  130. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  131. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +16 -16
  132. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
  133. package/SVF-doxygen/html/html/svf-ex_8cpp.html +2 -2
  134. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +2 -2
  135. package/include/Graphs/ICFG.h +18 -18
  136. package/include/Graphs/ICFGNode.h +2 -2
  137. package/include/Graphs/SVFG.h +4 -4
  138. package/include/Graphs/SVFGOPT.h +2 -2
  139. package/include/Graphs/VFG.h +5 -5
  140. package/include/MTA/LockResultValidator.h +1 -1
  141. package/include/MTA/MHP.h +2 -2
  142. package/include/MTA/PCG.h +2 -2
  143. package/include/MTA/TCT.h +2 -2
  144. package/include/MemoryModel/LocationSet.h +1 -1
  145. package/include/MemoryModel/SVFIR.h +2 -2
  146. package/include/MemoryModel/SVFStatements.h +11 -3
  147. package/include/SVF-FE/ICFGBuilder.h +5 -5
  148. package/include/SVF-FE/SVFIRBuilder.h +1 -1
  149. package/lib/Graphs/ICFG.cpp +37 -32
  150. package/lib/Graphs/SVFG.cpp +4 -4
  151. package/lib/Graphs/VFG.cpp +3 -3
  152. package/lib/MSSA/MemRegion.cpp +7 -7
  153. package/lib/MSSA/MemSSA.cpp +3 -3
  154. package/lib/MTA/LockAnalysis.cpp +4 -4
  155. package/lib/MTA/MTAResultValidator.cpp +1 -1
  156. package/lib/MTA/PCG.cpp +1 -1
  157. package/lib/MTA/TCT.cpp +2 -2
  158. package/lib/MemoryModel/PointerAnalysis.cpp +1 -1
  159. package/lib/SABER/LeakChecker.cpp +3 -3
  160. package/lib/SVF-FE/CallGraphBuilder.cpp +4 -4
  161. package/lib/SVF-FE/ICFGBuilder.cpp +15 -27
  162. package/lib/SVF-FE/SVFIRBuilder.cpp +15 -15
  163. package/lib/SVF-FE/SymbolTableBuilder.cpp +1 -1
  164. package/lib/WPA/Andersen.cpp +3 -3
  165. package/lib/WPA/WPAPass.cpp +4 -4
  166. package/package.json +1 -1
  167. package/tools/Example/svf-ex.cpp +1 -1
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">svf-ex.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="svf-ex_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- svf-ex.cpp -- A driver example of SVF-------------------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===-----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> // A driver program of SVF including usages of SVF APIs</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> //</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> // Author: Yulei Sui,</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFG_8h.html">Graphs/SVFG.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFIRBuilder_8h.html">SVF-FE/SVFIRBuilder.h</a>&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacellvm.html">llvm</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">static</span> llvm::cl::opt&lt;std::string&gt; <a class="code" href="svf-ex_8cpp.html#a2d332c504284f0bc181289ee67479845">InputFilename</a>(cl::Positional,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; llvm::cl::desc(<span class="stringliteral">&quot;&lt;input bitcode&gt;&quot;</span>), llvm::cl::init(<span class="stringliteral">&quot;-&quot;</span>));</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#ac5b51f055ec3ed000c95a409a73403a7"> 45</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="svf-ex_8cpp.html#ac5b51f055ec3ed000c95a409a73403a7">aliasQuery</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* v1, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* v2)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;{</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">alias</a>(v1,v2);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;}</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#ae004a620ad67220b6dd8212a2ad625a9"> 53</a></span>&#160;std::string <a class="code" href="svf-ex_8cpp.html#ae004a620ad67220b6dd8212a2ad625a9">printPts</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val)</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;{</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; std::string str;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> pNodeId = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(val);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(pNodeId);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> ii = pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), ie = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>();</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; ii != ie; ii++)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; *ii &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* targetObj = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*ii);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">if</span>(targetObj-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">hasValue</a>())</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt;*targetObj-&gt;<a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>() &lt;&lt; <span class="stringliteral">&quot;)\t &quot;</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;}</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#af45b449c07f1c975eea45d40d1cc37f6"> 80</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="svf-ex_8cpp.html#af45b449c07f1c975eea45d40d1cc37f6">traverseOnICFG</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;{</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* iNode = icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(inst);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;const ICFGNode*&gt;</a> worklist;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const ICFGNode*&gt;</a> visited;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(iNode);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* vNode = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ICFGNode.html#ac16c5a3227a44d3b9f7c3209156d9df2">ICFGNode::const_iterator</a> it = iNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit =</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; iNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = *it;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* succNode = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">if</span> (visited.find(succNode) == visited.end())</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; visited.insert(succNode);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(succNode);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;}</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#a210d797e39e39071d420ba450727d6e4"> 108</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="svf-ex_8cpp.html#a210d797e39e39071d420ba450727d6e4">traverseOnVFG</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* vfg, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;{</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = SVFIR::getPAG();</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pNode = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(pag-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(val));</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* vNode = vfg-&gt;<a class="code" href="classSVF_1_1SVFG.html#a8e7a945f4266e8dc7dcfff2ad6494bfb">getDefSVFGNode</a>(pNode);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;const VFGNode*&gt;</a> worklist;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const VFGNode*&gt;</a> visited;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(vNode);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* vNode = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">VFGNode::const_iterator</a> it = vNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit =</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; vNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = *it;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* succNode = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">if</span> (visited.find(succNode) == visited.end())</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; visited.insert(succNode);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(succNode);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const VFGNode*&gt;::const_iterator</a> it = visited.begin(), eit = visited.end(); it!=eit; ++it)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* node = *it;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;}</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627"> 145</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> ** argv)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;{</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordtype">int</span> arg_num = 0;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordtype">char</span> **arg_value = <span class="keyword">new</span> <span class="keywordtype">char</span>*[argc];</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; std::vector&lt;std::string&gt; moduleNameVec;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a62ca9a79ce7b6960e3fc42d8b183bd50">SVFUtil::processArguments</a>(argc, argv, arg_num, arg_value, moduleNameVec);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; cl::ParseCommandLineOptions(arg_num, arg_value,</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="stringliteral">&quot;Whole Program Points-to Analysis\n&quot;</span>);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">if</span> (Options::WriteAnder == <span class="stringliteral">&quot;ir_annotator&quot;</span>)</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; LLVMModuleSet::getLLVMModuleSet()-&gt;preProcessBCs(moduleNameVec);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = LLVMModuleSet::getLLVMModuleSet()-&gt;buildSVFModule(moduleNameVec);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#aa03ab5272652290f30870c6e2d053d98">buildSymbolTableInfo</a>();</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html">SVFIRBuilder</a> builder;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = builder.<a class="code" href="classSVF_1_1SVFIRBuilder.html#aa6d56f9580f76fd09d25ce6cf7541e98">build</a>(svfModule);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>* ander = AndersenWaveDiff::createAndersenWaveDiff(pag);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph = ander-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>();</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg = pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="classSVF_1_1VFG.html">VFG</a>* vfg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VFG.html">VFG</a>(callgraph);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="classSVF_1_1SVFGBuilder.html">SVFGBuilder</a> svfBuilder(<span class="keyword">true</span>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* svfg = svfBuilder.<a class="code" href="classSVF_1_1SVFGBuilder.html#a54a713e3989597b11cee70864d0197bd">buildFullSVFG</a>(ander);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">// clean up memory</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keyword">delete</span> vfg;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keyword">delete</span> svfg;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; AndersenWaveDiff::releaseAndersenWaveDiff();</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; SVFIR::releaseSVFIR();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; LLVMModuleSet::getLLVMModuleSet()-&gt;dumpModulesToFile(<span class="stringliteral">&quot;.svf.bc&quot;</span>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a2f8e91c075d90be66412a079fe73e936">SVF::LLVMModuleSet::releaseLLVMModuleSet</a>();</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; llvm::llvm_shutdown();</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;}</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div><div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
69
+ <a href="svf-ex_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- svf-ex.cpp -- A driver example of SVF-------------------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===-----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> // A driver program of SVF including usages of SVF APIs</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> //</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> // Author: Yulei Sui,</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFG_8h.html">Graphs/SVFG.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFIRBuilder_8h.html">SVF-FE/SVFIRBuilder.h</a>&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacellvm.html">llvm</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">static</span> llvm::cl::opt&lt;std::string&gt; <a class="code" href="svf-ex_8cpp.html#a2d332c504284f0bc181289ee67479845">InputFilename</a>(cl::Positional,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; llvm::cl::desc(<span class="stringliteral">&quot;&lt;input bitcode&gt;&quot;</span>), llvm::cl::init(<span class="stringliteral">&quot;-&quot;</span>));</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#ac5b51f055ec3ed000c95a409a73403a7"> 45</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="svf-ex_8cpp.html#ac5b51f055ec3ed000c95a409a73403a7">aliasQuery</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* v1, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* v2)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;{</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">alias</a>(v1,v2);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;}</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#ae004a620ad67220b6dd8212a2ad625a9"> 53</a></span>&#160;std::string <a class="code" href="svf-ex_8cpp.html#ae004a620ad67220b6dd8212a2ad625a9">printPts</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val)</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;{</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; std::string str;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> pNodeId = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(val);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(pNodeId);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> ii = pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), ie = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>();</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; ii != ie; ii++)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; *ii &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* targetObj = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*ii);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">if</span>(targetObj-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">hasValue</a>())</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt;*targetObj-&gt;<a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>() &lt;&lt; <span class="stringliteral">&quot;)\t &quot;</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;}</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#af45b449c07f1c975eea45d40d1cc37f6"> 80</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="svf-ex_8cpp.html#af45b449c07f1c975eea45d40d1cc37f6">traverseOnICFG</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;{</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* iNode = icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(inst);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;const ICFGNode*&gt;</a> worklist;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const ICFGNode*&gt;</a> visited;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(iNode);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* vNode = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ICFGNode.html#ac16c5a3227a44d3b9f7c3209156d9df2">ICFGNode::const_iterator</a> it = iNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit =</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; iNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = *it;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* succNode = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">if</span> (visited.find(succNode) == visited.end())</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; visited.insert(succNode);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(succNode);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;}</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#a210d797e39e39071d420ba450727d6e4"> 108</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="svf-ex_8cpp.html#a210d797e39e39071d420ba450727d6e4">traverseOnVFG</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* vfg, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;{</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = SVFIR::getPAG();</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pNode = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(pag-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(val));</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* vNode = vfg-&gt;<a class="code" href="classSVF_1_1SVFG.html#a8e7a945f4266e8dc7dcfff2ad6494bfb">getDefSVFGNode</a>(pNode);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;const VFGNode*&gt;</a> worklist;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const VFGNode*&gt;</a> visited;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(vNode);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* vNode = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">VFGNode::const_iterator</a> it = vNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit =</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; vNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = *it;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* succNode = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">if</span> (visited.find(succNode) == visited.end())</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; visited.insert(succNode);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(succNode);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const VFGNode*&gt;::const_iterator</a> it = visited.begin(), eit = visited.end(); it!=eit; ++it)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* node = *it;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;}</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627"> 145</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> ** argv)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;{</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordtype">int</span> arg_num = 0;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordtype">char</span> **arg_value = <span class="keyword">new</span> <span class="keywordtype">char</span>*[argc];</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; std::vector&lt;std::string&gt; moduleNameVec;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a62ca9a79ce7b6960e3fc42d8b183bd50">SVFUtil::processArguments</a>(argc, argv, arg_num, arg_value, moduleNameVec);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; cl::ParseCommandLineOptions(arg_num, arg_value,</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="stringliteral">&quot;Whole Program Points-to Analysis\n&quot;</span>);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">if</span> (Options::WriteAnder == <span class="stringliteral">&quot;ir_annotator&quot;</span>)</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; LLVMModuleSet::getLLVMModuleSet()-&gt;preProcessBCs(moduleNameVec);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = LLVMModuleSet::getLLVMModuleSet()-&gt;buildSVFModule(moduleNameVec);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#aa03ab5272652290f30870c6e2d053d98">buildSymbolTableInfo</a>();</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html">SVFIRBuilder</a> builder;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = builder.<a class="code" href="classSVF_1_1SVFIRBuilder.html#aa6d56f9580f76fd09d25ce6cf7541e98">build</a>(svfModule);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>* ander = AndersenWaveDiff::createAndersenWaveDiff(pag);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph = ander-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>();</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg = pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="classSVF_1_1VFG.html">VFG</a>* vfg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VFG.html">VFG</a>(callgraph);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="classSVF_1_1SVFGBuilder.html">SVFGBuilder</a> svfBuilder(<span class="keyword">true</span>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* svfg = svfBuilder.<a class="code" href="classSVF_1_1SVFGBuilder.html#a54a713e3989597b11cee70864d0197bd">buildFullSVFG</a>(ander);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">// clean up memory</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keyword">delete</span> vfg;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keyword">delete</span> svfg;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; AndersenWaveDiff::releaseAndersenWaveDiff();</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; SVFIR::releaseSVFIR();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; LLVMModuleSet::getLLVMModuleSet()-&gt;dumpModulesToFile(<span class="stringliteral">&quot;.svf.bc&quot;</span>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a2f8e91c075d90be66412a079fe73e936">SVF::LLVMModuleSet::releaseLLVMModuleSet</a>();</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; llvm::llvm_shutdown();</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;}</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div><div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1ICFGEdge_html"><div class="ttname"><a href="classSVF_1_1ICFGEdge.html">SVF::ICFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00042">ICFGEdge.h:42</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1VFG_html"><div class="ttname"><a href="classSVF_1_1VFG.html">SVF::VFG</a></div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00050">VFG.h:50</a></div></div>
72
72
  <div class="ttc" id="namespacellvm_html"><div class="ttname"><a href="namespacellvm.html">llvm</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00328">CHG.h:328</a></div></div>
@@ -103,6 +103,7 @@ $(function() {
103
103
  <div class="ttc" id="namespaceSVF_html_a726981481ac082dcda3e4921416b65a0"><div class="ttname"><a href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">SVF::raw_string_ostream</a></div><div class="ttdeci">llvm::raw_string_ostream raw_string_ostream</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
104
104
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a240219c2dc4f5cc5f85445e18c79b83b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">SVF::PointerAnalysis::getPAG</a></div><div class="ttdeci">SVFIR * getPAG() const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00205">PointerAnalysis.h:205</a></div></div>
105
105
  <div class="ttc" id="classSVF_1_1SVFVar_html_a1ace69053c2c4436fd78d5624bd0086a"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">SVF::SVFVar::hasValue</a></div><div class="ttdeci">bool hasValue() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00113">SVFVariables.h:113</a></div></div>
106
+ <div class="ttc" id="classSVF_1_1ICFG_html_a5f2c0aaba07d6fdd63058da0fb60ca8b"><div class="ttname"><a href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">SVF::ICFG::getICFGNode</a></div><div class="ttdeci">ICFGNode * getICFGNode(NodeID id) const</div><div class="ttdoc">Get a ICFG node. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00084">ICFG.h:84</a></div></div>
106
107
  <div class="ttc" id="classSVF_1_1ICFGNode_html_ac16c5a3227a44d3b9f7c3209156d9df2"><div class="ttname"><a href="classSVF_1_1ICFGNode.html#ac16c5a3227a44d3b9f7c3209156d9df2">SVF::ICFGNode::const_iterator</a></div><div class="ttdeci">ICFGEdge::ICFGEdgeSetTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00066">ICFGNode.h:66</a></div></div>
107
108
  <div class="ttc" id="classSVF_1_1SVFVar_html_afaa33caa8d2a306f6741d9d066243e40"><div class="ttname"><a href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">SVF::SVFVar::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get/has methods of the components. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00097">SVFVariables.h:97</a></div></div>
108
109
  <div class="ttc" id="classSVF_1_1ICFG_html"><div class="ttname"><a href="classSVF_1_1ICFG.html">SVF::ICFG</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00046">ICFG.h:46</a></div></div>
@@ -126,7 +127,6 @@ $(function() {
126
127
  <div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
127
128
  <div class="ttc" id="classSVF_1_1PointsTo_html_a8f741cdffbf3c5fe0f602cdca677dee6"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">SVF::PointsTo::end</a></div><div class="ttdeci">const_iterator end(void) const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00128">PointsTo.h:128</a></div></div>
128
129
  <div class="ttc" id="LLVMUtil_8h_html"><div class="ttname"><a href="LLVMUtil_8h.html">LLVMUtil.h</a></div></div>
129
- <div class="ttc" id="classSVF_1_1ICFG_html_ab7b0b3088b46ad65451905cc4f567a7b"><div class="ttname"><a href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">SVF::ICFG::getBlockICFGNode</a></div><div class="ttdeci">ICFGNode * getBlockICFGNode(const Instruction *inst)</div><div class="ttdoc">Get a basic block ICFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00193">ICFG.cpp:193</a></div></div>
130
130
  <div class="ttc" id="namespaceSVF_html_ae941b2925716d8ebe14bf190aa8dfd06"><div class="ttname"><a href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">SVF::AliasResult</a></div><div class="ttdeci">llvm::AliasResult AliasResult</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00135">BasicTypes.h:135</a></div></div>
131
131
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html">SVF::PointerAnalysis</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00057">PointerAnalysis.h:57</a></div></div>
132
132
  <div class="ttc" id="classSVF_1_1VFGNode_html"><div class="ttname"><a href="classSVF_1_1VFGNode.html">SVF::VFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00046">VFGNode.h:46</a></div></div>
@@ -163,19 +163,19 @@ public:
163
163
  /// Get a basic block ICFGNode
164
164
  /// TODO:: need to fix the assertions
165
165
  //@{
166
- ICFGNode* getBlockICFGNode(const Instruction* inst);
166
+ ICFGNode* getICFGNode(const Instruction* inst);
167
167
 
168
- CallICFGNode* getCallBlockNode(const Instruction* inst);
168
+ CallICFGNode* getCallICFGNode(const Instruction* inst);
169
169
 
170
- RetICFGNode* getRetBlockNode(const Instruction* inst);
170
+ RetICFGNode* getRetICFGNode(const Instruction* inst);
171
171
 
172
- IntraICFGNode* getIntraBlockNode(const Instruction* inst);
172
+ IntraICFGNode* getIntraICFGNode(const Instruction* inst);
173
173
 
174
- FunEntryICFGNode* getFunEntryBlockNode(const SVFFunction* fun);
174
+ FunEntryICFGNode* getFunEntryICFGNode(const SVFFunction* fun);
175
175
 
176
- FunExitICFGNode* getFunExitBlockNode(const SVFFunction* fun);
176
+ FunExitICFGNode* getFunExitICFGNode(const SVFFunction* fun);
177
177
 
178
- inline GlobalICFGNode* getGlobalBlockNode() const
178
+ inline GlobalICFGNode* getGlobalICFGNode() const
179
179
  {
180
180
  return globalBlockNode;
181
181
  }
@@ -184,14 +184,14 @@ public:
184
184
  private:
185
185
 
186
186
  /// Get/Add IntraBlock ICFGNode
187
- inline IntraICFGNode* getIntraBlockICFGNode(const Instruction* inst)
187
+ inline IntraICFGNode* getIntraBlock(const Instruction* inst)
188
188
  {
189
189
  InstToBlockNodeMapTy::const_iterator it = InstToBlockNodeMap.find(inst);
190
190
  if (it == InstToBlockNodeMap.end())
191
191
  return nullptr;
192
192
  return it->second;
193
193
  }
194
- inline IntraICFGNode* addIntraBlockICFGNode(const Instruction* inst)
194
+ inline IntraICFGNode* addIntraBlock(const Instruction* inst)
195
195
  {
196
196
  IntraICFGNode* sNode = new IntraICFGNode(totalICFGNode++,inst);
197
197
  addICFGNode(sNode);
@@ -200,14 +200,14 @@ private:
200
200
  }
201
201
 
202
202
  /// Get/Add a function entry node
203
- inline FunEntryICFGNode* getFunEntryICFGNode(const SVFFunction* fun)
203
+ inline FunEntryICFGNode* getFunEntryBlock(const SVFFunction* fun)
204
204
  {
205
205
  FunToFunEntryNodeMapTy::const_iterator it = FunToFunEntryNodeMap.find(fun);
206
206
  if (it == FunToFunEntryNodeMap.end())
207
207
  return nullptr;
208
208
  return it->second;
209
209
  }
210
- inline FunEntryICFGNode* addFunEntryICFGNode(const SVFFunction* fun)
210
+ inline FunEntryICFGNode* addFunEntryBlock(const SVFFunction* fun)
211
211
  {
212
212
  FunEntryICFGNode* sNode = new FunEntryICFGNode(totalICFGNode++,fun);
213
213
  addICFGNode(sNode);
@@ -216,14 +216,14 @@ private:
216
216
  }
217
217
 
218
218
  /// Get/Add a function exit node
219
- inline FunExitICFGNode* getFunExitICFGNode(const SVFFunction* fun)
219
+ inline FunExitICFGNode* getFunExitBlock(const SVFFunction* fun)
220
220
  {
221
221
  FunToFunExitNodeMapTy::const_iterator it = FunToFunExitNodeMap.find(fun);
222
222
  if (it == FunToFunExitNodeMap.end())
223
223
  return nullptr;
224
224
  return it->second;
225
225
  }
226
- inline FunExitICFGNode* addFunExitICFGNode(const SVFFunction* fun)
226
+ inline FunExitICFGNode* addFunExitBlock(const SVFFunction* fun)
227
227
  {
228
228
  FunExitICFGNode* sNode = new FunExitICFGNode(totalICFGNode++, fun);
229
229
  addICFGNode(sNode);
@@ -232,14 +232,14 @@ private:
232
232
  }
233
233
 
234
234
  /// Get/Add a call node
235
- inline CallICFGNode* addCallICFGNode(const Instruction* cs)
235
+ inline CallICFGNode* addCallBlock(const Instruction* cs)
236
236
  {
237
237
  CallICFGNode* sNode = new CallICFGNode(totalICFGNode++, cs);
238
238
  addICFGNode(sNode);
239
239
  CSToCallNodeMap[cs] = sNode;
240
240
  return sNode;
241
241
  }
242
- inline CallICFGNode* getCallICFGNode(const Instruction* cs)
242
+ inline CallICFGNode* getCallBlock(const Instruction* cs)
243
243
  {
244
244
  CSToCallNodeMapTy::const_iterator it = CSToCallNodeMap.find(cs);
245
245
  if (it == CSToCallNodeMap.end())
@@ -248,16 +248,16 @@ private:
248
248
  }
249
249
 
250
250
  /// Get/Add a return node
251
- inline RetICFGNode* getRetICFGNode(const Instruction* cs)
251
+ inline RetICFGNode* getRetBlock(const Instruction* cs)
252
252
  {
253
253
  CSToRetNodeMapTy::const_iterator it = CSToRetNodeMap.find(cs);
254
254
  if (it == CSToRetNodeMap.end())
255
255
  return nullptr;
256
256
  return it->second;
257
257
  }
258
- inline RetICFGNode* addRetICFGNode(const Instruction* cs)
258
+ inline RetICFGNode* addRetBlock(const Instruction* cs)
259
259
  {
260
- CallICFGNode* callBlockNode = getCallBlockNode(cs);
260
+ CallICFGNode* callBlockNode = getCallICFGNode(cs);
261
261
  RetICFGNode* sNode = new RetICFGNode(totalICFGNode++, cs, callBlockNode);
262
262
  callBlockNode->setRetICFGNode(sNode);
263
263
  addICFGNode(sNode);
@@ -384,7 +384,7 @@ public:
384
384
  }
385
385
 
386
386
  /// Return callsite
387
- inline const RetICFGNode* getRetICFGNode() const
387
+ inline const RetICFGNode* getRetBlock() const
388
388
  {
389
389
  assert(ret && "RetICFGNode not set?");
390
390
  return ret;
@@ -477,7 +477,7 @@ public:
477
477
  return cs;
478
478
  }
479
479
 
480
- inline const CallICFGNode* getCallBlockNode() const
480
+ inline const CallICFGNode* getCallICFGNode() const
481
481
  {
482
482
  return callBlockNode;
483
483
  }
@@ -397,7 +397,7 @@ protected:
397
397
  inline void addFormalINSVFGNode(const FunEntryICFGNode* funEntry, const MRVer* resVer, const NodeID nodeId)
398
398
  {
399
399
  FormalINSVFGNode* sNode = new FormalINSVFGNode(nodeId, resVer, funEntry);
400
- addSVFGNode(sNode, pag->getICFG()->getFunEntryBlockNode(funEntry->getFun()));
400
+ addSVFGNode(sNode, pag->getICFG()->getFunEntryICFGNode(funEntry->getFun()));
401
401
  setDef(resVer,sNode);
402
402
  funToFormalINMap[funEntry->getFun()].set(sNode->getId());
403
403
  }
@@ -406,7 +406,7 @@ protected:
406
406
  inline void addFormalOUTSVFGNode(const FunExitICFGNode* funExit, const MRVer* ver, const NodeID nodeId)
407
407
  {
408
408
  FormalOUTSVFGNode* sNode = new FormalOUTSVFGNode(nodeId, ver, funExit);
409
- addSVFGNode(sNode,pag->getICFG()->getFunExitBlockNode(funExit->getFun()));
409
+ addSVFGNode(sNode,pag->getICFG()->getFunExitICFGNode(funExit->getFun()));
410
410
  funToFormalOUTMap[funExit->getFun()].set(sNode->getId());
411
411
  }
412
412
 
@@ -414,7 +414,7 @@ protected:
414
414
  inline void addActualINSVFGNode(const CallICFGNode* callsite, const MRVer* ver, const NodeID nodeId)
415
415
  {
416
416
  ActualINSVFGNode* sNode = new ActualINSVFGNode(nodeId, callsite, ver);
417
- addSVFGNode(sNode,pag->getICFG()->getCallBlockNode(callsite->getCallSite()));
417
+ addSVFGNode(sNode,pag->getICFG()->getCallICFGNode(callsite->getCallSite()));
418
418
  callSiteToActualINMap[callsite].set(sNode->getId());
419
419
  }
420
420
 
@@ -422,7 +422,7 @@ protected:
422
422
  inline void addActualOUTSVFGNode(const CallICFGNode* callsite, const MRVer* resVer, const NodeID nodeId)
423
423
  {
424
424
  ActualOUTSVFGNode* sNode = new ActualOUTSVFGNode(nodeId, callsite, resVer);
425
- addSVFGNode(sNode, pag->getICFG()->getRetBlockNode(callsite->getCallSite()));
425
+ addSVFGNode(sNode, pag->getICFG()->getRetICFGNode(callsite->getCallSite()));
426
426
  setDef(resVer,sNode);
427
427
  callSiteToActualOUTMap[callsite].set(sNode->getId());
428
428
  }
@@ -244,7 +244,7 @@ private:
244
244
  inline InterPHISVFGNode* addInterPHIForFP(const FormalParmSVFGNode* fp)
245
245
  {
246
246
  InterPHISVFGNode* sNode = new InterPHISVFGNode(totalVFGNode++,fp);
247
- addSVFGNode(sNode, pag->getICFG()->getFunEntryBlockNode(fp->getFun()));
247
+ addSVFGNode(sNode, pag->getICFG()->getFunEntryICFGNode(fp->getFun()));
248
248
  resetDef(fp->getParam(),sNode);
249
249
  return sNode;
250
250
  }
@@ -252,7 +252,7 @@ private:
252
252
  inline InterPHISVFGNode* addInterPHIForAR(const ActualRetSVFGNode* ar)
253
253
  {
254
254
  InterPHISVFGNode* sNode = new InterPHISVFGNode(totalVFGNode++,ar);
255
- addSVFGNode(sNode, pag->getICFG()->getRetBlockNode(ar->getCallSite()->getCallSite()));
255
+ addSVFGNode(sNode, pag->getICFG()->getRetICFGNode(ar->getCallSite()->getCallSite()));
256
256
  resetDef(ar->getRev(),sNode);
257
257
  return sNode;
258
258
  }
@@ -479,7 +479,7 @@ protected:
479
479
  inline void addNullPtrVFGNode(const PAGNode* pagNode)
480
480
  {
481
481
  NullPtrVFGNode* sNode = new NullPtrVFGNode(totalVFGNode++,pagNode);
482
- addVFGNode(sNode, pag->getICFG()->getGlobalBlockNode());
482
+ addVFGNode(sNode, pag->getICFG()->getGlobalICFGNode());
483
483
  setDef(pagNode,sNode);
484
484
  }
485
485
  /// Add an Address VFG node
@@ -524,7 +524,7 @@ protected:
524
524
  inline void addActualParmVFGNode(const PAGNode* aparm, const CallICFGNode* cs)
525
525
  {
526
526
  ActualParmVFGNode* sNode = new ActualParmVFGNode(totalVFGNode++,aparm,cs);
527
- addVFGNode(sNode, pag->getICFG()->getCallBlockNode(cs->getCallSite()));
527
+ addVFGNode(sNode, pag->getICFG()->getCallICFGNode(cs->getCallSite()));
528
528
  PAGNodeToActualParmMap[std::make_pair(aparm->getId(),cs)] = sNode;
529
529
  /// do not set def here, this node is not a variable definition
530
530
  }
@@ -532,7 +532,7 @@ protected:
532
532
  inline void addFormalParmVFGNode(const PAGNode* fparm, const SVFFunction* fun, CallPESet& callPEs)
533
533
  {
534
534
  FormalParmVFGNode* sNode = new FormalParmVFGNode(totalVFGNode++,fparm,fun);
535
- addVFGNode(sNode, pag->getICFG()->getFunEntryBlockNode(fun));
535
+ addVFGNode(sNode, pag->getICFG()->getFunEntryICFGNode(fun));
536
536
  for(CallPESet::const_iterator it = callPEs.begin(), eit=callPEs.end();
537
537
  it!=eit; ++it)
538
538
  sNode->addCallPE(*it);
@@ -546,7 +546,7 @@ protected:
546
546
  inline void addFormalRetVFGNode(const PAGNode* uniqueFunRet, const SVFFunction* fun, RetPESet& retPEs)
547
547
  {
548
548
  FormalRetVFGNode *sNode = new FormalRetVFGNode(totalVFGNode++, uniqueFunRet, fun);
549
- addVFGNode(sNode, pag->getICFG()->getFunExitBlockNode(fun));
549
+ addVFGNode(sNode, pag->getICFG()->getFunExitICFGNode(fun));
550
550
  for (RetPESet::const_iterator it = retPEs.begin(), eit = retPEs.end(); it != eit; ++it)
551
551
  sNode->addRetPE(*it);
552
552
 
@@ -564,7 +564,7 @@ protected:
564
564
  inline void addActualRetVFGNode(const PAGNode* ret,const CallICFGNode* cs)
565
565
  {
566
566
  ActualRetVFGNode* sNode = new ActualRetVFGNode(totalVFGNode++,ret,cs);
567
- addVFGNode(sNode, pag->getICFG()->getRetBlockNode(cs->getCallSite()));
567
+ addVFGNode(sNode, pag->getICFG()->getRetICFGNode(cs->getCallSite()));
568
568
  setDef(ret,sNode);
569
569
  PAGNodeToActualRetMap[ret] = sNode;
570
570
  }
@@ -35,7 +35,7 @@ public:
35
35
  private:
36
36
  // Get CallICFGNode
37
37
  inline CallICFGNode* getCBN(const Instruction* inst) {
38
- return _la->getTCT()->getCallBlockNode(inst);
38
+ return _la->getTCT()->getCallICFGNode(inst);
39
39
  }
40
40
  const Instruction *getPreviousMemoryAccessInst( const Instruction *I) {
41
41
  I = I->getPrevNode();
package/include/MTA/MHP.h CHANGED
@@ -63,7 +63,7 @@ public:
63
63
 
64
64
  // Get CallICFGNode
65
65
  inline CallICFGNode* getCBN(const Instruction* inst) {
66
- return tct->getCallBlockNode(inst);
66
+ return tct->getCallICFGNode(inst);
67
67
  }
68
68
 
69
69
  /// Whether the function is connected from main function in thread call graph
@@ -381,7 +381,7 @@ private:
381
381
  }
382
382
  // Get CallICFGNode
383
383
  inline CallICFGNode* getCBN(const Instruction* inst) {
384
- return tct->getCallBlockNode(inst);
384
+ return tct->getCallICFGNode(inst);
385
385
  }
386
386
  /// Mark thread flags for cxtStmt
387
387
  //@{
package/include/MTA/PCG.h CHANGED
@@ -123,8 +123,8 @@ public:
123
123
  {
124
124
  }
125
125
 
126
- CallICFGNode* getCallBlockNode(const Instruction* inst) {
127
- return pta->getICFG()->getCallBlockNode(inst);
126
+ CallICFGNode* getCallICFGNode(const Instruction* inst) {
127
+ return pta->getICFG()->getCallICFGNode(inst);
128
128
  }
129
129
  const SVFFunction* getSVFFun(const Function* fun) const {
130
130
  return LLVMModuleSet::getLLVMModuleSet()->getSVFFunction(fun);
package/include/MTA/TCT.h CHANGED
@@ -148,8 +148,8 @@ public:
148
148
  destroy();
149
149
  }
150
150
  /// Get CallICFGNode given inst
151
- CallICFGNode* getCallBlockNode(const Instruction* inst) {
152
- return pta->getICFG()->getCallBlockNode(inst);
151
+ CallICFGNode* getCallICFGNode(const Instruction* inst) {
152
+ return pta->getICFG()->getCallICFGNode(inst);
153
153
  }
154
154
  /// Get SVFFuntion given Function
155
155
  const SVFFunction* getSVFFun(const Function* fun) const {
@@ -86,7 +86,7 @@ public:
86
86
 
87
87
  /// Copy Constructor
88
88
  LocationSet(const LocationSet& ls)
89
- : fldIdx(ls.fldIdx)
89
+ : fldIdx(ls.fldIdx), offsetValues(ls.getOffsetValueVec())
90
90
  {
91
91
  }
92
92
 
@@ -493,14 +493,14 @@ private:
493
493
  /// Add function arguments
494
494
  inline void addFunArgs(const SVFFunction* fun, const SVFVar* arg)
495
495
  {
496
- FunEntryICFGNode* funEntryBlockNode = icfg->getFunEntryBlockNode(fun);
496
+ FunEntryICFGNode* funEntryBlockNode = icfg->getFunEntryICFGNode(fun);
497
497
  funEntryBlockNode->addFormalParms(arg);
498
498
  funArgsListMap[fun].push_back(arg);
499
499
  }
500
500
  /// Add function returns
501
501
  inline void addFunRet(const SVFFunction* fun, const SVFVar* ret)
502
502
  {
503
- FunExitICFGNode* funExitBlockNode = icfg->getFunExitBlockNode(fun);
503
+ FunExitICFGNode* funExitBlockNode = icfg->getFunExitICFGNode(fun);
504
504
  funExitBlockNode->addFormalRet(ret);
505
505
  funRetMap[fun] = ret;
506
506
  }
@@ -437,12 +437,20 @@ public:
437
437
  assert(isVariantFieldGep()==false && "Can't retrieve the LocationSet if using a variable field index (pointer arithmetic) for struct field access ");
438
438
  return ls;
439
439
  }
440
-
440
+ inline const LocationSet::OffsetValueVec& getOffsetValueVec() const
441
+ {
442
+ return getLocationSet().getOffsetValueVec();
443
+ }
444
+ /// Return TRUE if this is a constant location set.
445
+ inline bool isConstantOffset() const{
446
+ return getLocationSet().isConstantOffset();
447
+ }
448
+ /// Return accumulated constant offset (when accessing array or struct) if this offset is a constant.
441
449
  inline s64_t accumulateConstantOffset() const
442
450
  {
443
- return ls.accumulateConstantOffset();
451
+ return getLocationSet().accumulateConstantOffset();
444
452
  }
445
- /// offset of the gep statement
453
+ /// Field index of the gep statement if it access the field of a struct
446
454
  inline s64_t getConstantFieldIdx() const
447
455
  {
448
456
  return getLocationSet().accumulateConstantFieldIdx();