svf-tools 1.0.334 → 1.0.338

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 (251) hide show
  1. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +7 -7
  3. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +4 -4
  4. package/SVF-doxygen/html/html/Andersen_8h_source.html +2 -2
  5. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +4 -4
  6. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +7 -7
  7. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +4 -4
  8. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +3 -3
  9. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +2 -2
  10. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +3 -3
  11. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +1 -1
  12. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +3 -3
  13. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +3 -3
  14. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +5 -5
  15. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
  16. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +4 -2
  17. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
  18. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +4 -4
  19. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +17 -17
  20. package/SVF-doxygen/html/html/ICFG_8h_source.html +38 -37
  21. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +3 -3
  22. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +3 -3
  23. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/html/MTA_8cpp_source.html +2 -2
  25. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +2 -2
  26. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +1 -1
  27. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
  28. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +2 -2
  29. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +9 -9
  30. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +5 -5
  31. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +24 -27
  32. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +42 -43
  33. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +1 -1
  34. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +1 -1
  35. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp.html +1 -0
  36. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +6 -5
  37. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +40 -40
  38. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +19 -19
  39. package/SVF-doxygen/html/html/SVFIR_8h_source.html +15 -15
  40. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +22 -21
  41. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +47 -47
  42. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +17 -17
  43. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +131 -128
  44. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +7 -7
  45. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +1 -1
  46. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +5 -4
  47. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +3 -3
  48. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +2 -2
  49. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +11 -11
  50. package/SVF-doxygen/html/html/VFGNode_8h_source.html +6 -6
  51. package/SVF-doxygen/html/html/VFG_8cpp_source.html +16 -16
  52. package/SVF-doxygen/html/html/VFG_8h_source.html +9 -9
  53. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
  54. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +2 -2
  55. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
  56. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +187 -188
  57. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +8 -11
  58. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +160 -161
  59. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +4 -7
  60. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +199 -200
  61. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +0 -3
  62. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +202 -203
  63. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +0 -3
  64. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +195 -196
  65. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +0 -3
  66. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +196 -197
  67. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +0 -3
  68. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +205 -206
  69. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -4
  70. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +7 -7
  71. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +193 -194
  72. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +0 -3
  73. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +2 -2
  74. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +116 -117
  75. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +12 -15
  76. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +18 -18
  77. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +3 -3
  78. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +32 -32
  79. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +4 -4
  80. package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode-members.html +3 -3
  81. package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +18 -18
  82. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +2 -2
  83. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar-members.html +37 -40
  84. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +14 -22
  85. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar-members.html +37 -40
  86. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +15 -23
  87. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar-members.html +38 -41
  88. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +15 -23
  89. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +19 -19
  90. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +3 -3
  91. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +104 -105
  92. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +5 -8
  93. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +3 -3
  94. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +182 -183
  95. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +12 -15
  96. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +5 -5
  97. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +3 -3
  98. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar-members.html +37 -40
  99. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +16 -24
  100. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar-members.html +36 -39
  101. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +15 -23
  102. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar-members.html +37 -40
  103. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +21 -29
  104. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +219 -220
  105. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +0 -3
  106. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +180 -181
  107. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +9 -12
  108. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +212 -213
  109. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +17 -20
  110. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +5 -5
  111. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +244 -245
  112. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +7 -10
  113. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
  114. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar-members.html +39 -42
  115. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +39 -47
  116. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +2 -2
  117. package/SVF-doxygen/html/html/classSVF_1_1GepValVar-members.html +37 -40
  118. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +32 -40
  119. package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +27 -26
  120. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +183 -116
  121. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +9 -5
  122. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +9 -9
  123. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +35 -34
  124. package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +2 -2
  125. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  126. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +2 -2
  127. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +1 -1
  128. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +2 -2
  129. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +2 -2
  130. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +2 -2
  131. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +1 -1
  132. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +1 -1
  133. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +4 -4
  134. package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt.html +2 -2
  135. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +1 -1
  136. package/SVF-doxygen/html/html/classSVF_1_1ObjVar-members.html +37 -40
  137. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +34 -42
  138. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +4 -4
  139. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +2 -2
  140. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt-members.html +37 -36
  141. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +27 -3
  142. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +78 -79
  143. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +111 -151
  144. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +2 -2
  145. package/SVF-doxygen/html/html/classSVF_1_1RetPN-members.html +36 -39
  146. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +16 -24
  147. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +1 -1
  148. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +1 -1
  149. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +22 -22
  150. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +122 -115
  151. package/SVF-doxygen/html/html/classSVF_1_1SVFVar-members.html +28 -25
  152. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +185 -107
  153. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +7 -7
  154. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -1
  155. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +171 -172
  156. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +0 -3
  157. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +2 -2
  158. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +13 -9
  159. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +11 -11
  160. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +11 -11
  161. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +2 -2
  162. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +161 -162
  163. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +3 -6
  164. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +17 -17
  165. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +25 -25
  166. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +2 -2
  167. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +18 -18
  168. package/SVF-doxygen/html/html/classSVF_1_1ValVar-members.html +36 -39
  169. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +19 -27
  170. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN-members.html +36 -39
  171. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +16 -24
  172. package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt.html +2 -2
  173. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +254 -255
  174. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +2 -5
  175. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +2 -2
  176. package/SVF-doxygen/html/html/functions_a.html +4 -4
  177. package/SVF-doxygen/html/html/functions_d.html +0 -3
  178. package/SVF-doxygen/html/html/functions_func_d.html +0 -3
  179. package/SVF-doxygen/html/html/functions_func_g.html +1 -1
  180. package/SVF-doxygen/html/html/functions_func_i.html +13 -10
  181. package/SVF-doxygen/html/html/functions_g.html +1 -1
  182. package/SVF-doxygen/html/html/functions_i.html +11 -6
  183. package/SVF-doxygen/html/html/functions_l.html +8 -8
  184. package/SVF-doxygen/html/html/functions_n.html +3 -3
  185. package/SVF-doxygen/html/html/functions_o.html +3 -3
  186. package/SVF-doxygen/html/html/functions_p.html +15 -15
  187. package/SVF-doxygen/html/html/functions_r.html +2 -2
  188. package/SVF-doxygen/html/html/functions_rela.html +59 -1
  189. package/SVF-doxygen/html/html/functions_s.html +15 -12
  190. package/SVF-doxygen/html/html/functions_t.html +7 -7
  191. package/SVF-doxygen/html/html/functions_type.html +2 -2
  192. package/SVF-doxygen/html/html/functions_v.html +5 -4
  193. package/SVF-doxygen/html/html/functions_vars_a.html +1 -1
  194. package/SVF-doxygen/html/html/functions_w.html +9 -5
  195. package/SVF-doxygen/html/html/menudata.js +13 -1
  196. package/SVF-doxygen/html/html/search/all_1.js +2 -2
  197. package/SVF-doxygen/html/html/search/all_10.js +9 -9
  198. package/SVF-doxygen/html/html/search/all_12.js +3 -3
  199. package/SVF-doxygen/html/html/search/all_13.js +9 -9
  200. package/SVF-doxygen/html/html/search/all_14.js +2 -2
  201. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  202. package/SVF-doxygen/html/html/search/all_16.js +2 -2
  203. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  204. package/SVF-doxygen/html/html/search/all_4.js +0 -1
  205. package/SVF-doxygen/html/html/search/all_7.js +1 -1
  206. package/SVF-doxygen/html/html/search/all_9.js +3 -2
  207. package/SVF-doxygen/html/html/search/all_c.js +4 -4
  208. package/SVF-doxygen/html/html/search/all_d.js +1 -1
  209. package/SVF-doxygen/html/html/search/all_e.js +2 -2
  210. package/SVF-doxygen/html/html/search/all_f.js +1 -1
  211. package/SVF-doxygen/html/html/search/functions_3.js +0 -1
  212. package/SVF-doxygen/html/html/search/functions_6.js +1 -1
  213. package/SVF-doxygen/html/html/search/functions_8.js +1 -0
  214. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  215. package/SVF-doxygen/html/html/search/related_4.js +2 -2
  216. package/SVF-doxygen/html/html/search/related_5.js +2 -1
  217. package/SVF-doxygen/html/html/search/related_6.js +1 -4
  218. package/SVF-doxygen/html/html/search/related_7.js +4 -1
  219. package/SVF-doxygen/html/html/search/related_8.js +1 -5
  220. package/SVF-doxygen/html/html/search/related_9.js +6 -2
  221. package/SVF-doxygen/html/html/search/related_a.js +2 -1
  222. package/SVF-doxygen/html/html/search/related_b.html +26 -0
  223. package/SVF-doxygen/html/html/search/related_b.js +5 -0
  224. package/SVF-doxygen/html/html/search/searchdata.js +1 -1
  225. package/SVF-doxygen/html/html/search/typedefs_0.js +1 -1
  226. package/SVF-doxygen/html/html/search/variables_1.js +1 -1
  227. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  228. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  229. package/SVF-doxygen/html/html/search/variables_e.js +1 -1
  230. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  231. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +1 -1
  232. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +1 -1
  233. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
  234. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1ICFGNode_01_5_01_4_01_4.html +1 -1
  235. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ICFGNode_01_5_01_4.html +1 -1
  236. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ICFG_01_5_01_4.html +2 -2
  237. package/SVF-doxygen/html/html/svf-ex_8cpp.html +3 -3
  238. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +3 -3
  239. package/images/svf-stat.pdf +0 -0
  240. package/include/Graphs/ICFG.h +5 -3
  241. package/include/Graphs/ICFGNode.h +3 -3
  242. package/include/MemoryModel/PointerAnalysis.h +0 -3
  243. package/include/MemoryModel/SVFStatements.h +5 -0
  244. package/include/MemoryModel/SVFVariables.h +22 -21
  245. package/lib/Graphs/ICFG.cpp +2 -2
  246. package/lib/MemoryModel/PointerAnalysis.cpp +1 -21
  247. package/lib/MemoryModel/SVFStatements.cpp +10 -1
  248. package/lib/SVF-FE/ICFGBuilder.cpp +16 -2
  249. package/lib/SVF-FE/SVFIRBuilder.cpp +13 -0
  250. package/lib/SVF-FE/SymbolTableBuilder.cpp +16 -3
  251. package/package.json +1 -1
