svf-tools 1.0.284 → 1.0.285

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 (388) hide show
  1. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +2 -2
  3. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +8 -8
  4. package/SVF-doxygen/html/html/Andersen_8h_source.html +5 -5
  5. package/SVF-doxygen/html/html/BasicTypes_8h_source.html +2 -2
  6. package/SVF-doxygen/html/html/CHG_8cpp_source.html +5 -5
  7. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +2 -2
  8. package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +1 -1
  9. package/SVF-doxygen/html/html/Conditions_8cpp_source.html +1 -1
  10. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
  12. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +4 -4
  13. package/SVF-doxygen/html/html/CxtStmt_8h_source.html +1 -1
  14. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +1 -1
  15. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +3 -3
  16. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +3 -3
  17. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +1 -1
  18. package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +2 -2
  19. package/SVF-doxygen/html/html/ExternalPAG_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +2 -2
  21. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
  22. package/SVF-doxygen/html/html/FileChecker_8cpp_source.html +3 -3
  23. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +3 -3
  25. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +1 -1
  26. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +5 -5
  27. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +3 -3
  28. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +3 -3
  29. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
  30. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +5 -5
  31. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
  32. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +1 -1
  33. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +6 -6
  34. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +2 -2
  35. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +4 -4
  36. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +1 -1
  37. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +7 -7
  38. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +3 -3
  39. package/SVF-doxygen/html/html/LocationSet_8h_source.html +3 -3
  40. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
  41. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +7 -7
  42. package/SVF-doxygen/html/html/MHP_8cpp_source.html +3 -3
  43. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +5 -5
  44. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
  45. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -1
  46. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +7 -7
  47. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +5 -5
  48. package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
  49. package/SVF-doxygen/html/html/MemModel_8cpp_source.html +1 -1
  50. package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +15 -15
  51. package/SVF-doxygen/html/html/MemPartition_8h_source.html +11 -11
  52. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +103 -34
  53. package/SVF-doxygen/html/html/MemRegion_8h.html +3 -3
  54. package/SVF-doxygen/html/html/MemRegion_8h_source.html +97 -109
  55. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +43 -42
  56. package/SVF-doxygen/html/html/MemSSA_8h_source.html +46 -47
  57. package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +3 -3
  58. package/SVF-doxygen/html/html/PAGBuilder_8cpp_source.html +5 -5
  59. package/SVF-doxygen/html/html/PAG_8cpp_source.html +3 -3
  60. package/SVF-doxygen/html/html/PCG_8cpp_source.html +2 -2
  61. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +2 -2
  62. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
  63. package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +29 -29
  64. package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +7 -7
  65. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp.html +2 -2
  66. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +19 -21
  67. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +81 -81
  68. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +8 -8
  69. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +1 -1
  70. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +8 -8
  71. package/SVF-doxygen/html/html/SVFGBuilder_8h.html +2 -1
  72. package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +20 -19
  73. package/SVF-doxygen/html/html/SVFGEdge_8h_source.html +3 -3
  74. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +3 -3
  75. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +7 -7
  76. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +3 -4
  77. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +21 -21
  78. package/SVF-doxygen/html/html/SVFG_8cpp.html +1 -0
  79. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +46 -45
  80. package/SVF-doxygen/html/html/SVFG_8h_source.html +12 -13
  81. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +1 -1
  82. package/SVF-doxygen/html/html/SVFUtil_8cpp.html +9 -8
  83. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +34 -33
  84. package/SVF-doxygen/html/html/SVFUtil_8h.html +14 -2
  85. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +43 -36
  86. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +1 -1
  87. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +3 -3
  88. package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +2 -2
  89. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
  90. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +6 -6
  91. package/SVF-doxygen/html/html/TCT_8cpp_source.html +2 -2
  92. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +2 -2
  93. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +2 -2
  94. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +1 -1
  95. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +9 -9
  96. package/SVF-doxygen/html/html/VFG_8cpp_source.html +3 -3
  97. package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
  98. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
  99. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +3 -3
  100. package/SVF-doxygen/html/html/annotated.html +16 -16
  101. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +5 -5
  102. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +4 -4
  103. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
  104. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
  105. package/SVF-doxygen/html/html/classSVF_1_1AddrPE.html +1 -1
  106. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +58 -59
  107. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +19 -22
  108. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +48 -49
  109. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +9 -12
  110. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +60 -61
  111. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +2 -5
  112. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +63 -64
  113. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +2 -5
  114. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +59 -60
  115. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +2 -5
  116. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +63 -64
  117. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +5 -8
  118. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +67 -68
  119. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +2 -5
  120. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +3 -3
  121. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +58 -59
  122. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +2 -5
  123. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType-members.html +64 -65
  124. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType.html +4 -7
  125. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +2 -2
  126. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +2 -2
  127. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +135 -138
  128. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +1 -1
  129. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +3 -3
  130. package/SVF-doxygen/html/html/classSVF_1_1BranchCondManager.html +2 -2
  131. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +6 -6
  132. package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +2 -2
  133. package/SVF-doxygen/html/html/classSVF_1_1CallCHI.html +2 -2
  134. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +2 -2
  135. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +2 -2
  136. package/SVF-doxygen/html/html/classSVF_1_1CallMU.html +2 -2
  137. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  138. package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +1 -1
  139. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +3 -3
  140. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +115 -115
  141. package/SVF-doxygen/html/html/classSVF_1_1CondPointsToSet.html +1 -1
  142. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +10 -10
  143. package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +1 -1
  144. package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
  145. package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
  146. package/SVF-doxygen/html/html/classSVF_1_1CxtThreadStmt.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +1 -1
  148. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +1 -1
  149. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +3 -3
  150. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG-members.html +63 -62
  151. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +94 -92
  152. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +2 -2
  153. package/SVF-doxygen/html/html/classSVF_1_1EntryCHI.html +2 -2
  154. package/SVF-doxygen/html/html/classSVF_1_1ExternalPAG.html +1 -1
  155. package/SVF-doxygen/html/html/classSVF_1_1FIObjPN.html +1 -1
  156. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +65 -66
  157. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -5
  158. package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +4 -4
  159. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +51 -52
  160. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +10 -13
  161. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +62 -63
  162. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +35 -38
  163. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +5 -5
  164. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +74 -75
  165. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +17 -20
  166. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +3 -3
  167. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +5 -5
  168. package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +1 -1
  169. package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +1 -1
  170. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +2 -2
  171. package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +1 -1
  172. package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +1 -1
  173. package/SVF-doxygen/html/html/classSVF_1_1GepValPN.html +1 -1
  174. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +7 -7
  175. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +7 -7
  176. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -1
  177. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +3 -3
  178. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +2 -2
  179. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG-members.html +71 -70
  180. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +88 -86
  181. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +3 -3
  182. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  183. package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +1 -1
  184. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG-members.html +71 -70
  185. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +126 -124
  186. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +2 -2
  187. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +3 -3
  188. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  189. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +13 -13
  190. package/SVF-doxygen/html/html/classSVF_1_1LoadMU.html +2 -2
  191. package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +1 -1
  192. package/SVF-doxygen/html/html/classSVF_1_1LocSymTableInfo.html +1 -1
  193. package/SVF-doxygen/html/html/classSVF_1_1LocationSet-members.html +1 -1
  194. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +11 -11
  195. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +3 -3
  196. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +8 -8
  197. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +5 -5
  198. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator-members.html +76 -75
  199. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +515 -506
  200. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +2 -2
  201. package/SVF-doxygen/html/html/classSVF_1_1MSSACHI.html +2 -2
  202. package/SVF-doxygen/html/html/classSVF_1_1MSSADEF.html +1 -1
  203. package/SVF-doxygen/html/html/classSVF_1_1MSSAMU.html +2 -2
  204. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHI.html +1 -1
  205. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +5 -5
  206. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +2 -2
  207. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +4 -4
  208. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +14 -14
  209. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +14 -14
  210. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +3 -3
  211. package/SVF-doxygen/html/html/classSVF_1_1MemRegion-members.html +9 -10
  212. package/SVF-doxygen/html/html/classSVF_1_1MemRegion.html +38 -56
  213. package/SVF-doxygen/html/html/classSVF_1_1MemSSA-members.html +1 -1
  214. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +132 -132
  215. package/SVF-doxygen/html/html/classSVF_1_1MemSSADF.html +5 -5
  216. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +21 -21
  217. package/SVF-doxygen/html/html/classSVF_1_1MutableDFPTData.html +1 -1
  218. package/SVF-doxygen/html/html/classSVF_1_1MutablePTData.html +2 -2
  219. package/SVF-doxygen/html/html/classSVF_1_1NormalGepPE.html +1 -1
  220. package/SVF-doxygen/html/html/classSVF_1_1ObjPN.html +1 -1
  221. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilder.html +6 -6
  222. package/SVF-doxygen/html/html/classSVF_1_1PAGNode.html +1 -1
  223. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +2 -2
  224. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +3 -3
  225. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +1 -1
  226. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +2 -2
  227. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +1 -1
  228. package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +3 -3
  229. package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +4 -4
  230. package/SVF-doxygen/html/html/classSVF_1_1PersistentIncDFPTData.html +2 -2
  231. package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +9 -9
  232. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache-members.html +28 -27
  233. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +144 -111
  234. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +21 -21
  235. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +1 -1
  236. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +5 -5
  237. package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +1 -1
  238. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +2 -2
  239. package/SVF-doxygen/html/html/classSVF_1_1RetMU.html +2 -2
  240. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  241. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +4 -4
  242. package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +4 -4
  243. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +62 -62
  244. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +37 -37
  245. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +6 -6
  246. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +49 -49
  247. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +1 -1
  248. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +4 -4
  249. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +15 -15
  250. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -1
  251. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +52 -53
  252. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +6 -9
  253. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +2 -2
  254. package/SVF-doxygen/html/html/classSVF_1_1StoreCHI.html +2 -2
  255. package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +1 -1
  256. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +5 -5
  257. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +2 -2
  258. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  259. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  260. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +3 -3
  261. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +2 -2
  262. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +2 -2
  263. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +51 -52
  264. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +3 -6
  265. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +10 -10
  266. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +1 -1
  267. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  268. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +2 -2
  269. package/SVF-doxygen/html/html/classSVF_1_1ValPN.html +1 -1
  270. package/SVF-doxygen/html/html/classSVF_1_1VariantGepPE.html +1 -1
  271. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +82 -83
  272. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +5 -8
  273. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
  274. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +7 -7
  275. package/SVF-doxygen/html/html/classes.html +2 -2
  276. package/SVF-doxygen/html/html/functions_a.html +10 -10
  277. package/SVF-doxygen/html/html/functions_c.html +11 -11
  278. package/SVF-doxygen/html/html/functions_e.html +4 -7
  279. package/SVF-doxygen/html/html/functions_f.html +17 -14
  280. package/SVF-doxygen/html/html/functions_func.html +10 -10
  281. package/SVF-doxygen/html/html/functions_func_c.html +5 -5
  282. package/SVF-doxygen/html/html/functions_func_g.html +33 -30
  283. package/SVF-doxygen/html/html/functions_func_h.html +1 -1
  284. package/SVF-doxygen/html/html/functions_func_i.html +1 -1
  285. package/SVF-doxygen/html/html/functions_func_m.html +2 -2
  286. package/SVF-doxygen/html/html/functions_func_o.html +3 -3
  287. package/SVF-doxygen/html/html/functions_func_p.html +1 -1
  288. package/SVF-doxygen/html/html/functions_func_s.html +1 -1
  289. package/SVF-doxygen/html/html/functions_g.html +30 -27
  290. package/SVF-doxygen/html/html/functions_h.html +1 -1
  291. package/SVF-doxygen/html/html/functions_i.html +7 -7
  292. package/SVF-doxygen/html/html/functions_l.html +4 -4
  293. package/SVF-doxygen/html/html/functions_m.html +2 -2
  294. package/SVF-doxygen/html/html/functions_o.html +7 -9
  295. package/SVF-doxygen/html/html/functions_p.html +17 -13
  296. package/SVF-doxygen/html/html/functions_r.html +8 -4
  297. package/SVF-doxygen/html/html/functions_s.html +7 -7
  298. package/SVF-doxygen/html/html/functions_t.html +3 -3
  299. package/SVF-doxygen/html/html/functions_type_c.html +1 -1
  300. package/SVF-doxygen/html/html/functions_type_e.html +0 -3
  301. package/SVF-doxygen/html/html/functions_type_f.html +4 -1
  302. package/SVF-doxygen/html/html/functions_type_l.html +1 -1
  303. package/SVF-doxygen/html/html/functions_type_p.html +3 -3
  304. package/SVF-doxygen/html/html/functions_type_s.html +1 -1
  305. package/SVF-doxygen/html/html/functions_vars_c.html +5 -5
  306. package/SVF-doxygen/html/html/functions_vars_f.html +3 -3
  307. package/SVF-doxygen/html/html/functions_vars_i.html +1 -1
  308. package/SVF-doxygen/html/html/functions_vars_p.html +1 -1
  309. package/SVF-doxygen/html/html/globals_s.html +3 -3
  310. package/SVF-doxygen/html/html/hierarchy.html +2 -2
  311. package/SVF-doxygen/html/html/menudata.js +1 -0
  312. package/SVF-doxygen/html/html/namespaceSVF.html +3 -3
  313. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +250 -122
  314. package/SVF-doxygen/html/html/namespacemembers_c.html +3 -0
  315. package/SVF-doxygen/html/html/namespacemembers_e.html +3 -0
  316. package/SVF-doxygen/html/html/namespacemembers_func.html +23 -10
  317. package/SVF-doxygen/html/html/namespacemembers_m.html +3 -0
  318. package/SVF-doxygen/html/html/namespacemembers_p.html +4 -1
  319. package/SVF-doxygen/html/html/namespacemembers_type_e.html +3 -0
  320. package/SVF-doxygen/html/html/namespacemembers_type_p.html +1 -1
  321. package/SVF-doxygen/html/html/search/all_1.js +10 -10
  322. package/SVF-doxygen/html/html/search/all_10.js +12 -11
  323. package/SVF-doxygen/html/html/search/all_12.js +2 -2
  324. package/SVF-doxygen/html/html/search/all_13.js +7 -7
  325. package/SVF-doxygen/html/html/search/all_14.js +4 -4
  326. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  327. package/SVF-doxygen/html/html/search/all_3.js +12 -11
  328. package/SVF-doxygen/html/html/search/all_5.js +2 -1
  329. package/SVF-doxygen/html/html/search/all_6.js +4 -3
  330. package/SVF-doxygen/html/html/search/all_7.js +14 -13
  331. package/SVF-doxygen/html/html/search/all_8.js +1 -1
  332. package/SVF-doxygen/html/html/search/all_9.js +4 -4
  333. package/SVF-doxygen/html/html/search/all_c.js +2 -2
  334. package/SVF-doxygen/html/html/search/all_d.js +5 -4
  335. package/SVF-doxygen/html/html/search/all_e.js +2 -2
  336. package/SVF-doxygen/html/html/search/all_f.js +3 -3
  337. package/SVF-doxygen/html/html/search/classes_4.js +2 -1
  338. package/SVF-doxygen/html/html/search/functions_0.js +10 -10
  339. package/SVF-doxygen/html/html/search/functions_10.js +2 -2
  340. package/SVF-doxygen/html/html/search/functions_2.js +6 -5
  341. package/SVF-doxygen/html/html/search/functions_6.js +14 -13
  342. package/SVF-doxygen/html/html/search/functions_7.js +1 -1
  343. package/SVF-doxygen/html/html/search/functions_8.js +1 -1
  344. package/SVF-doxygen/html/html/search/functions_b.js +3 -2
  345. package/SVF-doxygen/html/html/search/functions_d.js +1 -1
  346. package/SVF-doxygen/html/html/search/functions_e.js +2 -1
  347. package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
  348. package/SVF-doxygen/html/html/search/typedefs_2.js +1 -1
  349. package/SVF-doxygen/html/html/search/typedefs_4.js +2 -1
  350. package/SVF-doxygen/html/html/search/typedefs_5.js +2 -1
  351. package/SVF-doxygen/html/html/search/typedefs_b.js +1 -1
  352. package/SVF-doxygen/html/html/search/typedefs_f.js +3 -3
  353. package/SVF-doxygen/html/html/search/variables_10.js +1 -1
  354. package/SVF-doxygen/html/html/search/variables_14.js +2 -2
  355. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  356. package/SVF-doxygen/html/html/search/variables_3.js +5 -5
  357. package/SVF-doxygen/html/html/search/variables_6.js +3 -3
  358. package/SVF-doxygen/html/html/search/variables_9.js +1 -1
  359. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  360. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  361. package/SVF-doxygen/html/html/structSVF_1_1MemRegion_1_1equalMemRegion.html +3 -3
  362. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1equalNodeBS-members.html +81 -0
  363. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1equalNodeBS.html +134 -0
  364. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1equalPointsTo.html +3 -3
  365. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  366. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +1 -1
  367. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PAG_01_5_01_4.html +1 -1
  368. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  369. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  370. package/include/Graphs/SVFG.h +4 -4
  371. package/include/Graphs/SVFGOPT.h +4 -4
  372. package/include/MSSA/MemPartition.h +10 -10
  373. package/include/MSSA/MemRegion.h +40 -64
  374. package/include/MSSA/MemSSA.h +1 -4
  375. package/include/MSSA/SVFGBuilder.h +1 -0
  376. package/include/MemoryModel/LocationSet.h +3 -3
  377. package/include/MemoryModel/PersistentPointsToCache.h +19 -8
  378. package/include/MemoryModel/PointerAnalysisImpl.h +3 -4
  379. package/include/Util/SVFUtil.h +44 -1
  380. package/lib/Graphs/SVFG.cpp +12 -12
  381. package/lib/Graphs/SVFGOPT.cpp +6 -6
  382. package/lib/MSSA/MemPartition.cpp +31 -31
  383. package/lib/MSSA/MemRegion.cpp +59 -35
  384. package/lib/MSSA/MemSSA.cpp +5 -0
  385. package/lib/MemoryModel/LocationSet.cpp +2 -2
  386. package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -4
  387. package/lib/Util/SVFUtil.cpp +3 -2
  388. package/package.json +1 -1
