svf-tools 1.0.361 → 1.0.365

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/html/Andersen_8h_source.html +1 -1
  3. package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
  4. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +34 -32
  5. package/SVF-doxygen/html/html/ConsG_8h_source.html +20 -20
  6. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
  7. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +2 -2
  8. package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
  9. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
  10. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +1 -1
  12. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
  13. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +1 -1
  14. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +1 -1
  15. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
  16. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +1 -1
  17. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +1 -1
  18. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +5 -5
  19. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +1 -1
  20. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +13 -15
  21. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +14 -14
  22. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +2 -2
  23. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +4 -4
  24. package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
  25. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +12 -6
  26. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +90 -84
  27. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +43 -39
  28. package/SVF-doxygen/html/html/SVFIR_8h_source.html +41 -39
  29. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +21 -20
  30. package/SVF-doxygen/html/html/SVFStatements_8h.html +2 -0
  31. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +78 -62
  32. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
  33. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +13 -13
  34. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +12 -12
  35. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +1 -1
  36. package/SVF-doxygen/html/html/VFGNode_8h_source.html +5 -5
  37. package/SVF-doxygen/html/html/VFG_8cpp_source.html +42 -40
  38. package/SVF-doxygen/html/html/VFG_8h_source.html +26 -26
  39. package/SVF-doxygen/html/html/annotated.html +58 -57
  40. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +2 -2
  41. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt-members.html +14 -13
  42. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +4 -3
  43. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -1
  44. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +3 -3
  45. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +1 -1
  46. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +2 -2
  47. package/SVF-doxygen/html/html/classSVF_1_1AssignStmt-members.html +14 -13
  48. package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.html +4 -3
  49. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +6 -6
  50. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt-members.html +30 -28
  51. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +26 -22
  52. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +2 -2
  53. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +16 -15
  54. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +41 -40
  55. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +4 -4
  56. package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +14 -13
  57. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +6 -5
  58. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt-members.html +30 -28
  59. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +27 -23
  60. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +2 -2
  61. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +1 -1
  62. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +79 -77
  63. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +26 -26
  64. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +43 -43
  65. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +1 -1
  66. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt-members.html +14 -13
  67. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +4 -3
  68. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +2 -2
  69. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +3 -3
  70. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +1 -1
  71. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
  72. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +1 -1
  73. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +1 -1
  74. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
  75. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +20 -21
  76. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
  77. package/SVF-doxygen/html/html/classSVF_1_1GepStmt-members.html +15 -14
  78. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +6 -5
  79. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +1 -1
  80. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt-members.html +14 -13
  81. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +6 -5
  82. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +1 -1
  83. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +1 -1
  84. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +1 -1
  85. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt-members.html +33 -31
  86. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +66 -24
  87. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.png +0 -0
  88. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +4 -4
  89. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +9 -10
  90. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +2 -2
  91. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt-members.html +21 -16
  92. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +186 -73
  93. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +38 -40
  94. package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +14 -13
  95. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +6 -5
  96. package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +1 -1
  97. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +10 -10
  98. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +1 -1
  99. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +1 -1
  100. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +8 -8
  101. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +177 -176
  102. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +160 -90
  103. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +36 -34
  104. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +336 -222
  105. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt-members.html +17 -16
  106. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +9 -5
  107. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.png +0 -0
  108. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +3 -3
  109. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt-members.html +154 -0
  110. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +704 -0
  111. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.png +0 -0
  112. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +2 -2
  113. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt-members.html +17 -16
  114. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +6 -5
  115. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +39 -39
  116. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +17 -16
  117. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +15 -14
  118. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +17 -16
  119. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +15 -14
  120. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
  121. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +1 -1
  122. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt-members.html +17 -16
  123. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +29 -28
  124. package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +1 -1
  125. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +61 -59
  126. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
  127. package/SVF-doxygen/html/html/classes.html +70 -70
  128. package/SVF-doxygen/html/html/functions_a.html +12 -8
  129. package/SVF-doxygen/html/html/functions_b.html +4 -2
  130. package/SVF-doxygen/html/html/functions_c.html +31 -29
  131. package/SVF-doxygen/html/html/functions_eval_s.html +3 -0
  132. package/SVF-doxygen/html/html/functions_func.html +12 -8
  133. package/SVF-doxygen/html/html/functions_func_c.html +18 -17
  134. package/SVF-doxygen/html/html/functions_func_g.html +19 -6
  135. package/SVF-doxygen/html/html/functions_func_o.html +2 -1
  136. package/SVF-doxygen/html/html/functions_func_s.html +8 -5
  137. package/SVF-doxygen/html/html/functions_func_t.html +1 -0
  138. package/SVF-doxygen/html/html/functions_func_u.html +1 -0
  139. package/SVF-doxygen/html/html/functions_g.html +22 -9
  140. package/SVF-doxygen/html/html/functions_i.html +3 -3
  141. package/SVF-doxygen/html/html/functions_l.html +3 -3
  142. package/SVF-doxygen/html/html/functions_m.html +1 -1
  143. package/SVF-doxygen/html/html/functions_o.html +20 -13
  144. package/SVF-doxygen/html/html/functions_p.html +6 -6
  145. package/SVF-doxygen/html/html/functions_s.html +23 -17
  146. package/SVF-doxygen/html/html/functions_t.html +5 -4
  147. package/SVF-doxygen/html/html/functions_type_o.html +3 -0
  148. package/SVF-doxygen/html/html/functions_u.html +1 -0
  149. package/SVF-doxygen/html/html/functions_vars_c.html +3 -0
  150. package/SVF-doxygen/html/html/functions_vars_o.html +3 -0
  151. package/SVF-doxygen/html/html/hierarchy.html +55 -54
  152. package/SVF-doxygen/html/html/namespaceSVF.html +3 -1
  153. package/SVF-doxygen/html/html/search/all_1.js +4 -3
  154. package/SVF-doxygen/html/html/search/all_10.js +7 -7
  155. package/SVF-doxygen/html/html/search/all_12.js +1 -1
  156. package/SVF-doxygen/html/html/search/all_13.js +8 -6
  157. package/SVF-doxygen/html/html/search/all_14.js +4 -4
  158. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  159. package/SVF-doxygen/html/html/search/all_16.js +1 -1
  160. package/SVF-doxygen/html/html/search/all_2.js +1 -1
  161. package/SVF-doxygen/html/html/search/all_3.js +3 -3
  162. package/SVF-doxygen/html/html/search/all_7.js +5 -1
  163. package/SVF-doxygen/html/html/search/all_9.js +1 -1
  164. package/SVF-doxygen/html/html/search/all_c.js +2 -2
  165. package/SVF-doxygen/html/html/search/all_d.js +1 -1
  166. package/SVF-doxygen/html/html/search/all_e.js +1 -1
  167. package/SVF-doxygen/html/html/search/all_f.js +3 -1
  168. package/SVF-doxygen/html/html/search/classes_f.js +1 -0
  169. package/SVF-doxygen/html/html/search/enumvalues_f.js +1 -0
  170. package/SVF-doxygen/html/html/search/functions_0.js +4 -3
  171. package/SVF-doxygen/html/html/search/functions_10.js +1 -0
  172. package/SVF-doxygen/html/html/search/functions_11.js +1 -1
  173. package/SVF-doxygen/html/html/search/functions_12.js +1 -1
  174. package/SVF-doxygen/html/html/search/functions_2.js +1 -1
  175. package/SVF-doxygen/html/html/search/functions_6.js +5 -1
  176. package/SVF-doxygen/html/html/search/functions_d.js +1 -1
  177. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  178. package/SVF-doxygen/html/html/search/typedefs_e.js +1 -0
  179. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  180. package/SVF-doxygen/html/html/search/variables_3.js +1 -0
  181. package/SVF-doxygen/html/html/search/variables_e.js +1 -1
  182. package/SVF-doxygen/html/html/search/variables_f.js +1 -0
  183. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +16 -16
  184. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +18 -18
  185. package/include/Graphs/VFG.h +1 -1
  186. package/include/MemoryModel/SVFIR.h +3 -1
  187. package/include/MemoryModel/SVFStatements.h +76 -4
  188. package/include/SVF-FE/SVFIRBuilder.h +12 -2
  189. package/lib/Graphs/ConsG.cpp +9 -0
  190. package/lib/Graphs/VFG.cpp +9 -0
  191. package/lib/MemoryModel/PAGBuilderFromFile.cpp +3 -1
  192. package/lib/MemoryModel/PointerAnalysis.cpp +0 -3
  193. package/lib/MemoryModel/SVFIR.cpp +24 -3
  194. package/lib/MemoryModel/SVFStatements.cpp +14 -0
  195. package/lib/SVF-FE/ICFGBuilder.cpp +4 -4
  196. package/lib/SVF-FE/SVFIRBuilder.cpp +43 -12
  197. package/lib/SVF-FE/SymbolTableBuilder.cpp +1 -0
  198. package/package.json +1 -1
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">ICFGBuilder.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="ICFGBuilder_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">//===- ICFGBuilder.cpp ----------------------------------------------------------------//</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;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * ICFGBuilder.cpp</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Created on:</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * Author: yulei</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</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="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ICFGBuilder_8h.html">SVF-FE/ICFGBuilder.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="SVFIR_8h.html">MemoryModel/SVFIR.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="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGBuilder.html#ae66565ee32fff4ef5f0157e867333250"> 41</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ICFGBuilder.html#ae66565ee32fff4ef5f0157e867333250">ICFGBuilder::build</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#afcf2978f32e15127fb093405dc17d7f1">SVFModule::const_iterator</a> iter = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a5486697889c6cca4f9f426650defc255">begin</a>(), eiter = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a58d03edb6ff85f4943135478f113df31">end</a>(); iter != eiter; ++iter)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fun = *iter;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVFUtil::isExtCall</a>(fun))</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; processFunEntry(fun,worklist);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; processFunBody(worklist);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; processFunExit(fun);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; connectGlobalToProgEntry(svfModule);</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="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGBuilder.html#a52e6426f0a1af479159f6fbac6d5b8f4"> 59</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ICFGBuilder.html#a52e6426f0a1af479159f6fbac6d5b8f4">ICFGBuilder::processFunEntry</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a>&amp; worklist)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a> = icfg-&gt;getFunEntryICFGNode(fun);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* entryInst = &amp;((fun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;getEntryBlock()).front());</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="classSVF_1_1ICFGBuilder.html#a57af1044422b3c3860aa6fb033f8111e">InstVec</a> insts;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab7f58caf27c30a1d414e06f60ca84d80">isIntrinsicInst</a>(entryInst))</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a2f9959fa23ab4bdc65ca36fbda8c1b70">getNextInsts</a>(entryInst, insts);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; insts.push_back(entryInst);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">for</span> (InstVec::const_iterator nit = insts.begin(), enit = insts.end();</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; nit != enit; ++nit)</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; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* instNode = getOrAddBlockICFGNode(*nit); <span class="comment">//add interprocedure edge</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; icfg-&gt;addIntraEdge(FunEntryICFGNode, instNode);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(*nit);</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="classSVF_1_1ICFGBuilder.html#ab1cc5de5c2ee7acf83e9ae51c7b38cb5"> 80</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ICFGBuilder.html#ab1cc5de5c2ee7acf83e9ae51c7b38cb5">ICFGBuilder::processFunBody</a>(<a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a>&amp; worklist)</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_1ICFGBuilder.html#abb7144bcc587e236fd22f6c8896117f5">BBSet</a> visited;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</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="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> (visited.find(inst) == visited.end())</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; visited.insert(inst);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* srcNode = getOrAddBlockICFGNode(inst);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#abd525a2e3b7b9167b61b2304cc2cbdf2">isReturn</a>(inst))</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun = inst-&gt;getFunction();</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfFun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(fun);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a> = icfg-&gt;getFunExitICFGNode(svfFun);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; icfg-&gt;addIntraEdge(srcNode, FunExitICFGNode);</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; <a class="code" href="classSVF_1_1ICFGBuilder.html#a57af1044422b3c3860aa6fb033f8111e">InstVec</a> nextInsts;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a2f9959fa23ab4bdc65ca36fbda8c1b70">getNextInsts</a>(inst, nextInsts);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> branchID = 0;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">for</span> (InstVec::const_iterator nit = nextInsts.begin(), enit =</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; nextInsts.end(); nit != enit; ++nit)</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succ = *nit;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* dstNode = getOrAddBlockICFGNode(succ);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a8d8216a92140d982303f83ea424ddc91">isNonInstricCallSite</a>(inst))</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retICFGNode = getRetICFGNode(inst);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; srcNode = retICFGNode;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</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; </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac9a05dd7ab16e998625037aa242cd30f">BranchInst</a>* br = SVFUtil::dyn_cast&lt;BranchInst&gt;(inst))</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">if</span>(br-&gt;isConditional())</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; icfg-&gt;addConditionalIntraEdge(srcNode, dstNode, br-&gt;getCondition(), branchID);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">else</span> </div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; icfg-&gt;addIntraEdge(srcNode, dstNode);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a412280b134578905248ce0122c5db7c9">SwitchInst</a>* si = SVFUtil::dyn_cast&lt;SwitchInst&gt;(inst))</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; icfg-&gt;addConditionalIntraEdge(srcNode, dstNode, si-&gt;getCondition(),branchID);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; icfg-&gt;addIntraEdge(srcNode, dstNode);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(succ);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; branchID++;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; }</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="l00139"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGBuilder.html#a21ecc610b7ac35f4e64b2a4a45688359"> 139</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ICFGBuilder.html#a21ecc610b7ac35f4e64b2a4a45688359">ICFGBuilder::processFunExit</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun)</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;{</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a> = icfg-&gt;getFunExitICFGNode(fun);</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; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a255af6ff30782cb9a548feadb0fe7d6b">inst_iterator</a> II = inst_begin(fun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()), EE = inst_end(fun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()); II != EE; ++II)</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"> 145</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = &amp;*II;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;ReturnInst&gt;(inst)) {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* instNode = getOrAddBlockICFGNode(inst);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; icfg-&gt;addIntraEdge(instNode, FunExitICFGNode);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;}</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</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;</div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGBuilder.html#a1c07cce4cae9bfc8884b37cbda06d8ac"> 160</a></span>&#160;<a class="code" href="classSVF_1_1InterICFGNode.html">InterICFGNode</a>* <a class="code" href="classSVF_1_1ICFGBuilder.html#a1c07cce4cae9bfc8884b37cbda06d8ac">ICFGBuilder::getOrAddInterBlockICFGNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;{</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a2e08ce822223842fa6a73fd659b1a526">SVFUtil::isCallSite</a>(inst) &amp;&amp; <span class="stringliteral">&quot;not a call instruction?&quot;</span>);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a8d8216a92140d982303f83ea424ddc91">SVFUtil::isNonInstricCallSite</a>(inst) &amp;&amp; <span class="stringliteral">&quot;associating an intrinsic debug instruction with an ICFGNode!&quot;</span>);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callICFGNode = getCallICFGNode(inst);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; addICFGInterEdges(inst, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">getCallee</a>(inst)); <span class="comment">//creating interprocedural edges</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">return</span> callICFGNode;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;}</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGBuilder.html#af1fb4795e58130d639b75c354f67a6ab"> 172</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ICFGBuilder.html#af1fb4795e58130d639b75c354f67a6ab">ICFGBuilder::addICFGInterEdges</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee)</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;{</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> = getCallICFGNode(cs);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = getRetICFGNode(cs);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">if</span>(callee){</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(callee))</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; icfg-&gt;addIntraEdge(CallICFGNode, retBlockNode); </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* calleeEntryNode = icfg-&gt;getFunEntryICFGNode(callee);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* calleeExitNode = icfg-&gt;getFunExitICFGNode(callee);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; icfg-&gt;addCallEdge(CallICFGNode, calleeEntryNode, cs);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; icfg-&gt;addRetEdge(calleeExitNode, retBlockNode, cs);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; icfg-&gt;addIntraEdge(CallICFGNode, retBlockNode); </div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;}</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="comment">* Add the global initialization statements immediately after the function entry of main</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGBuilder.html#a05539eb12b22886ea4b5b4275f601641"> 201</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ICFGBuilder.html#a05539eb12b22886ea4b5b4275f601641">ICFGBuilder::connectGlobalToProgEntry</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule)</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;{</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* mainFunc = <a class="code" href="namespaceSVF_1_1SVFUtil.html#aa8017e3e5100b3f63ee338b66118d266">SVFUtil::getProgEntryFunction</a>(svfModule);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">if</span>(mainFunc == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entryNode = icfg-&gt;getFunEntryICFGNode(mainFunc);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="classSVF_1_1GlobalICFGNode.html">GlobalICFGNode</a>* globalNode = icfg-&gt;getGlobalICFGNode();</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="classSVF_1_1IntraCFGEdge.html">IntraCFGEdge</a>* intraEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1IntraCFGEdge.html">IntraCFGEdge</a>(globalNode, entryNode);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; icfg-&gt;addICFGEdge(intraEdge);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;}</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a2e08ce822223842fa6a73fd659b1a526"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a2e08ce822223842fa6a73fd659b1a526">SVF::SVFUtil::isCallSite</a></div><div class="ttdeci">bool isCallSite(const Instruction *inst)</div><div class="ttdoc">Whether an instruction is a call or invoke instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00193">SVFUtil.h:193</a></div></div>
69
+ <a href="ICFGBuilder_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">//===- ICFGBuilder.cpp ----------------------------------------------------------------//</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;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * ICFGBuilder.cpp</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Created on:</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * Author: yulei</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</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="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ICFGBuilder_8h.html">SVF-FE/ICFGBuilder.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="SVFIR_8h.html">MemoryModel/SVFIR.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="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGBuilder.html#ae66565ee32fff4ef5f0157e867333250"> 41</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ICFGBuilder.html#ae66565ee32fff4ef5f0157e867333250">ICFGBuilder::build</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#afcf2978f32e15127fb093405dc17d7f1">SVFModule::const_iterator</a> iter = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a5486697889c6cca4f9f426650defc255">begin</a>(), eiter = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a58d03edb6ff85f4943135478f113df31">end</a>(); iter != eiter; ++iter)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fun = *iter;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVFUtil::isExtCall</a>(fun))</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; processFunEntry(fun,worklist);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; processFunBody(worklist);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; processFunExit(fun);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; connectGlobalToProgEntry(svfModule);</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="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGBuilder.html#a52e6426f0a1af479159f6fbac6d5b8f4"> 59</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ICFGBuilder.html#a52e6426f0a1af479159f6fbac6d5b8f4">ICFGBuilder::processFunEntry</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a>&amp; worklist)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a> = icfg-&gt;getFunEntryICFGNode(fun);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* entryInst = &amp;((fun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;getEntryBlock()).front());</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="classSVF_1_1ICFGBuilder.html#a57af1044422b3c3860aa6fb033f8111e">InstVec</a> insts;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab7f58caf27c30a1d414e06f60ca84d80">isIntrinsicInst</a>(entryInst))</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a2f9959fa23ab4bdc65ca36fbda8c1b70">getNextInsts</a>(entryInst, insts);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; insts.push_back(entryInst);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">for</span> (InstVec::const_iterator nit = insts.begin(), enit = insts.end();</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; nit != enit; ++nit)</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; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* instNode = getOrAddBlockICFGNode(*nit); <span class="comment">//add interprocedure edge</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; icfg-&gt;addIntraEdge(FunEntryICFGNode, instNode);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(*nit);</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="classSVF_1_1ICFGBuilder.html#ab1cc5de5c2ee7acf83e9ae51c7b38cb5"> 80</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ICFGBuilder.html#ab1cc5de5c2ee7acf83e9ae51c7b38cb5">ICFGBuilder::processFunBody</a>(<a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a>&amp; worklist)</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_1ICFGBuilder.html#abb7144bcc587e236fd22f6c8896117f5">BBSet</a> visited;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</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="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> (visited.find(inst) == visited.end())</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; visited.insert(inst);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* srcNode = getOrAddBlockICFGNode(inst);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#abd525a2e3b7b9167b61b2304cc2cbdf2">isReturn</a>(inst))</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun = inst-&gt;getFunction();</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfFun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(fun);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a> = icfg-&gt;getFunExitICFGNode(svfFun);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; icfg-&gt;addIntraEdge(srcNode, FunExitICFGNode);</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; <a class="code" href="classSVF_1_1ICFGBuilder.html#a57af1044422b3c3860aa6fb033f8111e">InstVec</a> nextInsts;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a2f9959fa23ab4bdc65ca36fbda8c1b70">getNextInsts</a>(inst, nextInsts);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> branchID = 0;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">for</span> (InstVec::const_iterator nit = nextInsts.begin(), enit =</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; nextInsts.end(); nit != enit; ++nit)</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succ = *nit;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* dstNode = getOrAddBlockICFGNode(succ);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a8d8216a92140d982303f83ea424ddc91">isNonInstricCallSite</a>(inst))</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retICFGNode = getRetICFGNode(inst);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; srcNode = retICFGNode;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</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; </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac9a05dd7ab16e998625037aa242cd30f">BranchInst</a>* br = SVFUtil::dyn_cast&lt;BranchInst&gt;(inst))</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">if</span>(br-&gt;isConditional())</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; icfg-&gt;addConditionalIntraEdge(srcNode, dstNode, br-&gt;getCondition(), branchID);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">else</span> </div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; icfg-&gt;addIntraEdge(srcNode, dstNode);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a412280b134578905248ce0122c5db7c9">SwitchInst</a>* si = SVFUtil::dyn_cast&lt;SwitchInst&gt;(inst))</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; icfg-&gt;addConditionalIntraEdge(srcNode, dstNode, si-&gt;getCondition(),branchID);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; icfg-&gt;addIntraEdge(srcNode, dstNode);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(succ);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; branchID++;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; }</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="l00139"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGBuilder.html#a21ecc610b7ac35f4e64b2a4a45688359"> 139</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ICFGBuilder.html#a21ecc610b7ac35f4e64b2a4a45688359">ICFGBuilder::processFunExit</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun)</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;{</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a> = icfg-&gt;getFunExitICFGNode(fun);</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; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a255af6ff30782cb9a548feadb0fe7d6b">inst_iterator</a> II = inst_begin(fun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()), EE = inst_end(fun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()); II != EE; ++II)</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"> 145</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = &amp;*II;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;ReturnInst&gt;(inst)) {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* instNode = getOrAddBlockICFGNode(inst);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; icfg-&gt;addIntraEdge(instNode, FunExitICFGNode);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;}</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</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;</div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGBuilder.html#a1c07cce4cae9bfc8884b37cbda06d8ac"> 160</a></span>&#160;<a class="code" href="classSVF_1_1InterICFGNode.html">InterICFGNode</a>* <a class="code" href="classSVF_1_1ICFGBuilder.html#a1c07cce4cae9bfc8884b37cbda06d8ac">ICFGBuilder::getOrAddInterBlockICFGNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;{</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a2e08ce822223842fa6a73fd659b1a526">SVFUtil::isCallSite</a>(inst) &amp;&amp; <span class="stringliteral">&quot;not a call instruction?&quot;</span>);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a8d8216a92140d982303f83ea424ddc91">SVFUtil::isNonInstricCallSite</a>(inst) &amp;&amp; <span class="stringliteral">&quot;associating an intrinsic debug instruction with an ICFGNode!&quot;</span>);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callICFGNode = getCallICFGNode(inst);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; addICFGInterEdges(inst, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">getCallee</a>(inst)); <span class="comment">//creating interprocedural edges</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">return</span> callICFGNode;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;}</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGBuilder.html#af1fb4795e58130d639b75c354f67a6ab"> 172</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ICFGBuilder.html#af1fb4795e58130d639b75c354f67a6ab">ICFGBuilder::addICFGInterEdges</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee)</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;{</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callICFGNode = getCallICFGNode(cs);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = getRetICFGNode(cs);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">if</span>(callee){</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(callee))</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; icfg-&gt;addIntraEdge(callICFGNode, retBlockNode); </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* calleeEntryNode = icfg-&gt;getFunEntryICFGNode(callee);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* calleeExitNode = icfg-&gt;getFunExitICFGNode(callee);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; icfg-&gt;addCallEdge(callICFGNode, calleeEntryNode, cs);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; icfg-&gt;addRetEdge(calleeExitNode, retBlockNode, cs);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; icfg-&gt;addIntraEdge(callICFGNode, retBlockNode); </div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;}</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="comment">* Add the global initialization statements immediately after the function entry of main</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGBuilder.html#a05539eb12b22886ea4b5b4275f601641"> 201</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ICFGBuilder.html#a05539eb12b22886ea4b5b4275f601641">ICFGBuilder::connectGlobalToProgEntry</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule)</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;{</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* mainFunc = <a class="code" href="namespaceSVF_1_1SVFUtil.html#aa8017e3e5100b3f63ee338b66118d266">SVFUtil::getProgEntryFunction</a>(svfModule);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">if</span>(mainFunc == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entryNode = icfg-&gt;getFunEntryICFGNode(mainFunc);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="classSVF_1_1GlobalICFGNode.html">GlobalICFGNode</a>* globalNode = icfg-&gt;getGlobalICFGNode();</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="classSVF_1_1IntraCFGEdge.html">IntraCFGEdge</a>* intraEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1IntraCFGEdge.html">IntraCFGEdge</a>(globalNode, entryNode);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; icfg-&gt;addICFGEdge(intraEdge);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;}</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a2e08ce822223842fa6a73fd659b1a526"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a2e08ce822223842fa6a73fd659b1a526">SVF::SVFUtil::isCallSite</a></div><div class="ttdeci">bool isCallSite(const Instruction *inst)</div><div class="ttdoc">Whether an instruction is a call or invoke instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00193">SVFUtil.h:193</a></div></div>
70
70
  <div class="ttc" id="namespaceSVF_html_ac9a05dd7ab16e998625037aa242cd30f"><div class="ttname"><a href="namespaceSVF.html#ac9a05dd7ab16e998625037aa242cd30f">SVF::BranchInst</a></div><div class="ttdeci">llvm::BranchInst BranchInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00161">BasicTypes.h:161</a></div></div>