@@ -359,7 +359,7 @@ template&lt;class EdgeIter &gt; </div>
359
359
  <div class="fragment"><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; {</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = SVFIR::getPAG()-&gt;getGNode(n-&gt;getId());</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordtype">bool</span> briefDisplay = Options::BriefConsCGDotGraph;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keywordtype">bool</span> nameDisplay = <span class="keyword">true</span>;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; std::string str;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">if</span> (briefDisplay)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ValVar&gt;(node))</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; {</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keywordflow">if</span> (nameDisplay)</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a54b2a5ed3ed21e54eaf04182f0338333">getValueName</a>();</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; }</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; }</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; {</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="comment">// print the whole value</span></div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;DummyValVar&gt;(node) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(node))</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>());</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;:&quot;</span>;</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; }</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFVar_html"><div class="ttname"><a href="classSVF_1_1SVFVar.html">SVF::SVFVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00046">SVFVariables.h:46</a></div></div>
360
360
  <div class="ttc" id="namespaceSVF_html_a726981481ac082dcda3e4921416b65a0"><div class="ttname"><a href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">SVF::raw_string_ostream</a></div><div class="ttdeci">llvm::raw_string_ostream raw_string_ostream</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
361
361
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a7486fd8e5350879ed1cbd835c0d4e191"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">SVF::SVFUtil::value2String</a></div><div class="ttdeci">const std::string value2String(const Value *value)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00388">SVFUtil.cpp:388</a></div></div>
362
- <div class="ttc" id="classSVF_1_1SVFVar_html_afaa33caa8d2a306f6741d9d066243e40"><div class="ttname"><a href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">SVF::SVFVar::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get/has methods of the components. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00094">SVFVariables.h:94</a></div></div>
362
+ <div class="ttc" id="classSVF_1_1SVFVar_html_afaa33caa8d2a306f6741d9d066243e40"><div class="ttname"><a href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">SVF::SVFVar::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get/has methods of the components. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00097">SVFVariables.h:97</a></div></div>
363
363
  <div class="ttc" id="classSVF_1_1SVFVar_html_a54b2a5ed3ed21e54eaf04182f0338333"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a54b2a5ed3ed21e54eaf04182f0338333">SVF::SVFVar::getValueName</a></div><div class="ttdeci">virtual const std::string getValueName() const =0</div><div class="ttdoc">Get name of the LLVM value. </div></div>
364
364
  <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00165">GenericGraph.h:165</a></div></div>
365
365
  </div><!-- fragment -->
@@ -400,7 +400,7 @@ template&lt;class EdgeIter &gt; </div>
400
400
  <p>Return the label of an ICFG node. </p>
401
401
 
402
402
  <p class="definition">Definition at line <a class="el" href="ICFG_8cpp_source.html#l00467">467</a> of file <a class="el" href="ICFG_8cpp_source.html">ICFG.cpp</a>.</p>
403
- <div class="fragment"><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; {</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; std::string str;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;NodeID: &quot;</span> &lt;&lt; node-&gt;getId() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1IntraBlockNode.html">IntraBlockNode</a>* bNode = SVFUtil::dyn_cast&lt;IntraBlockNode&gt;(node))</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; {</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;IntraBlockNode ID: &quot;</span> &lt;&lt; bNode-&gt;getId() &lt;&lt; <span class="stringliteral">&quot; \t&quot;</span>;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVFIR::SVFStmtList</a>&amp; edges = SVFIR::getPAG()-&gt;getPTASVFStmtList(bNode);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">if</span> (edges.empty()) {</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; rawstr &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(bNode-&gt;getInst()) &lt;&lt; <span class="stringliteral">&quot; \t&quot;</span>;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">for</span> (SVFIR::SVFStmtList::iterator it = edges.begin(), eit = edges.end(); it != eit; ++it)</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; {</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *it;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; rawstr &lt;&lt; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#ad0b4dbe87e009518f22360c48b0d0c22">toString</a>();</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; }</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; }</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; {fun: &quot;</span> &lt;&lt; bNode-&gt;getFun()-&gt;getName() &lt;&lt; <span class="stringliteral">&quot;}&quot;</span>;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FunEntryBlockNode.html">FunEntryBlockNode</a>* <a class="code" href="cuddInt_8c.html#a936a27e51e66afb57c2b3a12d78a238e">entry</a> = SVFUtil::dyn_cast&lt;FunEntryBlockNode&gt;(node))</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; rawstr &lt;&lt; <a class="code" href="cuddInt_8c.html#a936a27e51e66afb57c2b3a12d78a238e">entry</a>-&gt;toString();</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FunExitBlockNode.html">FunExitBlockNode</a>* <a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a> = SVFUtil::dyn_cast&lt;FunExitBlockNode&gt;(node))</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; {</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; rawstr &lt;&lt; <a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a>-&gt;toString();</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; }</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* call = SVFUtil::dyn_cast&lt;CallBlockNode&gt;(node))</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; {</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; rawstr &lt;&lt; call-&gt;toString();</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* ret = SVFUtil::dyn_cast&lt;RetBlockNode&gt;(node))</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; {</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; rawstr &lt;&lt; ret-&gt;toString();</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; }</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GlobalBlockNode.html">GlobalBlockNode</a>* glob = SVFUtil::dyn_cast&lt;GlobalBlockNode&gt;(node) )</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; {</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVFIR::SVFStmtList</a>&amp; edges = SVFIR::getPAG()-&gt;getPTASVFStmtList(glob);</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">for</span> (SVFIR::SVFStmtList::iterator it = edges.begin(), eit = edges.end(); it != eit; ++it)</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *it;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; rawstr &lt;&lt; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#ad0b4dbe87e009518f22360c48b0d0c22">toString</a>();</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;what else kinds of nodes do we have??&quot;</span>);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; }</div><div class="ttc" id="util_8h_html_a43b6ea6be735bb828bc062c70cadeff8"><div class="ttname"><a href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a></div><div class="ttdeci">VOID_OR_INT exit()</div></div>
403
+ <div class="fragment"><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; {</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; std::string str;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;NodeID: &quot;</span> &lt;&lt; node-&gt;getId() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1IntraBlockNode.html">IntraBlockNode</a>* bNode = SVFUtil::dyn_cast&lt;IntraBlockNode&gt;(node))</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; {</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;IntraBlockNode ID: &quot;</span> &lt;&lt; bNode-&gt;getId() &lt;&lt; <span class="stringliteral">&quot; \t&quot;</span>;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVFIR::SVFStmtList</a>&amp; edges = SVFIR::getPAG()-&gt;getSVFStmtList(bNode);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">if</span> (edges.empty()) {</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; rawstr &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(bNode-&gt;getInst()) &lt;&lt; <span class="stringliteral">&quot; \t&quot;</span>;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">for</span> (SVFIR::SVFStmtList::iterator it = edges.begin(), eit = edges.end(); it != eit; ++it)</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; {</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *it;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; rawstr &lt;&lt; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#ad0b4dbe87e009518f22360c48b0d0c22">toString</a>();</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; }</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; }</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; {fun: &quot;</span> &lt;&lt; bNode-&gt;getFun()-&gt;getName() &lt;&lt; <span class="stringliteral">&quot;}&quot;</span>;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FunEntryBlockNode.html">FunEntryBlockNode</a>* <a class="code" href="cuddInt_8c.html#a936a27e51e66afb57c2b3a12d78a238e">entry</a> = SVFUtil::dyn_cast&lt;FunEntryBlockNode&gt;(node))</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; rawstr &lt;&lt; <a class="code" href="cuddInt_8c.html#a936a27e51e66afb57c2b3a12d78a238e">entry</a>-&gt;toString();</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FunExitBlockNode.html">FunExitBlockNode</a>* <a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a> = SVFUtil::dyn_cast&lt;FunExitBlockNode&gt;(node))</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; {</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; rawstr &lt;&lt; <a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a>-&gt;toString();</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; }</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* call = SVFUtil::dyn_cast&lt;CallBlockNode&gt;(node))</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; {</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; rawstr &lt;&lt; call-&gt;toString();</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* ret = SVFUtil::dyn_cast&lt;RetBlockNode&gt;(node))</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; {</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; rawstr &lt;&lt; ret-&gt;toString();</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; }</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GlobalBlockNode.html">GlobalBlockNode</a>* glob = SVFUtil::dyn_cast&lt;GlobalBlockNode&gt;(node) )</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; {</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVFIR::SVFStmtList</a>&amp; edges = SVFIR::getPAG()-&gt;getSVFStmtList(glob);</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">for</span> (SVFIR::SVFStmtList::iterator it = edges.begin(), eit = edges.end(); it != eit; ++it)</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *it;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; rawstr &lt;&lt; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#ad0b4dbe87e009518f22360c48b0d0c22">toString</a>();</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;what else kinds of nodes do we have??&quot;</span>);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; }</div><div class="ttc" id="util_8h_html_a43b6ea6be735bb828bc062c70cadeff8"><div class="ttname"><a href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a></div><div class="ttdeci">VOID_OR_INT exit()</div></div>
404
404
  <div class="ttc" id="classSVF_1_1SVFIR_html_a6bc360d2604ae4a0af74530b263b10d9"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVF::SVFIR::SVFStmtList</a></div><div class="ttdeci">std::vector&lt; const SVFStmt * &gt; SVFStmtList</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00056">SVFIR.h:56</a></div></div>
405
405
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
406
406
  <div class="ttc" id="classSVF_1_1GlobalBlockNode_html"><div class="ttname"><a href="classSVF_1_1GlobalBlockNode.html">SVF::GlobalBlockNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00142">ICFGNode.h:142</a></div></div>
@@ -383,7 +383,7 @@ template&lt;class EdgeIter &gt; </div>
383
383
  <p class="definition">Definition at line <a class="el" href="IRGraph_8cpp_source.html#l00150">150</a> of file <a class="el" href="IRGraph_8cpp_source.html">IRGraph.cpp</a>.</p>
384
384
  <div class="fragment"><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; std::string str;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">// print function info</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a53439a493963d16e5a1b5ed36ab6d33e">getFunction</a>())</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;[&quot;</span> &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a53439a493963d16e5a1b5ed36ab6d33e">getFunction</a>()-&gt;getName() &lt;&lt; <span class="stringliteral">&quot;] &quot;</span>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ada932ef2ae0a3e712174df479c35b0dd">toString</a>();</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> rawstr.str();</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; }</div><div class="ttc" id="classSVF_1_1SVFVar_html_ada932ef2ae0a3e712174df479c35b0dd"><div class="ttname"><a href="classSVF_1_1SVFVar.html#ada932ef2ae0a3e712174df479c35b0dd">SVF::SVFVar::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8cpp_source.html#l00100">SVFVariables.cpp:100</a></div></div>