@@ -30,10 +30,12 @@
30
30
  #ifndef MEMORYREGION_H_
31
31
  #define MEMORYREGION_H_
32
32
 
33
- #include "MemoryModel/PointerAnalysisImpl.h"
33
+ #include "Graphs/PAG.h"
34
34
  #include "Graphs/PTACallGraph.h"
35
+ #include "Util/SCC.h"
35
36
  #include "Util/WorkList.h"
36
37
  #include "Graphs/ICFG.h"
38
+ #include "MemoryModel/PointerAnalysisImpl.h"
37
39
 
38
40
  #include <set>
39
41
 
@@ -54,11 +56,11 @@ private:
54
56
  /// region ID 0 is reserved
55
57
  static Size_t totalMRNum;
56
58
  MRID rid;
57
- const PointsTo cptsSet;
59
+ const NodeBS cptsSet;
58
60
 
59
61
  public:
60
62
  /// Constructor
61
- MemRegion(const PointsTo& cp) :
63
+ MemRegion(const NodeBS& cp) :
62
64
  rid(++totalMRNum), cptsSet(cp)
63
65
  {
64
66
  }
@@ -73,7 +75,7 @@ public:
73
75
  return rid;
74
76
  }
75
77
  /// Return points-to
76
- inline const PointsTo &getPointsTo() const
78
+ inline const NodeBS &getPointsTo() const
77
79
  {
78
80
  return cptsSet;
79
81
  }
