svf-tools 1.0.348 → 1.0.352

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 (583) hide show
  1. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +6 -5
  2. package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +2 -2
  3. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +16 -16
  4. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +14 -14
  5. package/SVF-doxygen/html/html/Andersen_8h_source.html +13 -13
  6. package/SVF-doxygen/html/html/CHG_8h_source.html +7 -7
  7. package/SVF-doxygen/html/html/CPPUtil_8cpp.html +3 -3
  8. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +3 -3
  9. package/SVF-doxygen/html/html/CPPUtil_8h_source.html +1 -1
  10. package/SVF-doxygen/html/html/CSC_8cpp_source.html +4 -4
  11. package/SVF-doxygen/html/html/CSC_8h_source.html +3 -3
  12. package/SVF-doxygen/html/html/Conditions_8cpp_source.html +2 -2
  13. package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +4 -4
  14. package/SVF-doxygen/html/html/ConsGNode_8h_source.html +7 -7
  15. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +45 -46
  16. package/SVF-doxygen/html/html/ConsG_8h_source.html +22 -22
  17. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +10 -8
  18. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +5 -5
  19. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +2 -2
  20. package/SVF-doxygen/html/html/DCHG_8h_source.html +4 -4
  21. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +4 -4
  22. package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
  23. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +2 -2
  25. package/SVF-doxygen/html/html/DDAStat_8h_source.html +1 -1
  26. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +1 -1
  27. package/SVF-doxygen/html/html/DPItem_8h_source.html +1 -1
  28. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +4 -2
  29. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
  30. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +6 -6
  31. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp.html +2 -2
  32. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +24 -22
  33. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +17 -17
  34. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +15 -14
  35. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +25 -25
  36. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +7 -8
  37. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +3 -3
  38. package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +2 -2
  39. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +2 -2
  40. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +5 -5
  41. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +4 -4
  42. package/SVF-doxygen/html/html/IRGraph_8h_source.html +7 -8
  43. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +2 -2
  44. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +13 -6
  45. package/SVF-doxygen/html/html/LocationSet_8h_source.html +12 -14
  46. package/SVF-doxygen/html/html/MHP_8cpp.html +2 -2
  47. package/SVF-doxygen/html/html/MHP_8cpp_source.html +2 -2
  48. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +4 -5
  49. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +2 -2
  50. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +2 -2
  51. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +8 -8
  52. package/SVF-doxygen/html/html/MemRegion_8h_source.html +5 -6
  53. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
  54. package/SVF-doxygen/html/html/MemSSA_8h_source.html +2 -2
  55. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +1 -1
  56. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +4 -4
  57. package/SVF-doxygen/html/html/PAGBuilderFromFile_8h_source.html +3 -3
  58. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +2 -2
  59. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +4 -5
  60. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +9 -10
  61. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
  62. package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +1 -1
  63. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +3 -3
  64. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +3 -3
  65. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +3 -4
  66. package/SVF-doxygen/html/html/SVFBasicTypes_8h.html +4 -4
  67. package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +5 -5
  68. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +2 -2
  69. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +2 -3
  70. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +8 -8
  71. package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
  72. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +12 -12
  73. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +53 -55
  74. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +39 -41
  75. package/SVF-doxygen/html/html/SVFIR_8h_source.html +38 -41
  76. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +22 -24
  77. package/SVF-doxygen/html/html/SVFStatements_8h.html +0 -4
  78. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +150 -160
  79. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
  80. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +101 -100
  81. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
  82. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +2 -2
  83. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +6 -6
  84. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +3 -4
  85. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
  86. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
  87. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +14 -13
  88. package/SVF-doxygen/html/html/VFGEdge_8h_source.html +2 -2
  89. package/SVF-doxygen/html/html/VFGNode_8h_source.html +13 -13
  90. package/SVF-doxygen/html/html/VFG_8cpp_source.html +50 -51
  91. package/SVF-doxygen/html/html/VFG_8h_source.html +35 -35
  92. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +5 -5
  93. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +4 -4
  94. package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +4 -4
  95. package/SVF-doxygen/html/html/annotated.html +100 -102
  96. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode-members.html +3 -3
  97. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +9 -9
  98. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode-members.html +3 -3
  99. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +9 -9
  100. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode-members.html +3 -3
  101. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +9 -9
  102. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode-members.html +3 -3
  103. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +9 -9
  104. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge-members.html +1 -1
  105. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +5 -5
  106. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt-members.html +26 -27
  107. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +26 -27
  108. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode-members.html +3 -3
  109. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +9 -9
  110. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +3 -3
  111. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +11 -11
  112. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +46 -46
  113. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +11 -11
  114. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +64 -64
  115. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +11 -11
  116. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +29 -29
  117. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +11 -11
  118. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +29 -29
  119. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +11 -11
  120. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +31 -31
  121. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +11 -11
  122. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +33 -33
  123. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +12 -12
  124. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +43 -42
  125. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +18 -18
  126. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +11 -11
  127. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +31 -31
  128. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode-members.html +3 -3
  129. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +11 -11
  130. package/SVF-doxygen/html/html/classSVF_1_1AssignStmt-members.html +30 -31
  131. package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.html +34 -39
  132. package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.png +0 -0
  133. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +1 -1
  134. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +7 -7
  135. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt-members.html +30 -31
  136. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +32 -33
  137. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode-members.html +3 -3
  138. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +11 -11
  139. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +33 -34
  140. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +47 -48
  141. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode-members.html +3 -3
  142. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +12 -12
  143. package/SVF-doxygen/html/html/classSVF_1_1CHEdge-members.html +1 -1
  144. package/SVF-doxygen/html/html/classSVF_1_1CHEdge.html +3 -3
  145. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +3 -3
  146. package/SVF-doxygen/html/html/classSVF_1_1CHGraph-members.html +4 -4
  147. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +24 -24
  148. package/SVF-doxygen/html/html/classSVF_1_1CHNode-members.html +3 -3
  149. package/SVF-doxygen/html/html/classSVF_1_1CHNode.html +11 -11
  150. package/SVF-doxygen/html/html/classSVF_1_1CSC-members.html +1 -1
  151. package/SVF-doxygen/html/html/classSVF_1_1CSC.html +11 -11
  152. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge-members.html +1 -1
  153. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +4 -4
  154. package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge-members.html +1 -1
  155. package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +4 -4
  156. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode-members.html +3 -3
  157. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +9 -9
  158. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge-members.html +1 -1
  159. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +4 -4
  160. package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +29 -30
  161. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +35 -36
  162. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar-members.html +3 -3
  163. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +20 -20
  164. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar-members.html +3 -3
  165. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +21 -21
  166. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar-members.html +4 -4
  167. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +24 -24
  168. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt-members.html +32 -33
  169. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +33 -34
  170. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode-members.html +3 -3
  171. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +11 -11
  172. package/SVF-doxygen/html/html/classSVF_1_1CondManager.html +2 -2
  173. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +1 -1
  174. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +3 -3
  175. package/SVF-doxygen/html/html/classSVF_1_1ConstraintEdge-members.html +1 -1
  176. package/SVF-doxygen/html/html/classSVF_1_1ConstraintEdge.html +3 -3
  177. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph-members.html +1 -1
  178. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +99 -100
  179. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +26 -26
  180. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +68 -68
  181. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +1 -1
  182. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +20 -19
  183. package/SVF-doxygen/html/html/classSVF_1_1CopyCGEdge-members.html +1 -1
  184. package/SVF-doxygen/html/html/classSVF_1_1CopyCGEdge.html +3 -3
  185. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt-members.html +26 -27
  186. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +26 -27
  187. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode-members.html +3 -3
  188. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +9 -9
  189. package/SVF-doxygen/html/html/classSVF_1_1DCHEdge-members.html +5 -5
  190. package/SVF-doxygen/html/html/classSVF_1_1DCHEdge.html +8 -8
  191. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +7 -7
  192. package/SVF-doxygen/html/html/classSVF_1_1DCHNode-members.html +3 -3
  193. package/SVF-doxygen/html/html/classSVF_1_1DCHNode.html +11 -11
  194. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +2 -2
  195. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +2 -2
  196. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +5 -5
  197. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
  198. package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge-members.html +1 -1
  199. package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +4 -4
  200. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG-members.html +1 -1
  201. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +2 -2
  202. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar-members.html +3 -3
  203. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +22 -22
  204. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar-members.html +3 -3
  205. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +22 -22
  206. package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode-members.html +3 -3
  207. package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +9 -9
  208. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar-members.html +3 -3
  209. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +23 -23
  210. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +13 -13
  211. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +37 -37
  212. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +1 -1
  213. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +9 -8
  214. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +13 -13
  215. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +134 -134
  216. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +22 -22
  217. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +13 -13
  218. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +93 -92
  219. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode-members.html +3 -3
  220. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +9 -9
  221. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode-members.html +3 -3
  222. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +9 -9
  223. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode-members.html +3 -3
  224. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +9 -9
  225. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode-members.html +3 -3
  226. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +9 -9
  227. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode-members.html +3 -3
  228. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +9 -9
  229. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode-members.html +3 -3
  230. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +9 -9
  231. package/SVF-doxygen/html/html/classSVF_1_1GenericEdge-members.html +1 -1
  232. package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.html +7 -7
  233. package/SVF-doxygen/html/html/classSVF_1_1GenericNode-members.html +3 -3
  234. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +43 -42
  235. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
  236. package/SVF-doxygen/html/html/classSVF_1_1GepCGEdge-members.html +1 -1
  237. package/SVF-doxygen/html/html/classSVF_1_1GepCGEdge.html +3 -3
  238. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar-members.html +4 -4
  239. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +52 -52
  240. package/SVF-doxygen/html/html/classSVF_1_1GepStmt-members.html +18 -16
  241. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +148 -59
  242. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.png +0 -0
  243. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode-members.html +3 -3
  244. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +9 -9
  245. package/SVF-doxygen/html/html/classSVF_1_1GepValVar-members.html +5 -5
  246. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +49 -49
  247. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode-members.html +3 -3
  248. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +9 -9
  249. package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge-members.html +1 -1
  250. package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge.html +4 -4
  251. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +2 -2
  252. package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge-members.html +1 -1
  253. package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +5 -5
  254. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode-members.html +3 -3
  255. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +9 -9
  256. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +7 -8
  257. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +1 -1
  258. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +3 -3
  259. package/SVF-doxygen/html/html/classSVF_1_1IRGraph-members.html +5 -5
  260. package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +27 -27
  261. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge-members.html +1 -1
  262. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +4 -4
  263. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG-members.html +1 -1
  264. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +2 -2
  265. package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode-members.html +3 -3
  266. package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode.html +9 -9
  267. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode-members.html +3 -3
  268. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +9 -9
  269. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode-members.html +3 -3
  270. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +9 -9
  271. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge-members.html +1 -1
  272. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +4 -4
  273. package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge-members.html +1 -1
  274. package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +4 -4
  275. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG-members.html +1 -1
  276. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +2 -2
  277. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode-members.html +3 -3
  278. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +9 -9
  279. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge-members.html +1 -1
  280. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +4 -4
  281. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode-members.html +3 -3
  282. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +9 -9
  283. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode-members.html +3 -3
  284. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +9 -9
  285. package/SVF-doxygen/html/html/classSVF_1_1LoadCGEdge-members.html +1 -1
  286. package/SVF-doxygen/html/html/classSVF_1_1LoadCGEdge.html +3 -3
  287. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt-members.html +29 -30
  288. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +26 -27
  289. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode-members.html +3 -3
  290. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +9 -9
  291. package/SVF-doxygen/html/html/classSVF_1_1LocationSet-members.html +12 -12
  292. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +120 -150
  293. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator-members.html +1 -1
  294. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +11 -11
  295. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode-members.html +3 -3
  296. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +9 -9
  297. package/SVF-doxygen/html/html/classSVF_1_1MRVer-members.html +1 -1
  298. package/SVF-doxygen/html/html/classSVF_1_1MRVer.html +8 -8
  299. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode-members.html +3 -3
  300. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +9 -9
  301. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +2 -2
  302. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +1 -1
  303. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +3 -3
  304. package/SVF-doxygen/html/html/classSVF_1_1MemObj-members.html +1 -1
  305. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +7 -7
  306. package/SVF-doxygen/html/html/classSVF_1_1MemRegion-members.html +1 -1
  307. package/SVF-doxygen/html/html/classSVF_1_1MemRegion.html +8 -8
  308. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +6 -6
  309. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +3 -3
  310. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt-members.html +35 -36
  311. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +41 -42
  312. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +1 -1
  313. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge-members.html +6 -6
  314. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +11 -11
  315. package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt-members.html +3 -3
  316. package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt.html +17 -17
  317. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode-members.html +3 -3
  318. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +9 -9
  319. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo-members.html +1 -1
  320. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +13 -13
  321. package/SVF-doxygen/html/html/classSVF_1_1ObjVar-members.html +3 -3
  322. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +27 -27
  323. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG-members.html +1 -1
  324. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +6 -6
  325. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile-members.html +1 -1
  326. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +12 -12
  327. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode-members.html +3 -3
  328. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +11 -11
  329. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph-members.html +2 -2
  330. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +15 -15
  331. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge-members.html +1 -1
  332. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +5 -5
  333. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode-members.html +3 -3
  334. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +9 -9
  335. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +11 -12
  336. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt-members.html +32 -33
  337. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +32 -33
  338. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +1 -1
  339. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +12 -12
  340. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge-members.html +1 -1
  341. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +4 -4
  342. package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge-members.html +1 -1
  343. package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +4 -4
  344. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode-members.html +3 -3
  345. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +9 -9
  346. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge-members.html +1 -1
  347. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +4 -4
  348. package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +29 -30
  349. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +35 -36
  350. package/SVF-doxygen/html/html/classSVF_1_1RetPN-members.html +3 -3
  351. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +22 -22
  352. package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock-members.html +1 -1
  353. package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +3 -3
  354. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction-members.html +1 -1
  355. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +3 -3
  356. package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +2 -2
  357. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +16 -16
  358. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +1 -1
  359. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +2 -2
  360. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +10 -10
  361. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +3 -3
  362. package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal-members.html +1 -1
  363. package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal.html +3 -3
  364. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +10 -10
  365. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +110 -111
  366. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +4 -4
  367. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +152 -151
  368. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt-members.html +26 -27
  369. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +67 -71
  370. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.png +0 -0
  371. package/SVF-doxygen/html/html/classSVF_1_1SVFValue-members.html +1 -1
  372. package/SVF-doxygen/html/html/classSVF_1_1SVFValue.html +9 -9
  373. package/SVF-doxygen/html/html/classSVF_1_1SVFVar-members.html +3 -3
  374. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +15 -15
  375. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +3 -3
  376. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +11 -11
  377. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +31 -31
  378. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode-members.html +3 -3
  379. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +12 -12
  380. package/SVF-doxygen/html/html/classSVF_1_1StoreCGEdge-members.html +1 -1
  381. package/SVF-doxygen/html/html/classSVF_1_1StoreCGEdge.html +3 -3
  382. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt-members.html +26 -27
  383. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +27 -28
  384. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode-members.html +3 -3
  385. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +9 -9
  386. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +2 -2
  387. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +1 -1
  388. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +12 -12
  389. package/SVF-doxygen/html/html/classSVF_1_1TCTEdge-members.html +1 -1
  390. package/SVF-doxygen/html/html/classSVF_1_1TCTEdge.html +3 -3
  391. package/SVF-doxygen/html/html/classSVF_1_1TCTNode-members.html +3 -3
  392. package/SVF-doxygen/html/html/classSVF_1_1TCTNode.html +9 -9
  393. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +28 -29
  394. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +28 -29
  395. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +28 -29
  396. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +28 -29
  397. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph-members.html +2 -2
  398. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +5 -5
  399. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge-members.html +1 -1
  400. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +4 -4
  401. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge-members.html +1 -1
  402. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +4 -4
  403. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge-members.html +1 -1
  404. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +4 -4
  405. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +11 -11
  406. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +31 -31
  407. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +22 -21
  408. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt-members.html +31 -32
  409. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +39 -40
  410. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode-members.html +3 -3
  411. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +9 -9
  412. package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +2 -2
  413. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +79 -80
  414. package/SVF-doxygen/html/html/classSVF_1_1VFGEdge-members.html +1 -1
  415. package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +5 -5
  416. package/SVF-doxygen/html/html/classSVF_1_1VFGNode-members.html +3 -3
  417. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +9 -9
  418. package/SVF-doxygen/html/html/classSVF_1_1ValVar-members.html +3 -3
  419. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +20 -20
  420. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN-members.html +3 -3
  421. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +22 -22
  422. package/SVF-doxygen/html/html/classSVF_1_1VariantGepCGEdge-members.html +1 -1
  423. package/SVF-doxygen/html/html/classSVF_1_1VariantGepCGEdge.html +3 -3
  424. package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt-members.html +2 -2
  425. package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt.html +9 -9
  426. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +15 -15
  427. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +55 -55
  428. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +20 -20
  429. package/SVF-doxygen/html/html/classes.html +95 -93
  430. package/SVF-doxygen/html/html/functions_a.html +19 -16
  431. package/SVF-doxygen/html/html/functions_c.html +22 -22
  432. package/SVF-doxygen/html/html/functions_eval_g.html +2 -1
  433. package/SVF-doxygen/html/html/functions_eval_n.html +0 -1
  434. package/SVF-doxygen/html/html/functions_eval_v.html +0 -1
  435. package/SVF-doxygen/html/html/functions_f.html +3 -3
  436. package/SVF-doxygen/html/html/functions_func.html +20 -17
  437. package/SVF-doxygen/html/html/functions_func_c.html +20 -22
  438. package/SVF-doxygen/html/html/functions_func_f.html +1 -1
  439. package/SVF-doxygen/html/html/functions_func_g.html +37 -40
  440. package/SVF-doxygen/html/html/functions_func_i.html +8 -5
  441. package/SVF-doxygen/html/html/functions_func_n.html +0 -3
  442. package/SVF-doxygen/html/html/functions_func_o.html +5 -7
  443. package/SVF-doxygen/html/html/functions_func_r.html +2 -2
  444. package/SVF-doxygen/html/html/functions_func_s.html +1 -1
  445. package/SVF-doxygen/html/html/functions_func_t.html +0 -2
  446. package/SVF-doxygen/html/html/functions_func_v.html +1 -4
  447. package/SVF-doxygen/html/html/functions_g.html +30 -32
  448. package/SVF-doxygen/html/html/functions_i.html +13 -10
  449. package/SVF-doxygen/html/html/functions_l.html +4 -4
  450. package/SVF-doxygen/html/html/functions_m.html +3 -3
  451. package/SVF-doxygen/html/html/functions_n.html +23 -27
  452. package/SVF-doxygen/html/html/functions_o.html +6 -8
  453. package/SVF-doxygen/html/html/functions_p.html +7 -7
  454. package/SVF-doxygen/html/html/functions_r.html +2 -2
  455. package/SVF-doxygen/html/html/functions_s.html +7 -5
  456. package/SVF-doxygen/html/html/functions_t.html +4 -8
  457. package/SVF-doxygen/html/html/functions_type_g.html +3 -3
  458. package/SVF-doxygen/html/html/functions_type_n.html +1 -1
  459. package/SVF-doxygen/html/html/functions_type_o.html +1 -1
  460. package/SVF-doxygen/html/html/functions_v.html +10 -11
  461. package/SVF-doxygen/html/html/functions_vars_a.html +1 -1
  462. package/SVF-doxygen/html/html/functions_vars_f.html +2 -2
  463. package/SVF-doxygen/html/html/functions_vars_m.html +2 -2
  464. package/SVF-doxygen/html/html/functions_vars_n.html +22 -22
  465. package/SVF-doxygen/html/html/functions_vars_t.html +3 -3
  466. package/SVF-doxygen/html/html/functions_vars_v.html +5 -2
  467. package/SVF-doxygen/html/html/functions_w.html +5 -9
  468. package/SVF-doxygen/html/html/hierarchy.html +55 -57
  469. package/SVF-doxygen/html/html/namespaceSVF.html +22 -26
  470. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
  471. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +5 -5
  472. package/SVF-doxygen/html/html/namespacemembers_s.html +3 -3
  473. package/SVF-doxygen/html/html/namespacemembers_type_s.html +3 -3
  474. package/SVF-doxygen/html/html/search/all_1.js +9 -8
  475. package/SVF-doxygen/html/html/search/all_10.js +6 -6
  476. package/SVF-doxygen/html/html/search/all_12.js +2 -2
  477. package/SVF-doxygen/html/html/search/all_13.js +9 -9
  478. package/SVF-doxygen/html/html/search/all_14.js +6 -6
  479. package/SVF-doxygen/html/html/search/all_16.js +7 -7
  480. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  481. package/SVF-doxygen/html/html/search/all_3.js +1 -1
  482. package/SVF-doxygen/html/html/search/all_6.js +3 -3
  483. package/SVF-doxygen/html/html/search/all_7.js +19 -20
  484. package/SVF-doxygen/html/html/search/all_9.js +4 -3
  485. package/SVF-doxygen/html/html/search/all_c.js +3 -3
  486. package/SVF-doxygen/html/html/search/all_d.js +5 -5
  487. package/SVF-doxygen/html/html/search/all_e.js +20 -21
  488. package/SVF-doxygen/html/html/search/all_f.js +4 -4
  489. package/SVF-doxygen/html/html/search/classes_12.js +0 -1
  490. package/SVF-doxygen/html/html/search/classes_b.js +0 -1
  491. package/SVF-doxygen/html/html/search/enumvalues_12.js +1 -1
  492. package/SVF-doxygen/html/html/search/enumvalues_6.js +1 -1
  493. package/SVF-doxygen/html/html/search/enumvalues_b.js +1 -1
  494. package/SVF-doxygen/html/html/search/functions_0.js +8 -7
  495. package/SVF-doxygen/html/html/search/functions_10.js +1 -1
  496. package/SVF-doxygen/html/html/search/functions_11.js +1 -1
  497. package/SVF-doxygen/html/html/search/functions_13.js +1 -2
  498. package/SVF-doxygen/html/html/search/functions_2.js +1 -1
  499. package/SVF-doxygen/html/html/search/functions_5.js +1 -1
  500. package/SVF-doxygen/html/html/search/functions_6.js +16 -17
  501. package/SVF-doxygen/html/html/search/functions_8.js +3 -2
  502. package/SVF-doxygen/html/html/search/functions_a.js +1 -1
  503. package/SVF-doxygen/html/html/search/functions_c.js +0 -1
  504. package/SVF-doxygen/html/html/search/functions_d.js +3 -3
  505. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  506. package/SVF-doxygen/html/html/search/functions_f.js +2 -2
  507. package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
  508. package/SVF-doxygen/html/html/search/typedefs_6.js +2 -2
  509. package/SVF-doxygen/html/html/search/typedefs_d.js +1 -1
  510. package/SVF-doxygen/html/html/search/typedefs_e.js +1 -1
  511. package/SVF-doxygen/html/html/search/variables_1.js +1 -1
  512. package/SVF-doxygen/html/html/search/variables_14.js +4 -4
  513. package/SVF-doxygen/html/html/search/variables_16.js +3 -2
  514. package/SVF-doxygen/html/html/search/variables_6.js +2 -2
  515. package/SVF-doxygen/html/html/search/variables_d.js +3 -3
  516. package/SVF-doxygen/html/html/search/variables_e.js +18 -18
  517. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +16 -16
  518. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
  519. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +18 -18
  520. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1LocationSet_01_4.html +5 -5
  521. package/include/Graphs/CHG.h +6 -6
  522. package/include/Graphs/ConsG.h +2 -2
  523. package/include/Graphs/ConsGEdge.h +1 -1
  524. package/include/Graphs/ConsGNode.h +16 -16
  525. package/include/Graphs/GenericGraph.h +4 -4
  526. package/include/Graphs/IRGraph.h +5 -5
  527. package/include/Graphs/PTACallGraph.h +2 -2
  528. package/include/Graphs/VFG.h +2 -2
  529. package/include/MSSA/MSSAMuChi.h +1 -1
  530. package/include/MSSA/MemRegion.h +2 -2
  531. package/include/MemoryModel/LocationSet.h +10 -48
  532. package/include/MemoryModel/PAGBuilderFromFile.h +1 -1
  533. package/include/MemoryModel/PointerAnalysis.h +1 -1
  534. package/include/MemoryModel/SVFIR.h +5 -5
  535. package/include/MemoryModel/SVFStatements.h +18 -95
  536. package/include/MemoryModel/SVFVariables.h +9 -6
  537. package/include/MemoryModel/SymbolTableInfo.h +3 -3
  538. package/include/SVF-FE/DCHG.h +1 -1
  539. package/include/SVF-FE/SVFIRBuilder.h +7 -7
  540. package/include/Util/IRAnnotator.h +3 -3
  541. package/include/Util/SVFBasicTypes.h +3 -3
  542. package/include/WPA/Andersen.h +11 -11
  543. package/include/WPA/AndersenSFR.h +1 -1
  544. package/include/WPA/CSC.h +1 -1
  545. package/include/WPA/FlowSensitive.h +13 -13
  546. package/include/WPA/VersionedFlowSensitive.h +2 -2
  547. package/lib/DDA/ContextDDA.cpp +4 -5
  548. package/lib/DDA/DDAClient.cpp +6 -6
  549. package/lib/DDA/DDAStat.cpp +1 -1
  550. package/lib/DDA/FlowDDA.cpp +4 -5
  551. package/lib/Graphs/ConsG.cpp +30 -35
  552. package/lib/Graphs/ICFG.cpp +1 -1
  553. package/lib/Graphs/SVFG.cpp +2 -2
  554. package/lib/Graphs/SVFGStat.cpp +2 -2
  555. package/lib/Graphs/VFG.cpp +36 -43
  556. package/lib/MSSA/MemRegion.cpp +2 -2
  557. package/lib/MTA/MHP.cpp +2 -2
  558. package/lib/MTA/MTAAnnotator.cpp +3 -3
  559. package/lib/MemoryModel/LocationSet.cpp +49 -9
  560. package/lib/MemoryModel/PAGBuilderFromFile.cpp +3 -3
  561. package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
  562. package/lib/MemoryModel/SVFIR.cpp +27 -35
  563. package/lib/MemoryModel/SVFStatements.cpp +0 -22
  564. package/lib/MemoryModel/SVFVariables.cpp +1 -1
  565. package/lib/MemoryModel/SymbolTableInfo.cpp +4 -4
  566. package/lib/SVF-FE/CPPUtil.cpp +6 -6
  567. package/lib/SVF-FE/DCHG.cpp +1 -1
  568. package/lib/SVF-FE/Graph2Json.cpp +24 -27
  569. package/lib/SVF-FE/LLVMUtil.cpp +1 -1
  570. package/lib/SVF-FE/SVFIRBuilder.cpp +14 -13
  571. package/lib/SVF-FE/SymbolTableBuilder.cpp +1 -1
  572. package/lib/Util/Conditions.cpp +1 -1
  573. package/lib/Util/PTAStat.cpp +9 -9
  574. package/lib/Util/TypeBasedHeapCloning.cpp +6 -6
  575. package/lib/WPA/Andersen.cpp +13 -13
  576. package/lib/WPA/AndersenSFR.cpp +8 -8
  577. package/lib/WPA/AndersenStat.cpp +2 -2
  578. package/lib/WPA/CSC.cpp +6 -6
  579. package/lib/WPA/FlowSensitive.cpp +4 -7
  580. package/lib/WPA/FlowSensitiveStat.cpp +2 -2
  581. package/lib/WPA/FlowSensitiveTBHC.cpp +6 -9
  582. package/lib/WPA/TypeAnalysis.cpp +3 -3
  583. package/package.json +1 -1
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">PointerAnalysisImpl.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="PointerAnalysisImpl_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">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * PointerAnalysisImpl.cpp</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Created on: 28Mar.,2020</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Author: yulei</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;</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>&quot;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CPPUtil_8h.html">SVF-FE/CPPUtil.h</a>&quot;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="DCHG_8h.html">SVF-FE/DCHG.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="IRAnnotator_8h.html">Util/IRAnnotator.h</a>&quot;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;fstream&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacecppUtil.html">cppUtil</a>;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ab0e1242aadfe1e16a2bd1445658a5476"> 25</a></span>&#160;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab0e1242aadfe1e16a2bd1445658a5476">BVDataPTAImpl::BVDataPTAImpl</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* p, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PointerAnalysis::PTATY</a> type, <span class="keywordtype">bool</span> alias_check) :</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>(p, type, alias_check), ptCache()</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49">Andersen_BASE</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6">Andersen_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">AndersenWaveDiff_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a46f5e74d5f4b0a2d134e68d262079c3f">AndersenHCD_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f">AndersenHLCD_WPA</a></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac7c033efd59e2b5fcded79fc3ebdb9d4">AndersenLCD_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acc2e7cbdd04a614a3b6189d2f01042f3">TypeCPP_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85aa43c83e2f0df003c158d4b1325b50b18">FlowS_DDA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac581e279a4bd69c059b0e5987f839a1f">AndersenWaveDiffWithType_WPA</a></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">AndersenSCD_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">AndersenSFR_WPA</a>)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="comment">// Only maintain reverse points-to when the analysis is field-sensitive, as objects turning</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="comment">// field-insensitive is all it is used for.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">bool</span> maintainRevPts = <a class="code" href="classSVF_1_1Options.html#adfc1a5c6098d3867e29fc65ca9ffa1cc">Options::MaxFieldLimit</a> != 0;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac4e74e6dfee9d08198e0f7e3d76a0646">MutDiffPTDataTy</a>(maintainRevPts);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a1342c0953d7bb9bf0f6f676bd564350e">PersDiffPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), maintainRevPts);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad24ef5326c26db858c73432aa7e67a0a">Steensgaard_WPA</a>)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">// Steensgaard is only field-insensitive (for now?), so no reverse points-to.</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac4e74e6dfee9d08198e0f7e3d76a0646">MutDiffPTDataTy</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a1342c0953d7bb9bf0f6f676bd564350e">PersDiffPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad6ccf1ce66083278349c5c3111172d78">FSSPARSE_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a088dda60195ab259693977af8414f203">FSTBHC_WPA</a>)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a5896e2aaf59305441a74ede0dfb85845">Options::INCDFPTData</a>)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a639446e6bf9712afa439d089b94aefae">MutIncDFPTDataTy</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a29172b3e8b3891a5d946a493cfcde2e7">PersIncDFPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac130bf326911b8e5396f57daa78566e7">MutDFPTDataTy</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7087f9d5a1a5b3576173bd6a7fd72163">PersDFPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a412254a7738029bf3ee96f5c15a6bec9">VFS_WPA</a>)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7fde3e9b189e988cd0a24d567b136e13">MutVersionedPTDataTy</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae028ae29bdc799f35777b82a39faf5e8">PersVersionedPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;no points-to data available&quot;</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a5d3c3094e263bf16a4f312a118c1bd36">ptaImplTy</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da84705167ea3a7162ecb9470a8a77b5d8">BVDataImpl</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a57ff2bf45ede7a730a8adaba8e61179d"> 72</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a57ff2bf45ede7a730a8adaba8e61179d">BVDataPTAImpl::finalize</a>()</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;{</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b">normalizePointsTo</a>();</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">PointerAnalysis::finalize</a>();</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent &amp;&amp; <a class="code" href="classSVF_1_1Options.html#a498a1a05a08be1ffd845aefeb0672bcb">Options::PStat</a>) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">ptCache</a>.printStats(<span class="stringliteral">&quot;bv-finalize&quot;</span>);</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="l00082"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721"> 82</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">BVDataPTAImpl::expandFIObjs</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; expandedPts)</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; expandedPts = pts;;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> pit = pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), epit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); pit!=epit; ++pit)</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(*pit) == *pit || <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(*pit))</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; expandedPts |= <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(*pit);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</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;</div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#aa6a7186152037452599406a74b05d0e1"> 94</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">BVDataPTAImpl::expandFIObjs</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; pts, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; expandedPts)</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;{</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; expandedPts = pts;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(o) == o || <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(o))</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; expandedPts |= <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(o);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;}</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a7a87ca1a439e871896f92e4342befa2c"> 106</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7a87ca1a439e871896f92e4342befa2c">BVDataPTAImpl::remapPointsToSets</a>(<span class="keywordtype">void</span>)</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_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1PTData.html#af2f176027169e18730848c7a583aed93">remapAllPts</a>();</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;}</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a25c68f9d2b88437778e854ff0d741d1b"> 116</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a25c68f9d2b88437778e854ff0d741d1b">BVDataPTAImpl::writeToFile</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; filename)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;{</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca">writeToModule</a>();</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Storing pointer analysis results to &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</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; error_code err;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="namespaceSVF.html#acde6a1d496f1b655088ccbe023820277">ToolOutputFile</a> F(filename.c_str(), err, llvm::sys::fs::OF_None);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">if</span> (err)</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for writing!\n&quot;</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; F.os().clear_error();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">return</span>;</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; <span class="comment">// Write analysis results to file</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it) {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> var = it-&gt;first;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;pts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(var);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; stringstream ss;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; F.os() &lt;&lt; var &lt;&lt; <span class="stringliteral">&quot; -&gt; { &quot;</span>;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">if</span> (pts.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>()) {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; F.os() &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n: pts) {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; F.os() &lt;&lt; n &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; F.os() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// Write GepPAGNodes to file</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it)</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; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = it-&gt;second;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepObjPN = SVFUtil::dyn_cast&lt;GepObjVar&gt;(pagNode))</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; F.os() &lt;&lt; it-&gt;first &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; F.os() &lt;&lt; <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(it-&gt;first) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; F.os() &lt;&lt; gepObjPN-&gt;getFieldOffset() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</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;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; F.os() &lt;&lt; <span class="stringliteral">&quot;------\n&quot;</span>;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="comment">// Write BaseNodes insensitivity to file</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> NodeIDs;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = it-&gt;second;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">if</span> (!isa&lt;ObjVar&gt;(pagNode)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(it-&gt;first);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span> (NodeIDs.test(n)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; F.os() &lt;&lt; n &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; F.os() &lt;&lt; <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(n) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; NodeIDs.set(n);</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;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// Job finish and close file</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; F.os().close();</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">if</span> (!F.os().has_error())</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; F.keep();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;}</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a290501006cb700db0e07dc577429c928"> 190</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a290501006cb700db0e07dc577429c928">BVDataPTAImpl::readFromFile</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; filename)</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; <span class="comment">// If the module annotations are available, read from there instead</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keyword">auto</span> mainModule = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">getMainLLVMModule</a>();</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">if</span> (mainModule-&gt;getNamedMetadata(<span class="stringliteral">&quot;SVFIR-Annotated&quot;</span>) != <span class="keyword">nullptr</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; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5">readFromModule</a>();</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;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Loading pointer analysis results from &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</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; ifstream F(filename.c_str());</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">if</span> (!F.is_open())</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for reading!\n&quot;</span>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="comment">// Read analysis results from file</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="classSVF_1_1PTData.html">PTDataTy</a> *<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>();</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordtype">string</span> line;</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="comment">// Read points-to sets</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordtype">string</span> delimiter1 = <span class="stringliteral">&quot; -&gt; { &quot;</span>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordtype">string</span> delimiter2 = <span class="stringliteral">&quot; }&quot;</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; map&lt;NodeID, string&gt; nodePtsMap;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; map&lt;string, PointsTo&gt; strPtsMap;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">while</span> (F.good())</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="comment">// Parse a single line in the form of &quot;var -&gt; { obj1 obj2 obj3 }&quot;</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; getline(F, line);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordtype">size_t</span> pos = line.find(delimiter1);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">if</span> (pos == string::npos) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">if</span> (line.back() != <span class="charliteral">&#39;}&#39;</span>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="comment">// var</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> var = atoi(line.substr(0, pos).c_str());</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// objs</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; pos = pos + delimiter1.length();</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordtype">size_t</span> len = line.length() - pos - delimiter2.length();</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordtype">string</span> objs = line.substr(pos, len);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> dstPts;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">if</span> (!objs.empty())</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="comment">// map the variable ID to its unique string pointer set</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; nodePtsMap[var] = objs;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">if</span> (strPtsMap.count(objs)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; istringstream ss(objs);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">while</span> (ss.good())</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; ss &gt;&gt; obj;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; dstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(obj);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// map the string pointer set to the parsed PointsTo set</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; strPtsMap[objs] = dstPts;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; }</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">// map the variable ID to its pointer set</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> t: nodePtsMap)</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; ptD-&gt;<a class="code" href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">unionPts</a>(t.first, strPtsMap[t.second]);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// Read SVFIR offset nodes</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">while</span> (F.good())</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">if</span> (line == <span class="stringliteral">&quot;------&quot;</span>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="comment">// Parse a single line in the form of &quot;ID baseNodeID offset&quot;</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordtype">size_t</span> offset;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; ss &gt;&gt; <span class="keywordtype">id</span> &gt;&gt; base &gt;&gt; offset;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(base), <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offset));</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keywordtype">id</span> == n &amp;&amp; <span class="stringliteral">&quot;Error adding GepObjNode into SVFIR!&quot;</span>);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; getline(F, line);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// Read BaseNode insensitivity</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">while</span> (F.good())</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; getline(F, line);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="comment">// Parse a single line in the form of &quot;baseNodeID insensitive&quot;</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordtype">bool</span> insensitive;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; ss &gt;&gt; base &gt;&gt; insensitive;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">if</span> (insensitive)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">setObjFieldInsensitive</a>(base);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="comment">// Update callgraph</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa534e475fa34fa322c567bc376a3da70">updateCallGraph</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2d2131128ceb3362b5dc89317cfd88a0">getIndirectCallsites</a>());</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; F.close();</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;}</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca"> 302</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca">BVDataPTAImpl::writeToModule</a>()</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;{</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keyword">auto</span> irAnnotator = std::make_unique&lt;IRAnnotator&gt;();</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">auto</span> mainModule = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">getMainLLVMModule</a>();</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; irAnnotator-&gt;processAndersenResults(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>, <span class="keyword">this</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;}</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5"> 315</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5">BVDataPTAImpl::readFromModule</a>()</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;{</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keyword">auto</span> irAnnotator = std::make_unique&lt;IRAnnotator&gt;();</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; irAnnotator-&gt;processAndersenResults(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>, <span class="keyword">this</span>, <span class="keyword">false</span>);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;}</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div><div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a8d6cea841b6ded0f80ef2b5784e9b752"> 325</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a8d6cea841b6ded0f80ef2b5784e9b752">BVDataPTAImpl::dumpTopLevelPtsTo</a>()</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;{</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">for</span> (OrderedNodeSet::iterator nIter = this-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().begin();</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; nIter != this-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().end(); ++nIter)</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; {</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*nIter);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;isValidTopLevelPtr(node))</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; {</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = this-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\nNodeID &quot;</span> &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="l00335"></a><span class="lineno"> 335</span>&#160;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span> (pts.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\tPointsTo: {empty}\n\n&quot;</span>;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; {</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\tPointsTo: { &quot;</span>;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>();</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; *it &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n\n&quot;</span>;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; }</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>().flush();</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;}</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;</div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a97705b60d294b87ee075a69f04a35d22"> 358</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a97705b60d294b87ee075a69f04a35d22">BVDataPTAImpl::dumpAllPts</a>()</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;{</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <a class="code" href="namespaceSVF.html#a3c2bd95727ec0d9c55c631b6617026c8">OrderedNodeSet</a> pagNodes;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; it++)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; pagNodes.insert(it-&gt;first);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; }</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n : pagNodes)</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; {</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;----------------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a1a6cee7e690ccb3e53cdc4c3e67b386d">dumpPts</a>(n, this-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(n));</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; }</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;----------------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;}</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a9830d4676fd424b633f8e4d918734296"> 381</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a9830d4676fd424b633f8e4d918734296">BVDataPTAImpl::onTheFlyCallGraphSolve</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>&amp; callsites, <a class="code" href="classSVF_1_1PointerAnalysis.html#a35bd5f0fb2c146199e9f1aa6a19b4062">CallEdgeMap</a>&amp; newEdges)</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;{</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">for</span>(CallSiteToFunPtrMap::const_iterator iter = callsites.begin(), eiter = callsites.end(); iter!=eiter; ++iter)</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; {</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = iter-&gt;first;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aca6465c72effcaddeb34f55da4555754">isVirtualCallSite</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>())))</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vtbl = <a class="code" href="namespaceSVF_1_1cppUtil.html#a3b00cc9770022f124958513bf1e52a05">getVCallVtblPtr</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()));</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#aceb17dfbe137658625e16291127267d1">hasValueNode</a>(vtbl));</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vtblId = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vtbl);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac04b64a5884710508b304f93da88c7ba">resolveCPPIndCalls</a>(cs, <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(vtblId), newEdges);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; }</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#aa0a14fd11d7e69b2a3f91a3862f172cd">resolveIndCalls</a>(iter-&gt;first,<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(iter-&gt;second),newEdges);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;}</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;</div><div class="line"><a name="l00402"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b"> 402</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b">BVDataPTAImpl::normalizePointsTo</a>() {</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#ab6abb822445c9b3f5cb2b7206042e940">SVFIR::MemObjToFieldsMap</a> &amp;memToFieldsMap = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a6f46446d667258b32ddc1ccab48f651c">getMemToFieldsMap</a>();</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4">SVFIR::NodeLocationSetMap</a> &amp;GepObjVarMap = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77e3c407ea3990413e371589aa468963">getGepObjNodeMap</a>();</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="comment">// collect each gep node whose base node has been set as field-insensitive</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> dropNodes;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> t: memToFieldsMap){</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = t.first;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* memObj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(base);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(memObj &amp;&amp; <span class="stringliteral">&quot;Invalid memobj in memToFieldsMap&quot;</span>);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">if</span> (memObj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>()) {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> : t.second) {</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;GepObjVar&gt;(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>))) {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; dropNodes.set(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keywordtype">id</span> == base &amp;&amp; <span class="stringliteral">&quot;Not a GepObj Node or a baseObj Node?&quot;</span>);</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; }</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; }</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="comment">// remove the collected redundant gep nodes in each pointers&#39;s pts</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter) {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = nIter-&gt;first;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;tmpPts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(n);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj : tmpPts) {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span> (!dropNodes.test(obj))</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseObj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(obj);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a3f78f60e1947a6d6fbcd3a0ee11e262a">clearPts</a>(n, obj);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(n, baseObj);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="comment">// clear GepObjVarMap and memToFieldsMap for redundant gepnodes</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="comment">// and remove those nodes from pag</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n: dropNodes) {</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(n);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a>&gt;(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(n));</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> ls = gepNode-&gt;<a class="code" href="classSVF_1_1GepObjVar.html#a553e648804b39c503e7288dd0434c339">getLocationSet</a>();</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; GepObjVarMap.erase(std::make_pair(base, ls));</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; memToFieldsMap[base].reset(n);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a1817b65e76052f11e36a67d6b9efd915">removeGNode</a>(gepNode);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; }</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;}</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;</div><div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac"> 452</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">BVDataPTAImpl::alias</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a339bbddac9d9dffd5ef602200d34c403">MemoryLocation</a> &amp;LocA,</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a339bbddac9d9dffd5ef602200d34c403">MemoryLocation</a> &amp;LocB)</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;{</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">alias</a>(LocA.Ptr, LocB.Ptr);</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;}</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;</div><div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df"> 461</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">BVDataPTAImpl::alias</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V1,</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V2)</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;{</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">alias</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V1),<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V2));</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;}</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;</div><div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a949533e5c99698c7f9862aae5de23687"> 470</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">BVDataPTAImpl::alias</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node2)</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;{</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">alias</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node1),<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node2));</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;</div><div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a25720f154731a8c745da10aa76ab8517"> 478</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">BVDataPTAImpl::alias</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; p1, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; p2)</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;{</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; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts1;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(p1,pts1);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts2;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(p2,pts2);</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">containBlackHoleNode</a>(pts1) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">containBlackHoleNode</a>(pts2) || pts1.<a class="code" href="classSVF_1_1PointsTo.html#ad78e4109c839914c4f7e37ca78046f1d">intersects</a>(pts2))</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">return</span> llvm::AliasResult::MayAlias;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">return</span> llvm::AliasResult::NoAlias;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIR_html_aa5b08d987b37d35e73de88da10a97bc4"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4">SVF::SVFIR::NodeLocationSetMap</a></div><div class="ttdeci">Map&lt; NodeLocationSet, NodeID &gt; NodeLocationSetMap</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00069">SVFIR.h:69</a></div></div>
69
+ <a href="PointerAnalysisImpl_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">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * PointerAnalysisImpl.cpp</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Created on: 28Mar.,2020</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Author: yulei</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;</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>&quot;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CPPUtil_8h.html">SVF-FE/CPPUtil.h</a>&quot;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="DCHG_8h.html">SVF-FE/DCHG.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="IRAnnotator_8h.html">Util/IRAnnotator.h</a>&quot;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;fstream&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacecppUtil.html">cppUtil</a>;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ab0e1242aadfe1e16a2bd1445658a5476"> 25</a></span>&#160;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab0e1242aadfe1e16a2bd1445658a5476">BVDataPTAImpl::BVDataPTAImpl</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* p, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PointerAnalysis::PTATY</a> type, <span class="keywordtype">bool</span> alias_check) :</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>(p, type, alias_check), ptCache()</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49">Andersen_BASE</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6">Andersen_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">AndersenWaveDiff_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a46f5e74d5f4b0a2d134e68d262079c3f">AndersenHCD_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f">AndersenHLCD_WPA</a></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac7c033efd59e2b5fcded79fc3ebdb9d4">AndersenLCD_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acc2e7cbdd04a614a3b6189d2f01042f3">TypeCPP_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85aa43c83e2f0df003c158d4b1325b50b18">FlowS_DDA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac581e279a4bd69c059b0e5987f839a1f">AndersenWaveDiffWithType_WPA</a></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">AndersenSCD_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">AndersenSFR_WPA</a>)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="comment">// Only maintain reverse points-to when the analysis is field-sensitive, as objects turning</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="comment">// field-insensitive is all it is used for.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">bool</span> maintainRevPts = <a class="code" href="classSVF_1_1Options.html#adfc1a5c6098d3867e29fc65ca9ffa1cc">Options::MaxFieldLimit</a> != 0;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac4e74e6dfee9d08198e0f7e3d76a0646">MutDiffPTDataTy</a>(maintainRevPts);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a1342c0953d7bb9bf0f6f676bd564350e">PersDiffPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), maintainRevPts);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad24ef5326c26db858c73432aa7e67a0a">Steensgaard_WPA</a>)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">// Steensgaard is only field-insensitive (for now?), so no reverse points-to.</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac4e74e6dfee9d08198e0f7e3d76a0646">MutDiffPTDataTy</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a1342c0953d7bb9bf0f6f676bd564350e">PersDiffPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad6ccf1ce66083278349c5c3111172d78">FSSPARSE_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a088dda60195ab259693977af8414f203">FSTBHC_WPA</a>)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a5896e2aaf59305441a74ede0dfb85845">Options::INCDFPTData</a>)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a639446e6bf9712afa439d089b94aefae">MutIncDFPTDataTy</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a29172b3e8b3891a5d946a493cfcde2e7">PersIncDFPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac130bf326911b8e5396f57daa78566e7">MutDFPTDataTy</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7087f9d5a1a5b3576173bd6a7fd72163">PersDFPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a412254a7738029bf3ee96f5c15a6bec9">VFS_WPA</a>)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7fde3e9b189e988cd0a24d567b136e13">MutVersionedPTDataTy</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae028ae29bdc799f35777b82a39faf5e8">PersVersionedPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;no points-to data available&quot;</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a5d3c3094e263bf16a4f312a118c1bd36">ptaImplTy</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da84705167ea3a7162ecb9470a8a77b5d8">BVDataImpl</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a57ff2bf45ede7a730a8adaba8e61179d"> 72</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a57ff2bf45ede7a730a8adaba8e61179d">BVDataPTAImpl::finalize</a>()</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;{</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b">normalizePointsTo</a>();</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">PointerAnalysis::finalize</a>();</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent &amp;&amp; <a class="code" href="classSVF_1_1Options.html#a498a1a05a08be1ffd845aefeb0672bcb">Options::PStat</a>) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">ptCache</a>.printStats(<span class="stringliteral">&quot;bv-finalize&quot;</span>);</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="l00082"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721"> 82</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">BVDataPTAImpl::expandFIObjs</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; expandedPts)</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; expandedPts = pts;;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> pit = pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), epit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); pit!=epit; ++pit)</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(*pit) == *pit || <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(*pit))</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; expandedPts |= <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(*pit);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</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;</div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#aa6a7186152037452599406a74b05d0e1"> 94</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">BVDataPTAImpl::expandFIObjs</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; pts, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; expandedPts)</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;{</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; expandedPts = pts;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(o) == o || <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(o))</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; expandedPts |= <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(o);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;}</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a7a87ca1a439e871896f92e4342befa2c"> 106</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7a87ca1a439e871896f92e4342befa2c">BVDataPTAImpl::remapPointsToSets</a>(<span class="keywordtype">void</span>)</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_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1PTData.html#af2f176027169e18730848c7a583aed93">remapAllPts</a>();</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;}</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a25c68f9d2b88437778e854ff0d741d1b"> 116</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a25c68f9d2b88437778e854ff0d741d1b">BVDataPTAImpl::writeToFile</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; filename)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;{</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca">writeToModule</a>();</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Storing pointer analysis results to &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</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; error_code err;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="namespaceSVF.html#acde6a1d496f1b655088ccbe023820277">ToolOutputFile</a> F(filename.c_str(), err, llvm::sys::fs::OF_None);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">if</span> (err)</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for writing!\n&quot;</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; F.os().clear_error();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">return</span>;</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; <span class="comment">// Write analysis results to file</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it) {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> var = it-&gt;first;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;pts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(var);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; stringstream ss;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; F.os() &lt;&lt; var &lt;&lt; <span class="stringliteral">&quot; -&gt; { &quot;</span>;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">if</span> (pts.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>()) {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; F.os() &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n: pts) {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; F.os() &lt;&lt; n &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; F.os() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// Write GepPAGNodes to file</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it)</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; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = it-&gt;second;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepObjPN = SVFUtil::dyn_cast&lt;GepObjVar&gt;(pagNode))</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; F.os() &lt;&lt; it-&gt;first &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; F.os() &lt;&lt; <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(it-&gt;first) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; F.os() &lt;&lt; gepObjPN-&gt;getConstantFieldIdx() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</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;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; F.os() &lt;&lt; <span class="stringliteral">&quot;------\n&quot;</span>;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="comment">// Write BaseNodes insensitivity to file</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> NodeIDs;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = it-&gt;second;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">if</span> (!isa&lt;ObjVar&gt;(pagNode)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(it-&gt;first);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span> (NodeIDs.test(n)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; F.os() &lt;&lt; n &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; F.os() &lt;&lt; <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(n) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; NodeIDs.set(n);</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;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// Job finish and close file</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; F.os().close();</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">if</span> (!F.os().has_error())</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; F.keep();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;}</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a290501006cb700db0e07dc577429c928"> 190</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a290501006cb700db0e07dc577429c928">BVDataPTAImpl::readFromFile</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; filename)</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; <span class="comment">// If the module annotations are available, read from there instead</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keyword">auto</span> mainModule = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">getMainLLVMModule</a>();</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">if</span> (mainModule-&gt;getNamedMetadata(<span class="stringliteral">&quot;SVFIR-Annotated&quot;</span>) != <span class="keyword">nullptr</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; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5">readFromModule</a>();</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;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Loading pointer analysis results from &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</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; ifstream F(filename.c_str());</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">if</span> (!F.is_open())</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for reading!\n&quot;</span>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="comment">// Read analysis results from file</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="classSVF_1_1PTData.html">PTDataTy</a> *<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>();</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordtype">string</span> line;</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="comment">// Read points-to sets</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordtype">string</span> delimiter1 = <span class="stringliteral">&quot; -&gt; { &quot;</span>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordtype">string</span> delimiter2 = <span class="stringliteral">&quot; }&quot;</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; map&lt;NodeID, string&gt; nodePtsMap;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; map&lt;string, PointsTo&gt; strPtsMap;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">while</span> (F.good())</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="comment">// Parse a single line in the form of &quot;var -&gt; { obj1 obj2 obj3 }&quot;</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; getline(F, line);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordtype">size_t</span> pos = line.find(delimiter1);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">if</span> (pos == string::npos) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">if</span> (line.back() != <span class="charliteral">&#39;}&#39;</span>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="comment">// var</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> var = atoi(line.substr(0, pos).c_str());</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// objs</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; pos = pos + delimiter1.length();</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordtype">size_t</span> len = line.length() - pos - delimiter2.length();</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordtype">string</span> objs = line.substr(pos, len);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> dstPts;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">if</span> (!objs.empty())</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="comment">// map the variable ID to its unique string pointer set</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; nodePtsMap[var] = objs;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">if</span> (strPtsMap.count(objs)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; istringstream ss(objs);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">while</span> (ss.good())</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; ss &gt;&gt; obj;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; dstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(obj);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// map the string pointer set to the parsed PointsTo set</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; strPtsMap[objs] = dstPts;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; }</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">// map the variable ID to its pointer set</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> t: nodePtsMap)</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; ptD-&gt;<a class="code" href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">unionPts</a>(t.first, strPtsMap[t.second]);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// Read SVFIR offset nodes</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">while</span> (F.good())</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">if</span> (line == <span class="stringliteral">&quot;------&quot;</span>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="comment">// Parse a single line in the form of &quot;ID baseNodeID offset&quot;</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordtype">size_t</span> offset;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; ss &gt;&gt; <span class="keywordtype">id</span> &gt;&gt; base &gt;&gt; offset;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(base), <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offset));</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keywordtype">id</span> == n &amp;&amp; <span class="stringliteral">&quot;Error adding GepObjNode into SVFIR!&quot;</span>);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; getline(F, line);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// Read BaseNode insensitivity</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">while</span> (F.good())</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; getline(F, line);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="comment">// Parse a single line in the form of &quot;baseNodeID insensitive&quot;</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordtype">bool</span> insensitive;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; ss &gt;&gt; base &gt;&gt; insensitive;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">if</span> (insensitive)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">setObjFieldInsensitive</a>(base);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="comment">// Update callgraph</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa534e475fa34fa322c567bc376a3da70">updateCallGraph</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2d2131128ceb3362b5dc89317cfd88a0">getIndirectCallsites</a>());</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; F.close();</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;}</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca"> 302</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca">BVDataPTAImpl::writeToModule</a>()</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;{</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keyword">auto</span> irAnnotator = std::make_unique&lt;IRAnnotator&gt;();</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">auto</span> mainModule = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">getMainLLVMModule</a>();</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; irAnnotator-&gt;processAndersenResults(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>, <span class="keyword">this</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;}</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5"> 315</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5">BVDataPTAImpl::readFromModule</a>()</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;{</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keyword">auto</span> irAnnotator = std::make_unique&lt;IRAnnotator&gt;();</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; irAnnotator-&gt;processAndersenResults(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>, <span class="keyword">this</span>, <span class="keyword">false</span>);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;}</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div><div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a8d6cea841b6ded0f80ef2b5784e9b752"> 325</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a8d6cea841b6ded0f80ef2b5784e9b752">BVDataPTAImpl::dumpTopLevelPtsTo</a>()</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;{</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">for</span> (OrderedNodeSet::iterator nIter = this-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().begin();</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; nIter != this-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().end(); ++nIter)</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; {</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*nIter);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;isValidTopLevelPtr(node))</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; {</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = this-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\nNodeID &quot;</span> &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="l00335"></a><span class="lineno"> 335</span>&#160;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span> (pts.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\tPointsTo: {empty}\n\n&quot;</span>;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; {</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\tPointsTo: { &quot;</span>;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>();</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; *it &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n\n&quot;</span>;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; }</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>().flush();</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;}</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;</div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a97705b60d294b87ee075a69f04a35d22"> 358</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a97705b60d294b87ee075a69f04a35d22">BVDataPTAImpl::dumpAllPts</a>()</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;{</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <a class="code" href="namespaceSVF.html#a3c2bd95727ec0d9c55c631b6617026c8">OrderedNodeSet</a> pagNodes;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; it++)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; pagNodes.insert(it-&gt;first);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; }</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n : pagNodes)</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; {</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;----------------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a1a6cee7e690ccb3e53cdc4c3e67b386d">dumpPts</a>(n, this-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(n));</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; }</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;----------------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;}</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a9830d4676fd424b633f8e4d918734296"> 381</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a9830d4676fd424b633f8e4d918734296">BVDataPTAImpl::onTheFlyCallGraphSolve</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>&amp; callsites, <a class="code" href="classSVF_1_1PointerAnalysis.html#a35bd5f0fb2c146199e9f1aa6a19b4062">CallEdgeMap</a>&amp; newEdges)</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;{</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">for</span>(CallSiteToFunPtrMap::const_iterator iter = callsites.begin(), eiter = callsites.end(); iter!=eiter; ++iter)</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; {</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = iter-&gt;first;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aca6465c72effcaddeb34f55da4555754">isVirtualCallSite</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>())))</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vtbl = <a class="code" href="namespaceSVF_1_1cppUtil.html#a3b00cc9770022f124958513bf1e52a05">getVCallVtblPtr</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()));</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#aceb17dfbe137658625e16291127267d1">hasValueNode</a>(vtbl));</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vtblId = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vtbl);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac04b64a5884710508b304f93da88c7ba">resolveCPPIndCalls</a>(cs, <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(vtblId), newEdges);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; }</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#aa0a14fd11d7e69b2a3f91a3862f172cd">resolveIndCalls</a>(iter-&gt;first,<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(iter-&gt;second),newEdges);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;}</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;</div><div class="line"><a name="l00402"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b"> 402</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b">BVDataPTAImpl::normalizePointsTo</a>() {</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#ab6abb822445c9b3f5cb2b7206042e940">SVFIR::MemObjToFieldsMap</a> &amp;memToFieldsMap = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a6f46446d667258b32ddc1ccab48f651c">getMemToFieldsMap</a>();</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4">SVFIR::NodeLocationSetMap</a> &amp;GepObjVarMap = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77e3c407ea3990413e371589aa468963">getGepObjNodeMap</a>();</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="comment">// collect each gep node whose base node has been set as field-insensitive</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> dropNodes;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> t: memToFieldsMap){</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = t.first;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* memObj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(base);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(memObj &amp;&amp; <span class="stringliteral">&quot;Invalid memobj in memToFieldsMap&quot;</span>);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">if</span> (memObj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>()) {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> : t.second) {</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;GepObjVar&gt;(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>))) {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; dropNodes.set(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keywordtype">id</span> == base &amp;&amp; <span class="stringliteral">&quot;Not a GepObj Node or a baseObj Node?&quot;</span>);</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; }</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; }</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="comment">// remove the collected redundant gep nodes in each pointers&#39;s pts</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter) {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = nIter-&gt;first;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;tmpPts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(n);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj : tmpPts) {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span> (!dropNodes.test(obj))</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseObj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(obj);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a3f78f60e1947a6d6fbcd3a0ee11e262a">clearPts</a>(n, obj);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(n, baseObj);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="comment">// clear GepObjVarMap and memToFieldsMap for redundant gepnodes</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="comment">// and remove those nodes from pag</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n: dropNodes) {</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(n);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a>&gt;(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(n));</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> ls = gepNode-&gt;<a class="code" href="classSVF_1_1GepObjVar.html#a553e648804b39c503e7288dd0434c339">getLocationSet</a>();</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; GepObjVarMap.erase(std::make_pair(base, ls));</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; memToFieldsMap[base].reset(n);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a1817b65e76052f11e36a67d6b9efd915">removeGNode</a>(gepNode);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; }</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;}</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;</div><div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac"> 452</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">BVDataPTAImpl::alias</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a339bbddac9d9dffd5ef602200d34c403">MemoryLocation</a> &amp;LocA,</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a339bbddac9d9dffd5ef602200d34c403">MemoryLocation</a> &amp;LocB)</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;{</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">alias</a>(LocA.Ptr, LocB.Ptr);</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;}</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;</div><div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df"> 461</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">BVDataPTAImpl::alias</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V1,</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V2)</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;{</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">alias</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V1),<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V2));</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;}</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;</div><div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a949533e5c99698c7f9862aae5de23687"> 470</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">BVDataPTAImpl::alias</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node2)</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;{</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">alias</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node1),<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node2));</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;</div><div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a25720f154731a8c745da10aa76ab8517"> 478</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">BVDataPTAImpl::alias</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; p1, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; p2)</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;{</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; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts1;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(p1,pts1);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts2;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(p2,pts2);</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">containBlackHoleNode</a>(pts1) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">containBlackHoleNode</a>(pts2) || pts1.<a class="code" href="classSVF_1_1PointsTo.html#ad78e4109c839914c4f7e37ca78046f1d">intersects</a>(pts2))</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">return</span> llvm::AliasResult::MayAlias;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">return</span> llvm::AliasResult::NoAlias;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIR_html_aa5b08d987b37d35e73de88da10a97bc4"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4">SVF::SVFIR::NodeLocationSetMap</a></div><div class="ttdeci">Map&lt; NodeLocationSet, NodeID &gt; NodeLocationSetMap</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00069">SVFIR.h:69</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00361">GenericGraph.h:361</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a7a87ca1a439e871896f92e4342befa2c"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a7a87ca1a439e871896f92e4342befa2c">SVF::BVDataPTAImpl::remapPointsToSets</a></div><div class="ttdeci">void remapPointsToSets(void)</div><div class="ttdoc">Remap all points-to sets to use the current mapping. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00106">PointerAnalysisImpl.cpp:106</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1SVFIR_html_a6f46446d667258b32ddc1ccab48f651c"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a6f46446d667258b32ddc1ccab48f651c">SVF::SVFIR::getMemToFieldsMap</a></div><div class="ttdeci">MemObjToFieldsMap &amp; getMemToFieldsMap()</div><div class="ttdoc">Return memToFieldsMap. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00122">SVFIR.h:122</a></div></div>
@@ -126,7 +126,7 @@ $(function() {
126
126
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f">SVF::PointerAnalysis::AndersenHLCD_WPA</a></div><div class="ttdoc">Hybird lazy cycle detection andersen-style WPA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00069">PointerAnalysis.h:69</a></div></div>
127
127
  <div class="ttc" id="classSVF_1_1PointsTo_html_ad78e4109c839914c4f7e37ca78046f1d"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ad78e4109c839914c4f7e37ca78046f1d">SVF::PointsTo::intersects</a></div><div class="ttdeci">bool intersects(const PointsTo &amp;rhs) const</div><div class="ttdoc">Returns true if this set and rhs share any elements. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00180">PointsTo.cpp:180</a></div></div>
128
128
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a1342c0953d7bb9bf0f6f676bd564350e"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a1342c0953d7bb9bf0f6f676bd564350e">SVF::BVDataPTAImpl::PersDiffPTDataTy</a></div><div class="ttdeci">PersistentDiffPTData&lt; NodeID, NodeSet, NodeID, PointsTo &gt; PersDiffPTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00058">PointerAnalysisImpl.h:58</a></div></div>
129
- <div class="ttc" id="classSVF_1_1GepObjVar_html"><div class="ttname"><a href="classSVF_1_1GepObjVar.html">SVF::GepObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00456">SVFVariables.h:456</a></div></div>
129
+ <div class="ttc" id="classSVF_1_1GepObjVar_html"><div class="ttname"><a href="classSVF_1_1GepObjVar.html">SVF::GepObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00459">SVFVariables.h:459</a></div></div>
130
130
  <div class="ttc" id="classSVF_1_1IRGraph_html_aceb17dfbe137658625e16291127267d1"><div class="ttname"><a href="classSVF_1_1IRGraph.html#aceb17dfbe137658625e16291127267d1">SVF::IRGraph::hasValueNode</a></div><div class="ttdeci">bool hasValueNode(const Value *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00124">IRGraph.h:124</a></div></div>
131
131
  <div class="ttc" id="namespaceSVF_html_acde6a1d496f1b655088ccbe023820277"><div class="ttname"><a href="namespaceSVF.html#acde6a1d496f1b655088ccbe023820277">SVF::ToolOutputFile</a></div><div class="ttdeci">llvm::ToolOutputFile ToolOutputFile</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
132
132
  <div class="ttc" id="classSVF_1_1PTData_html_af2f176027169e18730848c7a583aed93"><div class="ttname"><a href="classSVF_1_1PTData.html#af2f176027169e18730848c7a583aed93">SVF::PTData::remapAllPts</a></div><div class="ttdeci">virtual void remapAllPts(void)=0</div><div class="ttdoc">Remaps all points-to sets to use the current mapping. </div></div>
@@ -168,7 +168,7 @@ $(function() {
168
168
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5d3c3094e263bf16a4f312a118c1bd36"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5d3c3094e263bf16a4f312a118c1bd36">SVF::PointerAnalysis::ptaImplTy</a></div><div class="ttdeci">PTAImplTy ptaImplTy</div><div class="ttdoc">PTA implementation type. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00153">PointerAnalysis.h:153</a></div></div>
169
169
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a8d6cea841b6ded0f80ef2b5784e9b752"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a8d6cea841b6ded0f80ef2b5784e9b752">SVF::BVDataPTAImpl::dumpTopLevelPtsTo</a></div><div class="ttdeci">virtual void dumpTopLevelPtsTo()</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00325">PointerAnalysisImpl.cpp:325</a></div></div>
170
170
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
171
- <div class="ttc" id="classSVF_1_1GepObjVar_html_a553e648804b39c503e7288dd0434c339"><div class="ttname"><a href="classSVF_1_1GepObjVar.html#a553e648804b39c503e7288dd0434c339">SVF::GepObjVar::getLocationSet</a></div><div class="ttdeci">const LocationSet &amp; getLocationSet() const</div><div class="ttdoc">offset of the mem object </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00494">SVFVariables.h:494</a></div></div>
171
+ <div class="ttc" id="classSVF_1_1GepObjVar_html_a553e648804b39c503e7288dd0434c339"><div class="ttname"><a href="classSVF_1_1GepObjVar.html#a553e648804b39c503e7288dd0434c339">SVF::GepObjVar::getLocationSet</a></div><div class="ttdeci">const LocationSet &amp; getLocationSet() const</div><div class="ttdoc">offset of the mem object </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00497">SVFVariables.h:497</a></div></div>
172
172
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a1817b65e76052f11e36a67d6b9efd915"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a1817b65e76052f11e36a67d6b9efd915">SVF::GenericGraph::removeGNode</a></div><div class="ttdeci">void removeGNode(NodeType *node)</div><div class="ttdoc">Delete a node. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00402">GenericGraph.h:402</a></div></div>
173
173
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">SVF::PointerAnalysis::PTATY</a></div><div class="ttdeci">PTATY</div><div class="ttdoc">Pointer analysis type list. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00062">PointerAnalysis.h:62</a></div></div>
174
174
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_adc7f5c71efb9cd1bec4f5ca9127654c3"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">SVF::PointerAnalysis::pag</a></div><div class="ttdeci">static SVFIR * pag</div><div class="ttdoc">SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00147">PointerAnalysis.h:147</a></div></div>