385
385
  <div class="ttc" id="namespaceSVF_html_a726981481ac082dcda3e4921416b65a0"><div class="ttname"><a href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">SVF::raw_string_ostream</a></div><div class="ttdeci">llvm::raw_string_ostream raw_string_ostream</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
386
- <div class="ttc" id="classSVF_1_1SVFVar_html_a53439a493963d16e5a1b5ed36ab6d33e"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a53439a493963d16e5a1b5ed36ab6d33e">SVF::SVFVar::getFunction</a></div><div class="ttdeci">virtual const Function * getFunction() const</div><div class="ttdoc">Return the function that this SVFVar resides in. Return nullptr if it is a global or constantexpr nod...</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00146">SVFVariables.h:146</a></div></div>
386
+ <div class="ttc" id="classSVF_1_1SVFVar_html_a53439a493963d16e5a1b5ed36ab6d33e"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a53439a493963d16e5a1b5ed36ab6d33e">SVF::SVFVar::getFunction</a></div><div class="ttdeci">virtual const Function * getFunction() const</div><div class="ttdoc">Return the function that this SVFVar resides in. Return nullptr if it is a global or constantexpr nod...</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00149">SVFVariables.h:149</a></div></div>
387
387
  </div><!-- fragment -->
388
388
  </div>