@@ -87,7 +89,7 @@ public:
87
89
  {
88
90
  std::string str;
89
91
  str += "pts{";
90
- for (PointsTo::iterator ii = cptsSet.begin(), ie = cptsSet.end();
92
+ for (NodeBS::iterator ii = cptsSet.begin(), ie = cptsSet.end();
91
93
  ii != ie; ii++)
92
94
  {
93
95
  char int2str[16];
@@ -106,17 +108,9 @@ public:
106
108
  {
107
109
  bool operator()(const MemRegion* lhs, const MemRegion* rhs) const
108
110
  {
109
- return SVFUtil::cmpPts(lhs->getPointsTo(), rhs->getPointsTo());
111
+ return SVFUtil::cmpNodeBS(lhs->getPointsTo(), rhs->getPointsTo());
110
112
  }
111
113
  } equalMemRegion;
112
-
113
- typedef struct equalPointsTo
114
- {
115
- bool operator()(const PointsTo& lhs, const PointsTo& rhs) const
116
- {
117
- return SVFUtil::cmpPts(lhs, rhs);
118
- }
119
- } equalPointsTo;
120
114
  //@}
121
115
 
122
116
  /// Return memory object number inside a region
@@ -141,9 +135,10 @@ public:
141
135
  ///Define mem region set
142
136
  typedef OrderedSet<const MemRegion*, MemRegion::equalMemRegion> MRSet;
143
137
  typedef Map<const PAGEdge*, const SVFFunction*> PAGEdgeToFunMap;
144
- typedef OrderedSet<PointsTo, SVFUtil::equalPointsTo> PointsToList;
145
- typedef Map<const SVFFunction*, PointsToList > FunToPointsToMap;
146
- typedef OrderedMap<PointsTo, PointsTo, SVFUtil::equalPointsTo > PtsToRepPtsSetMap;
138
+ typedef OrderedSet<NodeBS, SVFUtil::equalNodeBS> PointsToList;
139
+ typedef Map<const SVFFunction*, NodeBS> FunToPointsToMap;
140
+ typedef Map<const SVFFunction*, PointsToList> FunToPointsTosMap;
141
+ typedef OrderedMap<NodeBS, NodeBS, SVFUtil::equalNodeBS> PtsToRepPtsSetMap;
147
142
 
148
143
  /// Map a function to its region set
149
144
  typedef Map<const SVFFunction*, MRSet> FunToMRsMap;
@@ -157,9 +152,9 @@ public:
157
152
 
158
153
  /// Map loads/stores/callsites to their cpts set
159
154
  //@{
160
- typedef Map<const LoadPE*, PointsTo> LoadsToPointsToMap;
161
- typedef Map<const StorePE*, PointsTo> StoresToPointsToMap;
162
- typedef Map<const CallBlockNode*, PointsTo> CallSiteToPointsToMap;
155
+ typedef Map<const LoadPE*, NodeBS> LoadsToPointsToMap;
156
+ typedef Map<const StorePE*, NodeBS> StoresToPointsToMap;
157
+ typedef Map<const CallBlockNode*, NodeBS> CallSiteToPointsToMap;
163
158
  //@}
164
159
 
165
160
  /// Maps Mod-Ref analysis
@@ -183,14 +178,14 @@ public:
183
178
  }
184
179
 
185
180
  /// Get superset cpts set
186
- inline const PointsTo& getRepPointsTo(const PointsTo& cpts) const
181
+ inline const NodeBS& getRepPointsTo(const NodeBS& cpts) const
187
182
  {
188
183
  PtsToRepPtsSetMap::const_iterator it = cptsToRepCPtsMap.find(cpts);
189
184
  assert(it!=cptsToRepCPtsMap.end() && "can not find superset of cpts??");
190
185
  return it->second;
191
186
  }
192
187
  /// Get a memory region according to cpts
193
- const MemRegion* getMR(const PointsTo& cpts) const;
188
+ const MemRegion* getMR(const NodeBS& cpts) const;
194
189
 
195
190
  private:
196
191
 
@@ -219,22 +214,22 @@ private:
219
214
  CallSiteToPointsToMap callsiteToModPointsToMap;
220
215
 
221
216
  /// Map a function to all of its conditional points-to sets
222
- FunToPointsToMap funToPointsToMap;
217
+ FunToPointsTosMap funToPointsToMap;
223
218
  /// Map a PAGEdge to its fun
224
219
  PAGEdgeToFunMap pagEdgeToFunMap;
225
220
 
226
221
  /// Map a function to its indirect uses of memory objects
227
- FunToNodeBSMap funToRefsMap;
222
+ FunToPointsToMap funToRefsMap;
228
223
  /// Map a function to its indirect defs of memory objects
229
- FunToNodeBSMap funToModsMap;
224
+ FunToPointsToMap funToModsMap;
230
225
  /// Map a callsite to its indirect uses of memory objects
231
- CallSiteToNodeBSMap csToRefsMap;
226
+ CallSiteToPointsToMap csToRefsMap;
232
227
  /// Map a callsite to its indirect defs of memory objects
233
- CallSiteToNodeBSMap csToModsMap;
228
+ CallSiteToPointsToMap csToModsMap;
234
229
  /// Map a callsite to all its object might pass into its callees
235
- CallSiteToNodeBSMap csToCallSiteArgsPtsMap;
230
+ CallSiteToPointsToMap csToCallSiteArgsPtsMap;
236
231
  /// Map a callsite to all its object might return from its callees
237
- CallSiteToNodeBSMap csToCallSiteRetPtsMap;
232
+ CallSiteToPointsToMap csToCallSiteRetPtsMap;
238
233
 
239
234
  /// Map a pointer to its cached points-to chain;
240
235
  NodeToPTSSMap cachedPtsChainMap;
@@ -272,12 +267,7 @@ private:
272
267
  void getCallGraphSCCRevTopoOrder(WorkList& worklist);
273
268
 
274
269
  protected:
275
- MRGenerator(BVDataPTAImpl* p, bool ptrOnly) :
276
- pta(p), ptrOnlyMSSA(ptrOnly)
277
- {
278
- callGraph = pta->getPTACallGraph();
279
- callGraphSCC = new SCC(callGraph);
280
- }
270
+ MRGenerator(BVDataPTAImpl* p, bool ptrOnly);
281
271
 
282
272
  /// A set of All memory regions
283
273
  MRSet memRegSet;
@@ -285,7 +275,7 @@ protected:
285
275
  PtsToRepPtsSetMap cptsToRepCPtsMap;
286
276
 
287
277
  /// Generate a memory region and put in into functions which use it
288
- void createMR(const SVFFunction* fun, const PointsTo& cpts);
278
+ void createMR(const SVFFunction* fun, const NodeBS& cpts);
289
279
 
290
280
  /// Collect all global variables for later escape analysis
291
281
  void collectGlobals();
@@ -303,15 +293,15 @@ protected:
303
293
  virtual void updateAliasMRs();
304
294
 
305
295
  /// Given a condition pts, insert into cptsToRepCPtsMap for region generation
306
- virtual void sortPointsTo(const PointsTo& cpts);
296
+ virtual void sortPointsTo(const NodeBS& cpts);
307
297
 
308
298
  /// Whether a region is aliased with a conditional points-to
309
- virtual inline bool isAliasedMR(const PointsTo& cpts, const MemRegion* mr)
299
+ virtual inline bool isAliasedMR(const NodeBS& cpts, const MemRegion* mr)
310
300
  {
311
301
  return mr->getPointsTo().intersects(cpts);
312
302
  }
313
303
  /// Get all aliased mem regions from function fun according to cpts
314
- virtual inline void getAliasMemRegions(MRSet& aliasMRs, const PointsTo& cpts, const SVFFunction* fun)
304
+ virtual inline void getAliasMemRegions(MRSet& aliasMRs, const NodeBS& cpts, const SVFFunction* fun)
315
305
  {
316
306
  for(MRSet::const_iterator it = funToMRsMap[fun].begin(), eit = funToMRsMap[fun].end(); it!=eit; ++it)
317
307
  {
@@ -321,14 +311,14 @@ protected:
321
311
  }
322
312
 
323
313
  /// Get memory regions for a load statement according to cpts.
324
- virtual inline void getMRsForLoad(MRSet& aliasMRs, const PointsTo& cpts, const SVFFunction*)
314
+ virtual inline void getMRsForLoad(MRSet& aliasMRs, const NodeBS& cpts, const SVFFunction*)
325
315
  {
326
316
  const MemRegion* mr = getMR(cpts);
327
317
  aliasMRs.insert(mr);
328
318
  }
329
319
 
330
320
  /// Get memory regions for call site ref according to cpts.
331
- virtual inline void getMRsForCallSiteRef(MRSet& aliasMRs, const PointsTo& cpts, const SVFFunction*)
321
+ virtual inline void getMRsForCallSiteRef(MRSet& aliasMRs, const NodeBS& cpts, const SVFFunction*)
332
322
  {
333
323
  const MemRegion* mr = getMR(cpts);
334
324
  aliasMRs.insert(mr);
@@ -343,24 +333,24 @@ protected:
343
333
 
344
334
  /// Add cpts to store/load
345
335
  //@{
346
- inline void addCPtsToStore(PointsTo& cpts, const StorePE *st, const SVFFunction* fun)
336
+ inline void addCPtsToStore(NodeBS& cpts, const StorePE *st, const SVFFunction* fun)
347
337
  {
348
338
  storesToPointsToMap[st] = cpts;
349
339
  funToPointsToMap[fun].insert(cpts);
350
340
  addModSideEffectOfFunction(fun,cpts);
351
341
  }
352
- inline void addCPtsToLoad(PointsTo& cpts, const LoadPE *ld, const SVFFunction* fun)
342
+ inline void addCPtsToLoad(NodeBS& cpts, const LoadPE *ld, const SVFFunction* fun)
353
343
  {
354
344
  loadsToPointsToMap[ld] = cpts;
355
345
  funToPointsToMap[fun].insert(cpts);
356
346
  addRefSideEffectOfFunction(fun,cpts);
357
347
  }
358
- inline void addCPtsToCallSiteRefs(PointsTo& cpts, const CallBlockNode* cs)
348
+ inline void addCPtsToCallSiteRefs(NodeBS& cpts, const CallBlockNode* cs)
359
349
  {
360
350
  callsiteToRefPointsToMap[cs] |= cpts;
361
351
  funToPointsToMap[cs->getCaller()].insert(cpts);
362
352
  }
363
- inline void addCPtsToCallSiteMods(PointsTo& cpts, const CallBlockNode* cs)
353
+ inline void addCPtsToCallSiteMods(NodeBS& cpts, const CallBlockNode* cs)
364
354
  {
365
355
  callsiteToModPointsToMap[cs] |= cpts;
366
356
  funToPointsToMap[cs->getCaller()].insert(cpts);
@@ -373,7 +363,7 @@ protected:
373
363
  {
374
364
  return funToPointsToMap[fun];
375
365
  }
376
- inline FunToPointsToMap& getFunToPointsToList()
366
+ inline FunToPointsTosMap& getFunToPointsToList()
377
367
  {
378
368
  return funToPointsToMap;
379
369
  }
@@ -475,29 +465,15 @@ public:
475
465
  }
476
466
  //@}
477
467
  /// Whether this instruction has PAG Edge
478
- inline bool hasPAGEdgeList(const Instruction* inst)
479
- {
480
- PAG* pag = pta->getPAG();
481
- if (ptrOnlyMSSA)
482
- return pag->hasPTAPAGEdgeList(pag->getICFG()->getBlockICFGNode(inst));
483
- else
484
- return pag->hasPAGEdgeList(pag->getICFG()->getBlockICFGNode(inst));
485
- }
468
+ bool hasPAGEdgeList(const Instruction* inst);
486
469
  /// Given an instruction, get all its the PAGEdge (statement) in sequence
487
- inline PAGEdgeList& getPAGEdgesFromInst(const Instruction* inst)
488
- {
489
- PAG* pag = pta->getPAG();
490
- if (ptrOnlyMSSA)
491
- return pag->getInstPTAPAGEdgeList(pag->getICFG()->getBlockICFGNode(inst));
492
- else
493
- return pag->getInstPAGEdgeList(pag->getICFG()->getBlockICFGNode(inst));
494
- }
470
+ PAGEdgeList& getPAGEdgesFromInst(const Instruction* inst);
495
471
 
496
472
  /// getModRefInfo APIs
497
473
  //@{
498
474
  /// Collect mod ref for external callsite other than heap alloc external call
499
- PointsTo getModInfoForCall(const CallBlockNode* cs);
500
- PointsTo getRefInfoForCall(const CallBlockNode* cs);
475
+ NodeBS getModInfoForCall(const CallBlockNode* cs);
476
+ NodeBS getRefInfoForCall(const CallBlockNode* cs);
501
477
  ModRefInfo getModRefInfo(const CallBlockNode* cs);
502
478
  ModRefInfo getModRefInfo(const CallBlockNode* cs, const Value* V);
503
479
  ModRefInfo getModRefInfo(const CallBlockNode* cs1, const CallBlockNode* cs2);
@@ -310,10 +310,7 @@ public:
310
310
  destroy();
311
311
  }
312
312
  /// Return PAG
313
- inline PAG* getPAG()
314
- {
315
- return pta->getPAG();
316
- }
313
+ inline PAG* getPAG();
317
314
  /// Return PTA
318
315
  inline BVDataPTAImpl* getPTA() const
319
316
  {
@@ -30,6 +30,7 @@
30
30
  #ifndef ANDERSENMEMSSA_H_
31
31
  #define ANDERSENMEMSSA_H_
32
32
 
33
+ #include "MemoryModel/PointerAnalysis.h"
33
34
  #include "Graphs/SVFGOPT.h"
34
35
 
35
36
  namespace SVF
@@ -230,8 +230,8 @@ public:
230
230
  /// Check relations of two location sets
231
231
  static inline LSRelation checkRelation(const LocationSet& LHS, const LocationSet& RHS)
232
232
  {
233
- PointsTo lhsLocations = LHS.computeAllLocations();
234
- PointsTo rhsLocations = RHS.computeAllLocations();
233
+ NodeBS lhsLocations = LHS.computeAllLocations();
234
+ NodeBS rhsLocations = RHS.computeAllLocations();
235
235
  if (lhsLocations.intersects(rhsLocations))
236
236
  {
237
237
  if (lhsLocations == rhsLocations)
@@ -273,7 +273,7 @@ private:
273
273
  bool increaseIfNotReachUpperBound(std::vector<NodeID>& indices, const ElemNumStridePairVec& pairVec) const;
274
274
 
275
275
  /// Compute all possible locations according to offset and number-stride pairs.
276
- PointsTo computeAllLocations() const;
276
+ NodeBS computeAllLocations() const;
277
277
 
278
278
  /// Return greatest common divisor
279
279
  inline unsigned gcd (unsigned n1, unsigned n2) const
@@ -37,10 +37,10 @@ public:
37
37
  static PointsToID emptyPointsToId(void) { return 0; };
38
38
 
39
39
  public:
40
- PersistentPointsToCache(const Data &emptyData) : idCounter(1)
40
+ PersistentPointsToCache(void) : idCounter(1)
41
41
  {
42
- idToPts.push_back(new Data(emptyData));
43
- ptsToId[emptyData] = emptyPointsToId();
42
+ idToPts.push_back(new Data());
43
+ ptsToId[Data()] = emptyPointsToId();
44
44
 
45
45
  initStats();
46
46
  }
@@ -48,14 +48,13 @@ public:
48
48
  /// Resets the cache removing everything except the emptyData it was initialised with.
49
49
  void reset(void)
50
50
  {
51
- const Data *emptyData = idToPts[emptyPointsToId()];
52
- for (const Data *d : idToPts) free(d);
51
+ for (const Data *d : idToPts) delete d;
53
52
  idToPts.clear();
54
53
  ptsToId.clear();
55
54
 
56
55
  // Put the empty data back in.
57
- ptsToId[*emptyData] = emptyPointsToId();
58
- idToPts.push_back(emptyData);
56
+ ptsToId[Data()] = emptyPointsToId();
57
+ idToPts.push_back(new Data());
59
58
 
60
59
  unionCache.clear();
61
60
  complementCache.clear();
@@ -305,6 +304,17 @@ public:
305
304
  std::cout.flush();
306
305
  }
307
306
 
307
+ /// Returns all points-to sets stored by this cache as keys to a map.
308
+ /// Values are all 1. We use the map to be more compatible with getAllPts
309
+ /// in the various PTDatas. Performance is a non-issue (for now) since this
310
+ /// is just used for evaluation's sake.
311
+ Map<Data, unsigned> getAllPts(void)
312
+ {
313
+ Map<Data, unsigned> allPts;
314
+ for (const Data *d : idToPts) allPts[*d] = 1;
315
+ return allPts;
316
+ }
317
+
308
318
  // TODO: ref count API for garbage collection.
309
319
 
310
320
  private:
@@ -378,7 +388,8 @@ private:
378
388
  /// Reverse of idToPts.
379
389
  /// Elements are only added through push_back, so the number of elements
380
390
  /// stored is the size of the vector.
381
- std::vector<const Data *> idToPts;
391
+ /// Not const so we can remap.
392
+ std::vector<Data *> idToPts;
382
393
  /// Maps points-to sets to their corresponding ID.
383
394
  PTSToIDMap ptsToId;
384
395
 
@@ -67,9 +67,6 @@ public:
67
67
  Persistent,
68
68
  };
69
69
 
70
- // TODO: make this not static?
71
- static PersistentPointsToCache<PointsTo> ptCache;
72
-
73
70
  /// Constructor
74
71
  BVDataPTAImpl(PAG* pag, PointerAnalysis::PTATY type, bool alias_check = true);
75
72
 
@@ -79,7 +76,7 @@ public:
79
76
  destroy();
80
77
  }
81
78
 
82
- static inline PersistentPointsToCache<PointsTo> &getPtCache(void)
79
+ inline PersistentPointsToCache<PointsTo> &getPtCache(void)
83
80
  {
84
81
  return ptCache;
85
82
  }
@@ -215,6 +212,8 @@ private:
215
212
  /// Points-to data
216
213
  PTDataTy* ptD;
217
214
 
215
+ PersistentPointsToCache<PointsTo> ptCache;
216
+
218
217
  public:
219
218
  /// Interface expose to users of our pointer analysis, given Location infos
220
219
  virtual AliasResult alias(const MemoryLocation &LocA,
@@ -117,6 +117,24 @@ inline bool cmpPts (const PointsTo& lpts,const PointsTo& rpts)
117
117
  }
118
118
  }
119
119
 
120
+ inline bool cmpNodeBS(const NodeBS& lpts,const NodeBS& rpts)
121
+ {
122
+ if (lpts.count() != rpts.count())
123
+ return (lpts.count() < rpts.count());
124
+ else
125
+ {
126
+ NodeBS::iterator bit = lpts.begin(), eit = lpts.end();
127
+ NodeBS::iterator rbit = rpts.begin(), reit = rpts.end();
128
+ for (; bit != eit && rbit != reit; bit++, rbit++)
129
+ {
130
+ if (*bit != *rbit)
131
+ return (*bit < *rbit);
132
+ }
133
+
134
+ return false;
135
+ }
136
+ }
137
+
120
138
  typedef struct equalPointsTo
121
139
  {
122
140
  bool operator()(const PointsTo& lhs, const PointsTo& rhs) const
@@ -125,7 +143,22 @@ typedef struct equalPointsTo
125
143
  }
126
144
  } equalPointsTo;
127
145
 
128
- typedef OrderedSet<PointsTo, equalPointsTo> PointsToList;
146
+ typedef struct equalNodeBS
147
+ {
148
+ bool operator()(const NodeBS& lhs, const NodeBS& rhs) const
149
+ {
150
+ return SVFUtil::cmpNodeBS(lhs, rhs);
151
+ }
152
+ } equalNodeBS;
153
+
154
+ inline NodeBS ptsToNodeBS(const PointsTo &pts)
155
+ {
156
+ NodeBS nbs;
157
+ for (const NodeID o : pts) nbs.set(o);
158
+ return nbs;
159
+ }
160
+
161
+ typedef OrderedSet<PointsTo, equalNodeBS> PointsToList;
129
162
  void dumpPointsToList(const PointsToList& ptl);
130
163
 
131
164
  inline bool isIntrinsicFun(const Function* func)
@@ -241,6 +274,16 @@ std::string getSourceLocOfFunction(const Function *F);
241
274
  const std::string value2String(const Value* value);
242
275
  //@}
243
276
 
277
+ /// Given a map mapping points-to sets to a count, adds from into to.
278
+ template <typename Data>
279
+ void mergePtsOccMaps(Map<Data, unsigned> &to, const Map<Data, unsigned> from)
280
+ {
281
+ for (const typename Map<Data, unsigned>::value_type &ptocc : from)
282
+ {
283
+ to[ptocc.first] += ptocc.second;
284
+ }
285
+ }
286
+
244
287
  /// Inserts an element into a Set/CondSet (with ::insert).
245
288
  template <typename Key, typename KeySet>
246
289
  inline void insertKey(const Key &key, KeySet &keySet)
@@ -33,6 +33,7 @@
33
33
  #include "Graphs/SVFGOPT.h"
34
34
  #include "Graphs/SVFGStat.h"
35
35
  #include "Graphs/ICFG.h"
36
+ #include "MemoryModel/PointerAnalysisImpl.h"
36
37
  #include <fstream>
37
38
 
38
39
 
@@ -420,14 +421,13 @@ void SVFG::connectFromGlobalToProgEntry()
420
421
  if (const StoreSVFGNode* store = SVFUtil::dyn_cast<StoreSVFGNode>(*storeIt))
421
422
  {
422
423
  /// connect this store to main function entry
423
- const PointsTo& storePts = mssa->getPTA()->getPts(
424
- store->getPAGDstNodeID());
424
+ const NodeBS& storePts = mssa->getPTA()->getPts(store->getPAGDstNodeID());
425
425
 
426
- for (NodeBS::iterator fiIt = formalIns.begin(), fiEit =
426
+ for (FormalINSVFGNodeSet::iterator fiIt = formalIns.begin(), fiEit =
427
427
  formalIns.end(); fiIt != fiEit; ++fiIt)
428
428
  {
429
429
  NodeID formalInID = *fiIt;
430
- PointsTo formalInPts = ((FormalINSVFGNode*) getSVFGNode(formalInID))->getPointsTo();
430
+ NodeBS formalInPts = ((FormalINSVFGNode*) getSVFGNode(formalInID))->getPointsTo();
431
431
 
432
432
  formalInPts &= storePts;
433
433
  if (formalInPts.empty())
@@ -443,7 +443,7 @@ void SVFG::connectFromGlobalToProgEntry()
443
443
  /*
444
444
  * Add def-use edges of a memory region between two statements
445
445
  */
446
- SVFGEdge* SVFG::addIntraIndirectVFEdge(NodeID srcId, NodeID dstId, const PointsTo& cpts)
446
+ SVFGEdge* SVFG::addIntraIndirectVFEdge(NodeID srcId, NodeID dstId, const NodeBS& cpts)
447
447
  {
448
448
  SVFGNode* srcNode = getSVFGNode(srcId);
449
449
  SVFGNode* dstNode = getSVFGNode(dstId);
@@ -465,7 +465,7 @@ SVFGEdge* SVFG::addIntraIndirectVFEdge(NodeID srcId, NodeID dstId, const PointsT
465
465
  /*!
466
466
  * Add def-use edges of a memory region between two may-happen-in-parallel statements for multithreaded program
467
467
  */
468
- SVFGEdge* SVFG::addThreadMHPIndirectVFEdge(NodeID srcId, NodeID dstId, const PointsTo& cpts)
468
+ SVFGEdge* SVFG::addThreadMHPIndirectVFEdge(NodeID srcId, NodeID dstId, const NodeBS& cpts)
469
469
  {
470
470
  SVFGNode* srcNode = getSVFGNode(srcId);
471
471
  SVFGNode* dstNode = getSVFGNode(dstId);
@@ -485,7 +485,7 @@ SVFGEdge* SVFG::addThreadMHPIndirectVFEdge(NodeID srcId, NodeID dstId, const Poi
485
485
  /*
486
486
  * Add def-use call edges of a memory region between two statements
487
487
  */
488
- SVFGEdge* SVFG::addCallIndirectVFEdge(NodeID srcId, NodeID dstId, const PointsTo& cpts,CallSiteID csId)
488
+ SVFGEdge* SVFG::addCallIndirectVFEdge(NodeID srcId, NodeID dstId, const NodeBS& cpts,CallSiteID csId)
489
489
  {
490
490
  SVFGNode* srcNode = getSVFGNode(srcId);
491
491
  SVFGNode* dstNode = getSVFGNode(dstId);
@@ -505,7 +505,7 @@ SVFGEdge* SVFG::addCallIndirectVFEdge(NodeID srcId, NodeID dstId, const PointsTo
505
505
  /*
506
506
  * Add def-use return edges of a memory region between two statements
507
507
  */
508
- SVFGEdge* SVFG::addRetIndirectVFEdge(NodeID srcId, NodeID dstId, const PointsTo& cpts,CallSiteID csId)
508
+ SVFGEdge* SVFG::addRetIndirectVFEdge(NodeID srcId, NodeID dstId, const NodeBS& cpts,CallSiteID csId)
509
509
  {
510
510
  SVFGNode* srcNode = getSVFGNode(srcId);
511
511
  SVFGNode* dstNode = getSVFGNode(dstId);
@@ -527,8 +527,8 @@ SVFGEdge* SVFG::addRetIndirectVFEdge(NodeID srcId, NodeID dstId, const PointsTo&
527
527
  */
528
528
  SVFGEdge* SVFG::addInterIndirectVFCallEdge(const ActualINSVFGNode* src, const FormalINSVFGNode* dst,CallSiteID csId)
529
529
  {
530
- PointsTo cpts1 = src->getPointsTo();
531
- PointsTo cpts2 = dst->getPointsTo();
530
+ NodeBS cpts1 = src->getPointsTo();
531
+ NodeBS cpts2 = dst->getPointsTo();
532
532
  if(cpts1.intersects(cpts2))
533
533
  {
534
534
  cpts1 &= cpts2;
@@ -543,8 +543,8 @@ SVFGEdge* SVFG::addInterIndirectVFCallEdge(const ActualINSVFGNode* src, const Fo
543
543
  SVFGEdge* SVFG::addInterIndirectVFRetEdge(const FormalOUTSVFGNode* src, const ActualOUTSVFGNode* dst,CallSiteID csId)
544
544
  {
545
545
 
546
- PointsTo cpts1 = src->getPointsTo();
547
- PointsTo cpts2 = dst->getPointsTo();
546
+ NodeBS cpts1 = src->getPointsTo();
547
+ NodeBS cpts2 = dst->getPointsTo();
548
548
  if(cpts1.intersects(cpts2))
549
549
  {
550
550
  cpts1 &= cpts2;
@@ -65,7 +65,7 @@ void SVFGOPT::buildSVFG()
65
65
  /*!
66
66
  *
67
67
  */
68
- SVFGEdge* SVFGOPT::addCallIndirectSVFGEdge(NodeID srcId, NodeID dstId, CallSiteID csid, const PointsTo& cpts)
68
+ SVFGEdge* SVFGOPT::addCallIndirectSVFGEdge(NodeID srcId, NodeID dstId, CallSiteID csid, const NodeBS& cpts)
69
69
  {
70
70
  if (Options::ContextInsensitive)
71
71
  return addIntraIndirectVFEdge(srcId, dstId, cpts);
@@ -76,7 +76,7 @@ SVFGEdge* SVFGOPT::addCallIndirectSVFGEdge(NodeID srcId, NodeID dstId, CallSiteI
76
76
  /*!
77
77
  *
78
78
  */
79
- SVFGEdge* SVFGOPT::addRetIndirectSVFGEdge(NodeID srcId, NodeID dstId, CallSiteID csid, const PointsTo& cpts)
79
+ SVFGEdge* SVFGOPT::addRetIndirectSVFGEdge(NodeID srcId, NodeID dstId, CallSiteID csid, const NodeBS& cpts)
80
80
  {
81
81
  if (Options::ContextInsensitive)
82
82
  return addIntraIndirectVFEdge(srcId, dstId, cpts);
@@ -207,7 +207,7 @@ void SVFGOPT::retargetEdgesOfAInFOut(SVFGNode* node)
207
207
  assert(node->getInEdges().size() == 1 && "actual-in/formal-out can only have one incoming edge as its def size");
208
208
 
209
209
  SVFGNode* def = nullptr;
210
- PointsTo inPointsTo;
210
+ NodeBS inPointsTo;
211
211
 
212
212
  SVFGNode::const_iterator it = node->InEdgeBegin();
213
213
  SVFGNode::const_iterator eit = node->InEdgeEnd();
@@ -227,7 +227,7 @@ void SVFGOPT::retargetEdgesOfAInFOut(SVFGNode* node)
227
227
  for (; it != eit; ++it)
228
228
  {
229
229
  const IndirectSVFGEdge* outEdge = SVFUtil::cast<IndirectSVFGEdge>(*it);
230
- PointsTo intersection = inPointsTo;
230
+ NodeBS intersection = inPointsTo;
231
231
  intersection &= outEdge->getPointsTo();
232
232
 
233
233
  if (intersection.empty())
@@ -263,7 +263,7 @@ void SVFGOPT::retargetEdgesOfAOutFIn(SVFGNode* node)
263
263
  {
264
264
  const IndirectSVFGEdge* outEdge = SVFUtil::cast<IndirectSVFGEdge>(*outIt);
265
265
 
266
- PointsTo intersection = inEdge->getPointsTo();
266
+ NodeBS intersection = inEdge->getPointsTo();
267
267
  intersection &= outEdge->getPointsTo();
268
268
  if (intersection.empty())
269
269
  continue;
@@ -530,7 +530,7 @@ bool SVFGOPT::addNewSVFGEdge(NodeID srcId, NodeID dstId, const SVFGEdge* preEdge
530
530
  const IndirectSVFGEdge* preIndEdge = SVFUtil::cast<IndirectSVFGEdge>(preEdge);
531
531
  const IndirectSVFGEdge* succIndEdge = SVFUtil::cast<IndirectSVFGEdge>(succEdge);
532
532
 
533
- PointsTo intersection = preIndEdge->getPointsTo();
533
+ NodeBS intersection = preIndEdge->getPointsTo();
534
534
  intersection &= succIndEdge->getPointsTo();
535
535
 
536
536
  if (intersection.empty())