71
71
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_ab7f58caf27c30a1d414e06f60ca84d80"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab7f58caf27c30a1d414e06f60ca84d80">SVF::SVFUtil::isIntrinsicInst</a></div><div class="ttdeci">bool isIntrinsicInst(const Instruction *inst)</div><div class="ttdoc">Return true if it is an intrinsic instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00180">SVFUtil.h:180</a></div></div>
72
72
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
@@ -114,7 +114,7 @@ $(function() {
114
114
  <div class="ttc" id="classSVF_1_1IRAnnotator_html_a0a26b250269a2e38a5507d68fdbe03f4"><div class="ttname"><a href="classSVF_1_1IRAnnotator.html#a0a26b250269a2e38a5507d68fdbe03f4">SVF::IRAnnotator::processConstantNode</a></div><div class="ttdeci">void processConstantNode(const SVF::NodeID &amp;nodeId, bool writeFlag)</div><div class="ttdef"><b>Definition:</b> <a href="IRAnnotator_8h_source.html#l00236">IRAnnotator.h:236</a></div></div>
115
115
  <div class="ttc" id="classSVF_1_1SVFIR_html"><div class="ttname"><a href="classSVF_1_1SVFIR.html">SVF::SVFIR</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00043">SVFIR.h:43</a></div></div>
116
116
  <div class="ttc" id="classSVF_1_1IRAnnotator_html_aa54df3d6c0c20c26be90bb68546dc93d"><div class="ttname"><a href="classSVF_1_1IRAnnotator.html#aa54df3d6c0c20c26be90bb68546dc93d">SVF::IRAnnotator::IRAnnotator</a></div><div class="ttdeci">IRAnnotator()</div><div class="ttdef"><b>Definition:</b> <a href="IRAnnotator_8h_source.html#l00025">IRAnnotator.h:25</a></div></div>
117
- <div class="ttc" id="classSVF_1_1SVFIR_html_a20c0c65af266ac876cb722aee6e87101"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">SVF::SVFIR::getGepObjVar</a></div><div class="ttdeci">NodeID getGepObjVar(const MemObj *obj, const LocationSet &amp;ls)</div><div class="ttdoc">Get a field SVFIR Object node according to base mem obj and offset. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00405">SVFIR.cpp:405</a></div></div>
117
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a20c0c65af266ac876cb722aee6e87101"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">SVF::SVFIR::getGepObjVar</a></div><div class="ttdeci">NodeID getGepObjVar(const MemObj *obj, const LocationSet &amp;ls)</div><div class="ttdoc">Get a field SVFIR Object node according to base mem obj and offset. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00426">SVFIR.cpp:426</a></div></div>
118
118
  <div class="ttc" id="classSVF_1_1IRAnnotator_html"><div class="ttname"><a href="classSVF_1_1IRAnnotator.html">SVF::IRAnnotator</a></div><div class="ttdef"><b>Definition:</b> <a href="IRAnnotator_8h_source.html#l00022">IRAnnotator.h:22</a></div></div>
119
119
  <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>
120
120
  </div><!-- fragment --></div><!-- contents -->
@@ -104,7 +104,7 @@ $(function() {
104
104
  <div class="ttc" id="classSVF_1_1SVFIR_html_a5c5adab1f68520a304fbf70ca40f7687"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a5c5adab1f68520a304fbf70ca40f7687">SVF::SVFIR::getGlobalSVFStmtSet</a></div><div class="ttdeci">SVFStmtSet &amp; getGlobalSVFStmtSet()</div><div class="ttdoc">Get global PAGEdges (not in a procedure) </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00199">SVFIR.h:199</a></div></div>
105
105
  <div class="ttc" id="classSVF_1_1PointsTo_html_ab196d86cfb48d1c5d27a0c03c7497afa"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">SVF::PointsTo::set</a></div><div class="ttdeci">void set(u32_t n)</div><div class="ttdoc">Inserts n in the set. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00149">PointsTo.cpp:149</a></div></div>
106
106
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
107
- <div class="ttc" id="classSVF_1_1SVFIR_html_a7276e82b4648ed0e1b3d1b8b37b24089"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">SVF::SVFIR::getAllFieldsObjVars</a></div><div class="ttdeci">NodeBS &amp; getAllFieldsObjVars(const MemObj *obj)</div><div class="ttdoc">Get all fields of an object. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00458">SVFIR.cpp:458</a></div></div>
107
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a7276e82b4648ed0e1b3d1b8b37b24089"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">SVF::SVFIR::getAllFieldsObjVars</a></div><div class="ttdeci">NodeBS &amp; getAllFieldsObjVars(const MemObj *obj)</div><div class="ttdoc">Get all fields of an object. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00479">SVFIR.cpp:479</a></div></div>
108
108
  <div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
109
109
  <div class="ttc" id="classSVF_1_1IRGraph_html_a28ea8f85b0923d00364a010c1fd4e416"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a28ea8f85b0923d00364a010c1fd4e416">SVF::IRGraph::SVFStmtSet</a></div><div class="ttdeci">Set&lt; const SVFStmt * &gt; SVFStmtSet</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00051">IRGraph.h:51</a></div></div>
110
110
  <div class="ttc" id="SVFBasicTypes_8h_html_a2c64190a065f342897573a3ef4973adb"><div class="ttname"><a href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a></div><div class="ttdeci">#define DGENERAL</div><div class="ttdoc">General debug flag is for each phase of a pass, it is often in a colorful output format. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00154">SVFBasicTypes.h:154</a></div></div>
@@ -224,7 +224,7 @@ $(function() {
224
224
  <div class="ttc" id="classSVF_1_1SVFIR_html"><div class="ttname"><a href="classSVF_1_1SVFIR.html">SVF::SVFIR</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00043">SVFIR.h:43</a></div></div>
225
225
  <div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
226
226
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a899c81db92c6bcf24f6f9b769e02e5bf"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a899c81db92c6bcf24f6f9b769e02e5bf">SVF::MRGenerator::addRefSideEffectOfFunction</a></div><div class="ttdeci">void addRefSideEffectOfFunction(const SVFFunction *fun, const NodeBS &amp;refs)</div><div class="ttdoc">Add/Get methods for side-effect of functions and callsites. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00407">MemRegion.cpp:407</a></div></div>
227
- <div class="ttc" id="classSVF_1_1SVFIR_html_a42d1e2f0213fb6e54c56cc0695b57cb0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0">SVF::SVFIR::getFieldsAfterCollapse</a></div><div class="ttdeci">NodeBS getFieldsAfterCollapse(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00480">SVFIR.cpp:480</a></div></div>
227
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a42d1e2f0213fb6e54c56cc0695b57cb0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0">SVF::SVFIR::getFieldsAfterCollapse</a></div><div class="ttdeci">NodeBS getFieldsAfterCollapse(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00501">SVFIR.cpp:501</a></div></div>
228
228
  <div class="ttc" id="SVFBasicTypes_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DEBUG model of each pass. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00149">SVFBasicTypes.h:149</a></div></div>
229
229
  <div class="ttc" id="classSVF_1_1FIFOWorkList_html_a8fa72918fce7e9c0b2dc34b683a797c6"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">SVF::FIFOWorkList::pop</a></div><div class="ttdeci">Data pop()</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00174">WorkList.h:174</a></div></div>
230
230
  <div class="ttc" id="classSVF_1_1MRGenerator_html_ac14c99ee6064fc9cf30120a83c78e702"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">SVF::MRGenerator::getModRefInfo</a></div><div class="ttdeci">ModRefInfo getModRefInfo(const CallICFGNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00719">MemRegion.cpp:719</a></div></div>
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">PAGBuilderFromFile.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="PAGBuilderFromFile_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">//===- PAGBuilderFromFile.cpp -- SVFIR builder-------------------------------//</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-2018&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"> * PAGBuilderFromFile.cpp</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"> * Created on: 20 Sep. 2018</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: 136884</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PAGBuilderFromFile_8h.html">MemoryModel/PAGBuilderFromFile.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;fstream&gt;</span> <span class="comment">// for PAGBuilderFromFile</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span> <span class="comment">// for PAGBuilderFromFile</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span> <span class="comment">// for PAGBuilderFromFile</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="namespacestd.html">std</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="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="PAGBuilderFromFile_8cpp.html#a1af3947dbaf1ad4364bc4818f70ead40"> 38</a></span>&#160;<span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="PAGBuilderFromFile_8cpp.html#a1af3947dbaf1ad4364bc4818f70ead40">gepNodeNumIndex</a> = 100000;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment"> * You can build a SVFIR from a file written by yourself</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment"> * The file should follow the format:</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment"> * Node: nodeID Nodetype</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="comment"> * Edge: nodeID edgetype NodeID Offset</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment"> * like:</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">5 o</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment">6 v</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment">7 v</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">8 v</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">9 v</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">5 addr 6 0</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment">6 gep 7 4</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment">7 copy 8 0</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment">6 store 8 0</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment">8 load 9 0</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1PAGBuilderFromFile.html#ac5a5058088d03fc9e0e8a0ed8b4367aa"> 59</a></span>&#160;<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* PAGBuilderFromFile::build()</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">string</span> line;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; ifstream myfile(file.c_str());</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">if</span> (myfile.is_open())</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">while</span> (myfile.good())</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; getline(myfile, line);</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; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> token_count = 0;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">string</span> tmps;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">while</span> (ss.good())</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; ss &gt;&gt; tmps;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; token_count++;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">if</span> (token_count == 0)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">continue</span>;</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (token_count == 2)</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordtype">string</span> nodetype;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; ss &gt;&gt; nodeId;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; ss &gt;&gt; nodetype;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;reading node :&quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">if</span> (nodetype == <span class="stringliteral">&quot;v&quot;</span>)</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; pag-&gt;addDummyValNode(nodeId);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nodetype == <span class="stringliteral">&quot;o&quot;</span>)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = pag-&gt;addDummyMemObj(nodeId, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; pag-&gt;addFIObjNode(mem);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;format not support, pls specify node type&quot;</span>);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</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; <span class="comment">// do consider gep edge</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (token_count == 4)</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeSrc;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeDst;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="namespaceSVF.html#abe09d99af006554a5c00803e9a89f9a6">s64_t</a> offsetOrCSId;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordtype">string</span> edge;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; ss &gt;&gt; nodeSrc;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; ss &gt;&gt; edge;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; ss &gt;&gt; nodeDst;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; ss &gt;&gt; offsetOrCSId;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;reading edge :&quot;</span> &lt;&lt; nodeSrc &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; edge &lt;&lt; <span class="stringliteral">&quot; &quot;</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; &lt;&lt; nodeDst &lt;&lt; <span class="stringliteral">&quot; offsetOrCSId=&quot;</span> &lt;&lt; offsetOrCSId &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; addEdge(nodeSrc, nodeDst, offsetOrCSId, edge);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">if</span> (!line.empty())</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;format not supported, token count = &quot;</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; &lt;&lt; token_count &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;format not supported&quot;</span>);</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; }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; myfile.close();</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;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Unable to open file\n&quot;</span>;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> lower_bound = <a class="code" href="PAGBuilderFromFile_8cpp.html#a1af3947dbaf1ad4364bc4818f70ead40">gepNodeNumIndex</a>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; lower_bound; i++)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; pag-&gt;incNodeNum();</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; pag-&gt;setNodeNumAfterPAGBuild(pag-&gt;getTotalNodeNum());</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">return</span> pag;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;}</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classSVF_1_1PAGBuilderFromFile.html#ac34cd4f9426da0325e67bc1b3d7bcecd"> 146</a></span>&#160;<span class="keywordtype">void</span> PAGBuilderFromFile::addEdge(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcID, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstID,</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="namespaceSVF.html#abe09d99af006554a5c00803e9a89f9a6">s64_t</a> offsetOrCSId, std::string edge)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;{</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="comment">//check whether these two nodes available</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* srcNode = pag-&gt;getGNode(srcID);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* dstNode = pag-&gt;getGNode(dstID);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;ValVar&gt;(dstNode) &amp;&amp; <span class="stringliteral">&quot;dst not an value node?&quot;</span>);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span>(edge==<span class="stringliteral">&quot;addr&quot;</span>)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;ObjVar&gt;(srcNode) &amp;&amp; <span class="stringliteral">&quot;src not an value node?&quot;</span>);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!SVFUtil::isa&lt;ObjVar&gt;(srcNode) &amp;&amp; <span class="stringliteral">&quot;src not an object node?&quot;</span>);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;addr&quot;</span>)</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; pag-&gt;addAddrStmt(srcID, dstID);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;copy&quot;</span>)</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; pag-&gt;addCopyStmt(srcID, dstID);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;load&quot;</span>)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; pag-&gt;addLoadStmt(srcID, dstID);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;store&quot;</span>)</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; pag-&gt;addStoreStmt(srcID, dstID, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;gep&quot;</span>)</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; pag-&gt;addNormalGepStmt(srcID, dstID, <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offsetOrCSId));</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;variant-gep&quot;</span>)</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; pag-&gt;addVariantGepStmt(srcID, dstID, <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offsetOrCSId));</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;call&quot;</span>)</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; pag-&gt;addEdge(srcNode, dstNode, <span class="keyword">new</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>(srcNode, dstNode, <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;ret&quot;</span>)</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; pag-&gt;addEdge(srcNode, dstNode, <span class="keyword">new</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>(srcNode, dstNode, <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;cmp&quot;</span>)</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; pag-&gt;addCmpStmt(srcID, dstID, dstID, dstID);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;binary-op&quot;</span>)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; pag-&gt;addBinaryOPStmt(srcID, dstID, dstID, dstID);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;unary-op&quot;</span>)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; pag-&gt;addUnaryOPStmt(srcID, dstID, dstID);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;phi&quot;</span>)</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; pag-&gt;addPhiStmt(srcID, dstID);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;branch&quot;</span>){</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;fix successors here!&quot;</span>);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="comment">//pag-&gt;addBranchStmt(srcID, dstID, nullptr);</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;format not support, can not create such edge&quot;</span>);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;}</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00415">SymbolTableInfo.h:415</a></div></div>
69
+ <a href="PAGBuilderFromFile_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">//===- PAGBuilderFromFile.cpp -- SVFIR builder-------------------------------//</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-2018&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"> * PAGBuilderFromFile.cpp</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"> * Created on: 20 Sep. 2018</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: 136884</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PAGBuilderFromFile_8h.html">MemoryModel/PAGBuilderFromFile.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;fstream&gt;</span> <span class="comment">// for PAGBuilderFromFile</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span> <span class="comment">// for PAGBuilderFromFile</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span> <span class="comment">// for PAGBuilderFromFile</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="namespacestd.html">std</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="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="PAGBuilderFromFile_8cpp.html#a1af3947dbaf1ad4364bc4818f70ead40"> 38</a></span>&#160;<span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="PAGBuilderFromFile_8cpp.html#a1af3947dbaf1ad4364bc4818f70ead40">gepNodeNumIndex</a> = 100000;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment"> * You can build a SVFIR from a file written by yourself</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment"> * The file should follow the format:</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment"> * Node: nodeID Nodetype</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="comment"> * Edge: nodeID edgetype NodeID Offset</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment"> * like:</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">5 o</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment">6 v</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment">7 v</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">8 v</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">9 v</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">5 addr 6 0</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment">6 gep 7 4</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment">7 copy 8 0</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment">6 store 8 0</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment">8 load 9 0</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1PAGBuilderFromFile.html#ac5a5058088d03fc9e0e8a0ed8b4367aa"> 59</a></span>&#160;<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* PAGBuilderFromFile::build()</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">string</span> line;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; ifstream myfile(file.c_str());</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">if</span> (myfile.is_open())</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">while</span> (myfile.good())</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; getline(myfile, line);</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; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> token_count = 0;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">string</span> tmps;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">while</span> (ss.good())</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; ss &gt;&gt; tmps;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; token_count++;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">if</span> (token_count == 0)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">continue</span>;</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (token_count == 2)</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordtype">string</span> nodetype;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; ss &gt;&gt; nodeId;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; ss &gt;&gt; nodetype;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;reading node :&quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">if</span> (nodetype == <span class="stringliteral">&quot;v&quot;</span>)</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; pag-&gt;addDummyValNode(nodeId);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nodetype == <span class="stringliteral">&quot;o&quot;</span>)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = pag-&gt;addDummyMemObj(nodeId, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; pag-&gt;addFIObjNode(mem);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;format not support, pls specify node type&quot;</span>);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</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; <span class="comment">// do consider gep edge</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (token_count == 4)</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeSrc;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeDst;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="namespaceSVF.html#abe09d99af006554a5c00803e9a89f9a6">s64_t</a> offsetOrCSId;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordtype">string</span> edge;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; ss &gt;&gt; nodeSrc;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; ss &gt;&gt; edge;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; ss &gt;&gt; nodeDst;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; ss &gt;&gt; offsetOrCSId;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;reading edge :&quot;</span> &lt;&lt; nodeSrc &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; edge &lt;&lt; <span class="stringliteral">&quot; &quot;</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; &lt;&lt; nodeDst &lt;&lt; <span class="stringliteral">&quot; offsetOrCSId=&quot;</span> &lt;&lt; offsetOrCSId &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; addEdge(nodeSrc, nodeDst, offsetOrCSId, edge);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">if</span> (!line.empty())</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;format not supported, token count = &quot;</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; &lt;&lt; token_count &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;format not supported&quot;</span>);</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; }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; myfile.close();</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;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Unable to open file\n&quot;</span>;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> lower_bound = <a class="code" href="PAGBuilderFromFile_8cpp.html#a1af3947dbaf1ad4364bc4818f70ead40">gepNodeNumIndex</a>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; lower_bound; i++)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; pag-&gt;incNodeNum();</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; pag-&gt;setNodeNumAfterPAGBuild(pag-&gt;getTotalNodeNum());</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">return</span> pag;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;}</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classSVF_1_1PAGBuilderFromFile.html#ac34cd4f9426da0325e67bc1b3d7bcecd"> 146</a></span>&#160;<span class="keywordtype">void</span> PAGBuilderFromFile::addEdge(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcID, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstID,</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="namespaceSVF.html#abe09d99af006554a5c00803e9a89f9a6">s64_t</a> offsetOrCSId, std::string edge)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;{</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="comment">//check whether these two nodes available</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* srcNode = pag-&gt;getGNode(srcID);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* dstNode = pag-&gt;getGNode(dstID);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;ValVar&gt;(dstNode) &amp;&amp; <span class="stringliteral">&quot;dst not an value node?&quot;</span>);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span>(edge==<span class="stringliteral">&quot;addr&quot;</span>)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;ObjVar&gt;(srcNode) &amp;&amp; <span class="stringliteral">&quot;src not an value node?&quot;</span>);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!SVFUtil::isa&lt;ObjVar&gt;(srcNode) &amp;&amp; <span class="stringliteral">&quot;src not an object node?&quot;</span>);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;addr&quot;</span>)</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; pag-&gt;addAddrStmt(srcID, dstID);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;copy&quot;</span>)</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; pag-&gt;addCopyStmt(srcID, dstID);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;load&quot;</span>)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; pag-&gt;addLoadStmt(srcID, dstID);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;store&quot;</span>)</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; pag-&gt;addStoreStmt(srcID, dstID, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;gep&quot;</span>)</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; pag-&gt;addNormalGepStmt(srcID, dstID, <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offsetOrCSId));</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;variant-gep&quot;</span>)</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; pag-&gt;addVariantGepStmt(srcID, dstID, <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offsetOrCSId));</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;call&quot;</span>)</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; pag-&gt;addEdge(srcNode, dstNode, <span class="keyword">new</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>(srcNode, dstNode, <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;ret&quot;</span>)</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; pag-&gt;addEdge(srcNode, dstNode, <span class="keyword">new</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>(srcNode, dstNode, <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;cmp&quot;</span>)</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; pag-&gt;addCmpStmt(srcID, dstID, dstID, dstID);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;binary-op&quot;</span>)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; pag-&gt;addBinaryOPStmt(srcID, dstID, dstID, dstID);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;unary-op&quot;</span>)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; pag-&gt;addUnaryOPStmt(srcID, dstID, dstID);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;phi&quot;</span>)</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;fix phi here!&quot;</span>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;select&quot;</span>)</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;fix select here!&quot;</span>);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge == <span class="stringliteral">&quot;branch&quot;</span>){</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;fix successors here!&quot;</span>);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="comment">//pag-&gt;addBranchStmt(srcID, dstID, nullptr);</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;format not support, can not create such edge&quot;</span>);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;}</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div><div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00415">SymbolTableInfo.h:415</a></div></div>
70
70
  <div class="ttc" id="classSVF_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#l00529">SVFStatements.h:529</a></div></div>
71
71
  <div class="ttc" id="PAGBuilderFromFile_8cpp_html_a1af3947dbaf1ad4364bc4818f70ead40"><div class="ttname"><a href="PAGBuilderFromFile_8cpp.html#a1af3947dbaf1ad4364bc4818f70ead40">gepNodeNumIndex</a></div><div class="ttdeci">static u32_t gepNodeNumIndex</div><div class="ttdef"><b>Definition:</b> <a href="PAGBuilderFromFile_8cpp_source.html#l00038">PAGBuilderFromFile.cpp:38</a></div></div>
72
72
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>