389
389
  </div>
@@ -356,7 +356,7 @@ template&lt;class EdgeIter &gt; </div>
356
356
  <p class="definition">Definition at line <a class="el" href="OfflineConsG_8cpp_source.html#l00199">199</a> of file <a class="el" href="OfflineConsG_8cpp_source.html">OfflineConsG.cpp</a>.</p>
357
357
  <div class="fragment"><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; std::string str;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">if</span> (SVFIR::getPAG()-&gt;getGNode(n-&gt;getId()))</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; {</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *node = SVFIR::getPAG()-&gt;getGNode(n-&gt;getId());</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordtype">bool</span> briefDisplay = <span class="keyword">true</span>;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordtype">bool</span> nameDisplay = <span class="keyword">true</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;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">if</span> (briefDisplay)</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ValVar&gt;(node))</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; <span class="keywordflow">if</span> (nameDisplay)</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a54b2a5ed3ed21e54eaf04182f0338333">getValueName</a>();</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; {</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// print the whole value</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;DummyValVar&gt;(node) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(node))</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; rawstr &lt;&lt; *node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>();</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; rawstr&lt;&lt; n-&gt;getId();</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFVar_html"><div class="ttname"><a href="classSVF_1_1SVFVar.html">SVF::SVFVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00046">SVFVariables.h:46</a></div></div>
358
358
  <div class="ttc" id="namespaceSVF_html_a726981481ac082dcda3e4921416b65a0"><div class="ttname"><a href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">SVF::raw_string_ostream</a></div><div class="ttdeci">llvm::raw_string_ostream raw_string_ostream</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
359
- <div class="ttc" id="classSVF_1_1SVFVar_html_afaa33caa8d2a306f6741d9d066243e40"><div class="ttname"><a href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">SVF::SVFVar::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get/has methods of the components. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00094">SVFVariables.h:94</a></div></div>
359
+ <div class="ttc" id="classSVF_1_1SVFVar_html_afaa33caa8d2a306f6741d9d066243e40"><div class="ttname"><a href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">SVF::SVFVar::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get/has methods of the components. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00097">SVFVariables.h:97</a></div></div>
360
360
  <div class="ttc" id="classSVF_1_1SVFVar_html_a54b2a5ed3ed21e54eaf04182f0338333"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a54b2a5ed3ed21e54eaf04182f0338333">SVF::SVFVar::getValueName</a></div><div class="ttdeci">virtual const std::string getValueName() const =0</div><div class="ttdoc">Get name of the LLVM value. </div></div>
361
361
  <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00165">GenericGraph.h:165</a></div></div>
362
362
  </div><!-- fragment -->
@@ -85,7 +85,7 @@ struct llvm::GraphTraits&lt; Inverse&lt; SVF::ICFGNode * &gt; &gt;</h3>
85
85
 
86
86
  <p>Inverse GraphTraits specializations for call graph node, it is used for inverse traversal. </p>
87
87
 
88
- <p class="definition">Definition at line <a class="el" href="ICFG_8h_source.html#l00282">282</a> of file <a class="el" href="ICFG_8h_source.html">ICFG.h</a>.</p>
88
+ <p class="definition">Definition at line <a class="el" href="ICFG_8h_source.html#l00284">284</a> of file <a class="el" href="ICFG_8h_source.html">ICFG.h</a>.</p>
89
89
  </div><hr/>The documentation for this struct was generated from the following file:<ul>
90
90
  <li>/home/runner/work/SVF/SVF/include/Graphs/<a class="el" href="ICFG_8h_source.html">ICFG.h</a></li>
91
91
  </ul>
@@ -81,7 +81,7 @@ Inheritance diagram for llvm::GraphTraits&lt; SVF::ICFGNode * &gt;:</div>
81
81
  struct llvm::GraphTraits&lt; SVF::ICFGNode * &gt;</h3>
82
82
 
83
83
 
84
- <p class="definition">Definition at line <a class="el" href="ICFG_8h_source.html#l00276">276</a> of file <a class="el" href="ICFG_8h_source.html">ICFG.h</a>.</p>
84
+ <p class="definition">Definition at line <a class="el" href="ICFG_8h_source.html#l00278">278</a> of file <a class="el" href="ICFG_8h_source.html">ICFG.h</a>.</p>
85
85
  </div><hr/>The documentation for this struct was generated from the following file:<ul>
86
86
  <li>/home/runner/work/SVF/SVF/include/Graphs/<a class="el" href="ICFG_8h_source.html">ICFG.h</a></li>
87
87
  </ul>
@@ -90,7 +90,7 @@ Public Types</h2></td></tr>
90
90
  struct llvm::GraphTraits&lt; SVF::ICFG * &gt;</h3>
91
91
 
92
92
 
93
- <p class="definition">Definition at line <a class="el" href="ICFG_8h_source.html#l00286">286</a> of file <a class="el" href="ICFG_8h_source.html">ICFG.h</a>.</p>
93
+ <p class="definition">Definition at line <a class="el" href="ICFG_8h_source.html#l00288">288</a> of file <a class="el" href="ICFG_8h_source.html">ICFG.h</a>.</p>
94
94
  </div><h2 class="groupheader">Member Typedef Documentation</h2>
95
95
  <a id="a56fc8804dac855c62d6d7d3842b6fff4"></a>
96
96
  <h2 class="memtitle"><span class="permalink"><a href="#a56fc8804dac855c62d6d7d3842b6fff4">&#9670;&nbsp;</a></span>NodeRef</h2>
@@ -104,7 +104,7 @@ struct llvm::GraphTraits&lt; SVF::ICFG * &gt;</h3>
104
104
  </table>
105
105
  </div><div class="memdoc">
106
106
 
107
- <p class="definition">Definition at line <a class="el" href="ICFG_8h_source.html#l00288">288</a> of file <a class="el" href="ICFG_8h_source.html">ICFG.h</a>.</p>
107
+ <p class="definition">Definition at line <a class="el" href="ICFG_8h_source.html#l00290">290</a> of file <a class="el" href="ICFG_8h_source.html">ICFG.h</a>.</p>
108
108
 
109
109
  </div>
110
110
  </div>
@@ -210,7 +210,7 @@ Functions</h2></td></tr>
210
210
 
211
211
  <p class="definition">Definition at line <a class="el" href="svf-ex_8cpp_source.html#l00145">145</a> of file <a class="el" href="svf-ex_8cpp_source.html">svf-ex.cpp</a>.</p>
212
212
  <div class="fragment"><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;{</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordtype">int</span> arg_num = 0;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordtype">char</span> **arg_value = <span class="keyword">new</span> <span class="keywordtype">char</span>*[argc];</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; std::vector&lt;std::string&gt; moduleNameVec;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a62ca9a79ce7b6960e3fc42d8b183bd50">SVFUtil::processArguments</a>(argc, argv, arg_num, arg_value, moduleNameVec);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; cl::ParseCommandLineOptions(arg_num, arg_value,</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="stringliteral">&quot;Whole Program Points-to Analysis\n&quot;</span>);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">if</span> (Options::WriteAnder == <span class="stringliteral">&quot;ir_annotator&quot;</span>)</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; LLVMModuleSet::getLLVMModuleSet()-&gt;preProcessBCs(moduleNameVec);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = LLVMModuleSet::getLLVMModuleSet()-&gt;buildSVFModule(moduleNameVec);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#aa03ab5272652290f30870c6e2d053d98">buildSymbolTableInfo</a>();</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html">SVFIRBuilder</a> builder;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = builder.<a class="code" href="classSVF_1_1SVFIRBuilder.html#aa6d56f9580f76fd09d25ce6cf7541e98">build</a>(svfModule);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>* ander = AndersenWaveDiff::createAndersenWaveDiff(pag);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph = ander-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>();</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg = pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="classSVF_1_1VFG.html">VFG</a>* vfg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VFG.html">VFG</a>(callgraph);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="classSVF_1_1SVFGBuilder.html">SVFGBuilder</a> svfBuilder(<span class="keyword">true</span>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* svfg = svfBuilder.buildFullSVFGWithoutOPT(ander);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">// clean up memory</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keyword">delete</span> vfg;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keyword">delete</span> svfg;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; AndersenWaveDiff::releaseAndersenWaveDiff();</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; SVFIR::releaseSVFIR();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; LLVMModuleSet::getLLVMModuleSet()-&gt;dumpModulesToFile(<span class="stringliteral">&quot;.svf.bc&quot;</span>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a2f8e91c075d90be66412a079fe73e936">SVF::LLVMModuleSet::releaseLLVMModuleSet</a>();</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; llvm::llvm_shutdown();</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;}</div><div class="ttc" id="classSVF_1_1VFG_html"><div class="ttname"><a href="classSVF_1_1VFG.html">SVF::VFG</a></div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00050">VFG.h:50</a></div></div>
213
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aa6d56f9580f76fd09d25ce6cf7541e98"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aa6d56f9580f76fd09d25ce6cf7541e98">SVF::SVFIRBuilder::build</a></div><div class="ttdeci">virtual SVFIR * build(SVFModule *svfModule)</div><div class="ttdoc">Start building SVFIR here. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00046">SVFIRBuilder.cpp:46</a></div></div>
213
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aa6d56f9580f76fd09d25ce6cf7541e98"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aa6d56f9580f76fd09d25ce6cf7541e98">SVF::SVFIRBuilder::build</a></div><div class="ttdeci">virtual SVFIR * build(SVFModule *svfModule)</div><div class="ttdoc">Start building SVFIR here. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00047">SVFIRBuilder.cpp:47</a></div></div>
214
214
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a62ca9a79ce7b6960e3fc42d8b183bd50"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a62ca9a79ce7b6960e3fc42d8b183bd50">SVF::SVFUtil::processArguments</a></div><div class="ttdeci">void processArguments(int argc, char **argv, int &amp;arg_num, char **arg_value, std::vector&lt; std::string &gt; &amp;moduleNameVec)</div><div class="ttdoc">Parse argument for multi-module analysis. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00369">LLVMUtil.cpp:369</a></div></div>
215
215
  <div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00041">SVFModule.h:41</a></div></div>
216
216
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a7c9b7e5fe37ae31ba84d167945ca57df"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">SVF::PointerAnalysis::getPTACallGraph</a></div><div class="ttdeci">PTACallGraph * getPTACallGraph() const</div><div class="ttdoc">Return call graph. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00178">PointerAnalysis.h:178</a></div></div>
@@ -263,8 +263,8 @@ Functions</h2></td></tr>
263
263
  <div class="ttc" id="classSVF_1_1PointsTo_html_aa53962e561399bf493d1f2b9137356f6"><div class="ttname"><a href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">SVF::PointsTo::begin</a></div><div class="ttdeci">const_iterator begin(void) const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00127">PointsTo.h:127</a></div></div>
264
264
  <div class="ttc" id="namespaceSVF_html_a726981481ac082dcda3e4921416b65a0"><div class="ttname"><a href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">SVF::raw_string_ostream</a></div><div class="ttdeci">llvm::raw_string_ostream raw_string_ostream</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
265
265
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a240219c2dc4f5cc5f85445e18c79b83b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">SVF::PointerAnalysis::getPAG</a></div><div class="ttdeci">SVFIR * getPAG() const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00205">PointerAnalysis.h:205</a></div></div>
266
- <div class="ttc" id="classSVF_1_1SVFVar_html_a1ace69053c2c4436fd78d5624bd0086a"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">SVF::SVFVar::hasValue</a></div><div class="ttdeci">bool hasValue() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00110">SVFVariables.h:110</a></div></div>
267
- <div class="ttc" id="classSVF_1_1SVFVar_html_afaa33caa8d2a306f6741d9d066243e40"><div class="ttname"><a href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">SVF::SVFVar::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get/has methods of the components. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00094">SVFVariables.h:94</a></div></div>
266
+ <div class="ttc" id="classSVF_1_1SVFVar_html_a1ace69053c2c4436fd78d5624bd0086a"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">SVF::SVFVar::hasValue</a></div><div class="ttdeci">bool hasValue() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00113">SVFVariables.h:113</a></div></div>
267
+ <div class="ttc" id="classSVF_1_1SVFVar_html_afaa33caa8d2a306f6741d9d066243e40"><div class="ttname"><a href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">SVF::SVFVar::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get/has methods of the components. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00097">SVFVariables.h:97</a></div></div>
268
268
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph::getGNode</a></div><div class="ttdeci">NodeType * getGNode(NodeID id) const</div><div class="ttdoc">Get a node. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00387">GenericGraph.h:387</a></div></div>
269
269
  <div class="ttc" id="classSVF_1_1PointsTo_html"><div class="ttname"><a href="classSVF_1_1PointsTo.html">SVF::PointsTo</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00027">PointsTo.h:27</a></div></div>
270
270
  <div class="ttc" id="classSVF_1_1PointsTo_html_a8f741cdffbf3c5fe0f602cdca677dee6"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">SVF::PointsTo::end</a></div><div class="ttdeci">const_iterator end(void) const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00128">PointsTo.h:128</a></div></div>
@@ -72,7 +72,7 @@ $(function() {
72
72
  <div class="ttc" id="classSVF_1_1SVFGBuilder_html_a7a43ae081645eb74fa48c136548f0809"><div class="ttname"><a href="classSVF_1_1SVFGBuilder.html#a7a43ae081645eb74fa48c136548f0809">SVF::SVFGBuilder::buildFullSVFGWithoutOPT</a></div><div class="ttdeci">SVFG * buildFullSVFGWithoutOPT(BVDataPTAImpl *pta)</div><div class="ttdef"><b>Definition:</b> <a href="SVFGBuilder_8cpp_source.html#l00059">SVFGBuilder.cpp:59</a></div></div>
73
73
  <div class="ttc" id="namespacellvm_html"><div class="ttname"><a href="namespacellvm.html">llvm</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00328">CHG.h:328</a></div></div>
74
74
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a4dfb43679e9fa794ebad99b6584c32ec"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">SVF::PointerAnalysis::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID ptr)=0</div><div class="ttdoc">Get points-to targets of a pointer. It needs to be implemented in child class. </div></div>
75
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aa6d56f9580f76fd09d25ce6cf7541e98"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aa6d56f9580f76fd09d25ce6cf7541e98">SVF::SVFIRBuilder::build</a></div><div class="ttdeci">virtual SVFIR * build(SVFModule *svfModule)</div><div class="ttdoc">Start building SVFIR here. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00046">SVFIRBuilder.cpp:46</a></div></div>
75
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aa6d56f9580f76fd09d25ce6cf7541e98"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aa6d56f9580f76fd09d25ce6cf7541e98">SVF::SVFIRBuilder::build</a></div><div class="ttdeci">virtual SVFIR * build(SVFModule *svfModule)</div><div class="ttdoc">Start building SVFIR here. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00047">SVFIRBuilder.cpp:47</a></div></div>
76
76
  <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>
77
77
  <div class="ttc" id="svf-ex_8cpp_html_a2d332c504284f0bc181289ee67479845"><div class="ttname"><a href="svf-ex_8cpp.html#a2d332c504284f0bc181289ee67479845">InputFilename</a></div><div class="ttdeci">static llvm::cl::opt&lt; std::string &gt; InputFilename(cl::Positional, llvm::cl::desc(&quot;&lt;input bitcode&gt;&quot;), llvm::cl::init(&quot;-&quot;))</div></div>
78
78
  <div class="ttc" id="classSVF_1_1GenericNode_html_aa4f103330118c8976bf95e4bf53416eb"><div class="ttname"><a href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">SVF::GenericNode::OutEdgeBegin</a></div><div class="ttdeci">iterator OutEdgeBegin()</div><div class="ttdoc">iterators </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00202">GenericGraph.h:202</a></div></div>
@@ -102,9 +102,9 @@ $(function() {
102
102
  <div class="ttc" id="classSVF_1_1PTACallGraph_html"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html">SVF::PTACallGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00218">PTACallGraph.h:218</a></div></div>
103
103
  <div class="ttc" id="namespaceSVF_html_a726981481ac082dcda3e4921416b65a0"><div class="ttname"><a href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">SVF::raw_string_ostream</a></div><div class="ttdeci">llvm::raw_string_ostream raw_string_ostream</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
104
104
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a240219c2dc4f5cc5f85445e18c79b83b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">SVF::PointerAnalysis::getPAG</a></div><div class="ttdeci">SVFIR * getPAG() const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00205">PointerAnalysis.h:205</a></div></div>
105
- <div class="ttc" id="classSVF_1_1SVFVar_html_a1ace69053c2c4436fd78d5624bd0086a"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">SVF::SVFVar::hasValue</a></div><div class="ttdeci">bool hasValue() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00110">SVFVariables.h:110</a></div></div>
105
+ <div class="ttc" id="classSVF_1_1SVFVar_html_a1ace69053c2c4436fd78d5624bd0086a"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">SVF::SVFVar::hasValue</a></div><div class="ttdeci">bool hasValue() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00113">SVFVariables.h:113</a></div></div>
106
106
  <div class="ttc" id="classSVF_1_1ICFGNode_html_ac16c5a3227a44d3b9f7c3209156d9df2"><div class="ttname"><a href="classSVF_1_1ICFGNode.html#ac16c5a3227a44d3b9f7c3209156d9df2">SVF::ICFGNode::const_iterator</a></div><div class="ttdeci">ICFGEdge::ICFGEdgeSetTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00066">ICFGNode.h:66</a></div></div>
107
- <div class="ttc" id="classSVF_1_1SVFVar_html_afaa33caa8d2a306f6741d9d066243e40"><div class="ttname"><a href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">SVF::SVFVar::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get/has methods of the components. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00094">SVFVariables.h:94</a></div></div>
107
+ <div class="ttc" id="classSVF_1_1SVFVar_html_afaa33caa8d2a306f6741d9d066243e40"><div class="ttname"><a href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">SVF::SVFVar::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get/has methods of the components. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00097">SVFVariables.h:97</a></div></div>
108
108
  <div class="ttc" id="classSVF_1_1ICFG_html"><div class="ttname"><a href="classSVF_1_1ICFG.html">SVF::ICFG</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00046">ICFG.h:46</a></div></div>
109
109
  <div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
110
110
  <div class="ttc" id="classSVF_1_1VFGNode_html_a3c558955f60c237c558d8faafed781e8"><div class="ttname"><a href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">SVF::VFGNode::const_iterator</a></div><div class="ttdeci">VFGEdge::VFGEdgeSetTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00060">VFGNode.h:60</a></div></div>
Binary file
@@ -46,6 +46,8 @@ typedef GenericGraph<ICFGNode,ICFGEdge> GenericICFGTy;
46
46
  class ICFG : public GenericICFGTy
47
47
  {
48
48
 
49
+ friend class ICFGBuilder;
50
+
49
51
  public:
50
52
 
51
53
  typedef Map<NodeID, ICFGNode *> ICFGNodeIDToNodeMapTy;
@@ -109,7 +111,7 @@ public:
109
111
  /// update ICFG for indirect calls
110
112
  void updateCallGraph(PTACallGraph* callgraph);
111
113
 
112
- public:
114
+ protected:
113
115
  /// Remove a SVFG edge
114
116
  inline void removeICFGEdge(ICFGEdge* edge)
115
117
  {
@@ -157,6 +159,7 @@ public:
157
159
  addGNode(node->getId(),node);
158
160
  }
159
161
 
162
+ public:
160
163
  /// Get a basic block ICFGNode
161
164
  /// TODO:: need to fix the assertions
162
165
  //@{
@@ -172,11 +175,10 @@ public:
172
175
 
173
176
  FunExitBlockNode* getFunExitBlockNode(const SVFFunction* fun);
174
177
 
175
- GlobalBlockNode* getGlobalBlockNode() const
178
+ inline GlobalBlockNode* getGlobalBlockNode() const
176
179
  {
177
180
  return globalBlockNode;
178
181
  }
179
-
180
182
  //@}
181
183
 
182
184
  private:
@@ -365,11 +365,11 @@ class CallBlockNode : public InterBlockNode
365
365
  {
366
366
 
367
367
  public:
368
- typedef std::vector<const SVFVar *> ActualParmVFGNodeVec;
368
+ typedef std::vector<const SVFVar *> ActualParmNodeVec;
369
369
  private:
370
370
  const Instruction* cs;
371
371
  const RetBlockNode* ret;
372
- ActualParmVFGNodeVec APNodes;
372
+ ActualParmNodeVec APNodes;
373
373
  public:
374
374
  CallBlockNode(NodeID id, const Instruction* c) : InterBlockNode(id, FunCallBlock), cs(c), ret(nullptr)
375
375
  {
@@ -415,7 +415,7 @@ public:
415
415
  }
416
416
 
417
417
  /// Return the set of actual parameters
418
- inline const ActualParmVFGNodeVec &getActualParms() const
418
+ inline const ActualParmNodeVec &getActualParms() const
419
419
  {
420
420
  return APNodes;
421
421
  }
@@ -293,9 +293,6 @@ protected:
293
293
  virtual void validateExpectedFailureTests(std::string fun);
294
294
  //@}
295
295
 
296
- /// Whether to dump the graph for debugging purpose
297
- bool dumpGraph();
298
-
299
296
  /// Reset all object node as field-sensitive.
300
297
  void resetObjFieldSensitive();
301
298
 
@@ -753,6 +753,11 @@ public:
753
753
  void addOpVar(SVFVar* op){
754
754
  opVars.push_back(op);
755
755
  }
756
+
757
+ /// Return true if this is a phi at the function exit
758
+ /// to receive one or multiple return values of this function
759
+ bool isFunctionRetPhi() const;
760
+
756
761
  virtual const std::string toString() const override;
757
762
  };
758
763
 
@@ -45,6 +45,9 @@ class SVFVar;
45
45
  typedef GenericNode<SVFVar,SVFStmt> GenericPAGNodeTy;
46
46
  class SVFVar : public GenericPAGNodeTy
47
47
  {
48
+ friend class IRGraph;
49
+ friend class SVFIR;
50
+ friend class VFG;
48
51
 
49
52
  public:
50
53
  /// Nine kinds of SVFIR variables
@@ -162,13 +165,11 @@ public:
162
165
  {
163
166
  return InEdgeKindToSetMap[kind];
164
167
  }
165
-
166
168
  /// Get outgoing SVFIR statements (edges)
167
169
  inline SVFStmt::SVFStmtSetTy& getOutgoingEdges(SVFStmt::PEDGEK kind)
168
170
  {
169
171
  return OutEdgeKindToSetMap[kind];
170
172
  }
171
-
172
173
  /// Has incoming SVFIR statements (edges)
173
174
  inline bool hasIncomingEdges(SVFStmt::PEDGEK kind) const
174
175
  {
@@ -178,18 +179,16 @@ public:
178
179
  else
179
180
  return false;
180
181
  }
181
-
182
- /// Has incoming VariantGepEdges
183
- inline bool hasIncomingVariantGepEdge() const
182
+ /// Has outgoing SVFIR statements (edges)
183
+ inline bool hasOutgoingEdges(SVFStmt::PEDGEK kind) const
184
184
  {
185
- SVFStmt::KindToSVFStmtMapTy::const_iterator it = InEdgeKindToSetMap.find(SVFStmt::VariantGep);
186
- if (it != InEdgeKindToSetMap.end())
187
- {
185
+ SVFStmt::KindToSVFStmtMapTy::const_iterator it = OutEdgeKindToSetMap.find(kind);
186
+ if (it != OutEdgeKindToSetMap.end())
188
187
  return (!it->second.empty());
189
- }
190
- return false;
188
+ else
189
+ return false;
191
190
  }
192
-
191
+
193
192
  /// Get incoming SVFStmt iterator
194
193
  inline SVFStmt::SVFStmtSetTy::iterator getIncomingEdgesBegin(SVFStmt::PEDGEK kind) const
195
194
  {
@@ -206,16 +205,6 @@ public:
206
205
  return it->second.end();
207
206
  }
208
207
 
209
- /// Has outgoing SVFIR statements (edges)
210
- inline bool hasOutgoingEdges(SVFStmt::PEDGEK kind) const
211
- {
212
- SVFStmt::KindToSVFStmtMapTy::const_iterator it = OutEdgeKindToSetMap.find(kind);
213
- if (it != OutEdgeKindToSetMap.end())
214
- return (!it->second.empty());
215
- else
216
- return false;
217
- }
218
-
219
208
  /// Get outgoing SVFStmt iterator
220
209
  inline SVFStmt::SVFStmtSetTy::iterator getOutgoingEdgesBegin(SVFStmt::PEDGEK kind) const
221
210
  {
@@ -233,6 +222,7 @@ public:
233
222
  }
234
223
  //@}
235
224
 
225
+ private:
236
226
  /// add methods of the components
237
227
  //@{
238
228
  inline void addInEdge(SVFStmt* inEdge)
@@ -248,7 +238,18 @@ public:
248
238
  OutEdgeKindToSetMap[kind].insert(outEdge);
249
239
  addOutgoingEdge(outEdge);
250
240
  }
241
+ /// Has incoming VariantGepEdges
242
+ inline bool hasIncomingVariantGepEdge() const
243
+ {
244
+ SVFStmt::KindToSVFStmtMapTy::const_iterator it = InEdgeKindToSetMap.find(SVFStmt::VariantGep);
245
+ if (it != InEdgeKindToSetMap.end())
246
+ {
247
+ return (!it->second.empty());
248
+ }
249
+ return false;
250
+ }
251
251
 
252
+ public:
252
253
  virtual const std::string toString() const;
253
254
 
254
255
  /// Dump to console for debugging
@@ -472,7 +472,7 @@ struct DOTGraphTraits<ICFG*> : public DOTGraphTraits<SVFIR*>
472
472
  if (IntraBlockNode* bNode = SVFUtil::dyn_cast<IntraBlockNode>(node))
473
473
  {
474
474
  rawstr << "IntraBlockNode ID: " << bNode->getId() << " \t";
475
- SVFIR::SVFStmtList& edges = SVFIR::getPAG()->getPTASVFStmtList(bNode);
475
+ SVFIR::SVFStmtList& edges = SVFIR::getPAG()->getSVFStmtList(bNode);
476
476
  if (edges.empty()) {
477
477
  rawstr << value2String(bNode->getInst()) << " \t";
478
478
  } else {
@@ -502,7 +502,7 @@ struct DOTGraphTraits<ICFG*> : public DOTGraphTraits<SVFIR*>
502
502
  }
503
503
  else if (GlobalBlockNode* glob = SVFUtil::dyn_cast<GlobalBlockNode>(node) )
504
504
  {
505
- SVFIR::SVFStmtList& edges = SVFIR::getPAG()->getPTASVFStmtList(glob);
505
+ SVFIR::SVFStmtList& edges = SVFIR::getPAG()->getSVFStmtList(glob);
506
506
  for (SVFIR::SVFStmtList::iterator it = edges.begin(), eit = edges.end(); it != eit; ++it)
507
507
  {
508
508
  const PAGEdge* edge = *it;
@@ -129,18 +129,6 @@ void PointerAnalysis::initialize()
129
129
 
130
130
  svfMod = pag->getModule();
131
131
 
132
- // dump SVFIR
133
- if (dumpGraph())
134
- pag->dump("pag_initial");
135
-
136
- // dump ICFG
137
- if (Options::DumpICFG)
138
- pag->getICFG()->dump("icfg_initial");
139
-
140
- // print to command line of the SVFIR graph
141
- if (Options::PAGPrint)
142
- pag->print();
143
-
144
132
  /// initialise pta call graph for every pointer analysis instance
145
133
  if(Options::EnableThreadCallGraph)
146
134
  {
@@ -192,14 +180,6 @@ void PointerAnalysis::resetObjFieldSensitive()
192
180
  }
193
181
  }
194
182
 
195
- /*!
196
- * Flag in order to dump graph
197
- */
198
- bool PointerAnalysis::dumpGraph()
199
- {
200
- return Options::PAGDotGraph;
201
- }
202
-
203
183
  /*
204
184
  * Dump statistics
205
185
  */
@@ -225,7 +205,7 @@ void PointerAnalysis::finalize()
225
205
 
226
206
  SVFIR* pag = SVFIR::getPAG();
227
207
  // dump SVFIR
228
- if (dumpGraph())
208
+ if (Options::PAGDotGraph)
229
209
  pag->dump("pag_final");
230
210
 
231
211
  // dump ICFG
@@ -90,7 +90,10 @@ const std::string CopyStmt::toString() const{
90
90
  const std::string PhiStmt::toString() const{
91
91
  std::string str;
92
92
  raw_string_ostream rawstr(str);
93
- rawstr << "PhiStmt: [" << getResID() << "<--(" << getOpVarID(0) << "," << getOpVarID(1) << ")]\t";
93
+ rawstr << "PhiStmt: [" << getResID() << "<--(";
94
+ for(const SVFVar* op : getOpndVars())
95
+ rawstr << op->getId() << ",";
96
+ rawstr << ")]\t";
94
97
  if (Options::PAGDotGraphShorter) {
95
98
  rawstr << "\n";
96
99
  }
@@ -263,6 +266,12 @@ NodeID UnaryOPStmt::getResID() const{
263
266
  return getRes()->getId();
264
267
  }
265
268
 
269
+ /// Return true if this is a phi at the function exit
270
+ /// to receive one or multiple return values of this function
271
+ bool PhiStmt::isFunctionRetPhi() const{
272
+ return SVFUtil::isa<RetPN>(getRes());
273
+ }
274
+
266
275
 
267
276
  /// The branch is unconditional if cond is a null value
268
277
  bool BranchStmt::isUnconditional() const {
@@ -185,7 +185,9 @@ void ICFGBuilder::addICFGInterEdges(const Instruction* cs, const SVFFunction* ca
185
185
  icfg->addRetEdge(calleeExitNode, retBlockNode, cs);
186
186
  }
187
187
  }
188
-
188
+ /*
189
+ * Add the global initialization statements immediately after the function entry of main
190
+ */
189
191
  void ICFGBuilder::connectGlobalToProgEntry(SVFModule* svfModule)
190
192
  {
191
193
  const SVFFunction* mainFunc = SVFUtil::getProgEntryFunction(svfModule);
@@ -196,7 +198,19 @@ void ICFGBuilder::connectGlobalToProgEntry(SVFModule* svfModule)
196
198
 
197
199
  FunEntryBlockNode* entryNode = icfg->getFunEntryBlockNode(mainFunc);
198
200
  GlobalBlockNode* globalNode = icfg->getGlobalBlockNode();
199
- IntraCFGEdge* intraEdge = new IntraCFGEdge(globalNode, entryNode);
201
+
202
+ std::vector<ICFGEdge*> toBeRemovedEdges;
203
+ for(ICFGEdge* edge : entryNode->getOutEdges())
204
+ toBeRemovedEdges.push_back(edge);
205
+
206
+ for(ICFGEdge* edge : toBeRemovedEdges){
207
+ assert(SVFUtil::isa<IntraCFGEdge>(edge) && "the outgoing edge of FunEntryBlockNode is not an intraCFGEdge?");
208
+ icfg->removeICFGEdge(edge);
209
+ IntraCFGEdge* intraEdge = new IntraCFGEdge(globalNode, edge->getDstNode());
210
+ icfg->addICFGEdge(intraEdge);
211
+ }
212
+
213
+ IntraCFGEdge* intraEdge = new IntraCFGEdge(entryNode, globalNode);
200
214
  icfg->addICFGEdge(intraEdge);
201
215
  }
202
216