svf-tools 1.0.281 → 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 (392) hide show
  1. package/Dockerfile +8 -5
  2. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
  3. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +2 -2
  4. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +8 -8
  5. package/SVF-doxygen/html/html/Andersen_8h_source.html +5 -5
  6. package/SVF-doxygen/html/html/BasicTypes_8h_source.html +2 -2
  7. package/SVF-doxygen/html/html/CHG_8cpp_source.html +5 -5
  8. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +2 -2
  9. package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +1 -1
  10. package/SVF-doxygen/html/html/Conditions_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
  12. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
  13. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +4 -4
  14. package/SVF-doxygen/html/html/CxtStmt_8h_source.html +1 -1
  15. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +1 -1
  16. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +3 -3
  17. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +3 -3
  18. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +1 -1
  19. package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +2 -2
  20. package/SVF-doxygen/html/html/ExternalPAG_8cpp_source.html +1 -1
  21. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +2 -2
  22. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
  23. package/SVF-doxygen/html/html/FileChecker_8cpp_source.html +3 -3
  24. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
  25. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +3 -3
  26. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +1 -1
  27. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +5 -5
  28. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +9 -9
  29. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +8 -8
  30. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
  31. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +5 -5
  32. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
  33. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +1 -1
  34. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +6 -6
  35. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +2 -2
  36. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +4 -4
  37. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +1 -1
  38. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +7 -7
  39. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +3 -3
  40. package/SVF-doxygen/html/html/LocationSet_8h_source.html +3 -3
  41. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
  42. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +7 -7
  43. package/SVF-doxygen/html/html/MHP_8cpp_source.html +3 -3
  44. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +5 -5
  45. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
  46. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -1
  47. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +7 -7
  48. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +5 -5
  49. package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
  50. package/SVF-doxygen/html/html/MemModel_8cpp_source.html +1 -1
  51. package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +15 -15
  52. package/SVF-doxygen/html/html/MemPartition_8h_source.html +11 -11
  53. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +103 -34
  54. package/SVF-doxygen/html/html/MemRegion_8h.html +3 -3
  55. package/SVF-doxygen/html/html/MemRegion_8h_source.html +97 -109
  56. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +43 -42
  57. package/SVF-doxygen/html/html/MemSSA_8h_source.html +46 -47
  58. package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +3 -3
  59. package/SVF-doxygen/html/html/Options_8cpp_source.html +1 -1
  60. package/SVF-doxygen/html/html/PAGBuilder_8cpp_source.html +5 -5
  61. package/SVF-doxygen/html/html/PAG_8cpp_source.html +3 -3
  62. package/SVF-doxygen/html/html/PCG_8cpp_source.html +2 -2
  63. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +2 -2
  64. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
  65. package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +29 -29
  66. package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +7 -7
  67. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp.html +2 -2
  68. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +19 -21
  69. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +81 -81
  70. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +8 -8
  71. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +1 -1
  72. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +8 -8
  73. package/SVF-doxygen/html/html/SVFGBuilder_8h.html +2 -1
  74. package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +20 -19
  75. package/SVF-doxygen/html/html/SVFGEdge_8h_source.html +3 -3
  76. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +3 -3
  77. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +7 -7
  78. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +3 -4
  79. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +21 -21
  80. package/SVF-doxygen/html/html/SVFG_8cpp.html +1 -0
  81. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +46 -45
  82. package/SVF-doxygen/html/html/SVFG_8h_source.html +12 -13
  83. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +1 -1
  84. package/SVF-doxygen/html/html/SVFUtil_8cpp.html +9 -8
  85. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +34 -33
  86. package/SVF-doxygen/html/html/SVFUtil_8h.html +14 -2
  87. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +43 -36
  88. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +1 -1
  89. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +3 -3
  90. package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +2 -2
  91. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
  92. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +6 -6
  93. package/SVF-doxygen/html/html/TCT_8cpp_source.html +2 -2
  94. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +2 -2
  95. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +2 -2
  96. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +1 -1
  97. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +9 -9
  98. package/SVF-doxygen/html/html/VFG_8cpp_source.html +3 -3
  99. package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
  100. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
  101. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +3 -3
  102. package/SVF-doxygen/html/html/annotated.html +16 -16
  103. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +5 -5
  104. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +4 -4
  105. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
  106. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
  107. package/SVF-doxygen/html/html/classSVF_1_1AddrPE.html +1 -1
  108. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +58 -59
  109. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +19 -22
  110. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +48 -49
  111. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +9 -12
  112. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +60 -61
  113. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +2 -5
  114. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +63 -64
  115. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +2 -5
  116. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +59 -60
  117. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +2 -5
  118. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +63 -64
  119. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +5 -8
  120. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +67 -68
  121. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +2 -5
  122. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +3 -3
  123. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +58 -59
  124. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +2 -5
  125. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType-members.html +64 -65
  126. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType.html +4 -7
  127. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +2 -2
  128. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +2 -2
  129. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +135 -138
  130. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +1 -1
  131. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +3 -3
  132. package/SVF-doxygen/html/html/classSVF_1_1BranchCondManager.html +2 -2
  133. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +6 -6
  134. package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +2 -2
  135. package/SVF-doxygen/html/html/classSVF_1_1CallCHI.html +2 -2
  136. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +2 -2
  137. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +2 -2
  138. package/SVF-doxygen/html/html/classSVF_1_1CallMU.html +2 -2
  139. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  140. package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +1 -1
  141. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +3 -3
  142. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +115 -115
  143. package/SVF-doxygen/html/html/classSVF_1_1CondPointsToSet.html +1 -1
  144. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +10 -10
  145. package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +1 -1
  146. package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
  148. package/SVF-doxygen/html/html/classSVF_1_1CxtThreadStmt.html +1 -1
  149. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +1 -1
  150. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +1 -1
  151. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +3 -3
  152. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG-members.html +63 -62
  153. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +94 -92
  154. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +2 -2
  155. package/SVF-doxygen/html/html/classSVF_1_1EntryCHI.html +2 -2
  156. package/SVF-doxygen/html/html/classSVF_1_1ExternalPAG.html +1 -1
  157. package/SVF-doxygen/html/html/classSVF_1_1FIObjPN.html +1 -1
  158. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +65 -66
  159. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -5
  160. package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +4 -4
  161. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +51 -52
  162. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +10 -13
  163. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +62 -63
  164. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +55 -53
  165. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +5 -5
  166. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +74 -75
  167. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +17 -20
  168. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +3 -3
  169. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +5 -5
  170. package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +1 -1
  171. package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +1 -1
  172. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +2 -2
  173. package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +1 -1
  174. package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +1 -1
  175. package/SVF-doxygen/html/html/classSVF_1_1GepValPN.html +1 -1
  176. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +7 -7
  177. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +7 -7
  178. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -1
  179. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +3 -3
  180. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +2 -2
  181. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG-members.html +71 -70
  182. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +88 -86
  183. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +3 -3
  184. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  185. package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +1 -1
  186. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG-members.html +71 -70
  187. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +126 -124
  188. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +2 -2
  189. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +3 -3
  190. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  191. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +13 -13
  192. package/SVF-doxygen/html/html/classSVF_1_1LoadMU.html +2 -2
  193. package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +1 -1
  194. package/SVF-doxygen/html/html/classSVF_1_1LocSymTableInfo.html +1 -1
  195. package/SVF-doxygen/html/html/classSVF_1_1LocationSet-members.html +1 -1
  196. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +11 -11
  197. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +3 -3
  198. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +8 -8
  199. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +5 -5
  200. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator-members.html +76 -75
  201. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +515 -506
  202. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +2 -2
  203. package/SVF-doxygen/html/html/classSVF_1_1MSSACHI.html +2 -2
  204. package/SVF-doxygen/html/html/classSVF_1_1MSSADEF.html +1 -1
  205. package/SVF-doxygen/html/html/classSVF_1_1MSSAMU.html +2 -2
  206. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHI.html +1 -1
  207. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +5 -5
  208. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +2 -2
  209. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +4 -4
  210. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +14 -14
  211. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +14 -14
  212. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +3 -3
  213. package/SVF-doxygen/html/html/classSVF_1_1MemRegion-members.html +9 -10
  214. package/SVF-doxygen/html/html/classSVF_1_1MemRegion.html +38 -56
  215. package/SVF-doxygen/html/html/classSVF_1_1MemSSA-members.html +1 -1
  216. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +132 -132
  217. package/SVF-doxygen/html/html/classSVF_1_1MemSSADF.html +5 -5
  218. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +21 -21
  219. package/SVF-doxygen/html/html/classSVF_1_1MutableDFPTData.html +1 -1
  220. package/SVF-doxygen/html/html/classSVF_1_1MutablePTData.html +2 -2
  221. package/SVF-doxygen/html/html/classSVF_1_1NormalGepPE.html +1 -1
  222. package/SVF-doxygen/html/html/classSVF_1_1ObjPN.html +1 -1
  223. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilder.html +6 -6
  224. package/SVF-doxygen/html/html/classSVF_1_1PAGNode.html +1 -1
  225. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +2 -2
  226. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +3 -3
  227. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +1 -1
  228. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +2 -2
  229. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +1 -1
  230. package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +3 -3
  231. package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +4 -4
  232. package/SVF-doxygen/html/html/classSVF_1_1PersistentIncDFPTData.html +2 -2
  233. package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +9 -9
  234. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache-members.html +28 -27
  235. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +144 -111
  236. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +21 -21
  237. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +1 -1
  238. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +5 -5
  239. package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +1 -1
  240. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +2 -2
  241. package/SVF-doxygen/html/html/classSVF_1_1RetMU.html +2 -2
  242. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  243. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +4 -4
  244. package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +4 -4
  245. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +62 -62
  246. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +37 -37
  247. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +6 -6
  248. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +49 -49
  249. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +1 -1
  250. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +4 -4
  251. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +15 -15
  252. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -1
  253. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +52 -53
  254. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +6 -9
  255. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +2 -2
  256. package/SVF-doxygen/html/html/classSVF_1_1StoreCHI.html +2 -2
  257. package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +1 -1
  258. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +5 -5
  259. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +2 -2
  260. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  261. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  262. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +3 -3
  263. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +2 -2
  264. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +2 -2
  265. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +51 -52
  266. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +3 -6
  267. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +10 -10
  268. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +1 -1
  269. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  270. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +2 -2
  271. package/SVF-doxygen/html/html/classSVF_1_1ValPN.html +1 -1
  272. package/SVF-doxygen/html/html/classSVF_1_1VariantGepPE.html +1 -1
  273. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +82 -83
  274. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +5 -8
  275. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
  276. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +7 -7
  277. package/SVF-doxygen/html/html/classes.html +2 -2
  278. package/SVF-doxygen/html/html/functions_a.html +10 -10
  279. package/SVF-doxygen/html/html/functions_c.html +11 -11
  280. package/SVF-doxygen/html/html/functions_e.html +4 -7
  281. package/SVF-doxygen/html/html/functions_f.html +17 -14
  282. package/SVF-doxygen/html/html/functions_func.html +10 -10
  283. package/SVF-doxygen/html/html/functions_func_c.html +5 -5
  284. package/SVF-doxygen/html/html/functions_func_g.html +33 -30
  285. package/SVF-doxygen/html/html/functions_func_h.html +1 -1
  286. package/SVF-doxygen/html/html/functions_func_i.html +1 -1
  287. package/SVF-doxygen/html/html/functions_func_m.html +2 -2
  288. package/SVF-doxygen/html/html/functions_func_o.html +3 -3
  289. package/SVF-doxygen/html/html/functions_func_p.html +1 -1
  290. package/SVF-doxygen/html/html/functions_func_s.html +1 -1
  291. package/SVF-doxygen/html/html/functions_g.html +30 -27
  292. package/SVF-doxygen/html/html/functions_h.html +1 -1
  293. package/SVF-doxygen/html/html/functions_i.html +7 -7
  294. package/SVF-doxygen/html/html/functions_l.html +4 -4
  295. package/SVF-doxygen/html/html/functions_m.html +2 -2
  296. package/SVF-doxygen/html/html/functions_o.html +7 -9
  297. package/SVF-doxygen/html/html/functions_p.html +17 -13
  298. package/SVF-doxygen/html/html/functions_r.html +8 -4
  299. package/SVF-doxygen/html/html/functions_s.html +7 -7
  300. package/SVF-doxygen/html/html/functions_t.html +3 -3
  301. package/SVF-doxygen/html/html/functions_type_c.html +1 -1
  302. package/SVF-doxygen/html/html/functions_type_e.html +0 -3
  303. package/SVF-doxygen/html/html/functions_type_f.html +4 -1
  304. package/SVF-doxygen/html/html/functions_type_l.html +1 -1
  305. package/SVF-doxygen/html/html/functions_type_p.html +3 -3
  306. package/SVF-doxygen/html/html/functions_type_s.html +1 -1
  307. package/SVF-doxygen/html/html/functions_vars_c.html +5 -5
  308. package/SVF-doxygen/html/html/functions_vars_f.html +3 -3
  309. package/SVF-doxygen/html/html/functions_vars_i.html +1 -1
  310. package/SVF-doxygen/html/html/functions_vars_p.html +1 -1
  311. package/SVF-doxygen/html/html/globals_s.html +3 -3
  312. package/SVF-doxygen/html/html/hierarchy.html +2 -2
  313. package/SVF-doxygen/html/html/menudata.js +1 -0
  314. package/SVF-doxygen/html/html/namespaceSVF.html +3 -3
  315. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +250 -122
  316. package/SVF-doxygen/html/html/namespacemembers_c.html +3 -0
  317. package/SVF-doxygen/html/html/namespacemembers_e.html +3 -0
  318. package/SVF-doxygen/html/html/namespacemembers_func.html +23 -10
  319. package/SVF-doxygen/html/html/namespacemembers_m.html +3 -0
  320. package/SVF-doxygen/html/html/namespacemembers_p.html +4 -1
  321. package/SVF-doxygen/html/html/namespacemembers_type_e.html +3 -0
  322. package/SVF-doxygen/html/html/namespacemembers_type_p.html +1 -1
  323. package/SVF-doxygen/html/html/search/all_1.js +10 -10
  324. package/SVF-doxygen/html/html/search/all_10.js +12 -11
  325. package/SVF-doxygen/html/html/search/all_12.js +2 -2
  326. package/SVF-doxygen/html/html/search/all_13.js +7 -7
  327. package/SVF-doxygen/html/html/search/all_14.js +4 -4
  328. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  329. package/SVF-doxygen/html/html/search/all_3.js +12 -11
  330. package/SVF-doxygen/html/html/search/all_5.js +2 -1
  331. package/SVF-doxygen/html/html/search/all_6.js +4 -3
  332. package/SVF-doxygen/html/html/search/all_7.js +14 -13
  333. package/SVF-doxygen/html/html/search/all_8.js +1 -1
  334. package/SVF-doxygen/html/html/search/all_9.js +4 -4
  335. package/SVF-doxygen/html/html/search/all_c.js +2 -2
  336. package/SVF-doxygen/html/html/search/all_d.js +5 -4
  337. package/SVF-doxygen/html/html/search/all_e.js +2 -2
  338. package/SVF-doxygen/html/html/search/all_f.js +3 -3
  339. package/SVF-doxygen/html/html/search/classes_4.js +2 -1
  340. package/SVF-doxygen/html/html/search/functions_0.js +10 -10
  341. package/SVF-doxygen/html/html/search/functions_10.js +2 -2
  342. package/SVF-doxygen/html/html/search/functions_2.js +6 -5
  343. package/SVF-doxygen/html/html/search/functions_6.js +14 -13
  344. package/SVF-doxygen/html/html/search/functions_7.js +1 -1
  345. package/SVF-doxygen/html/html/search/functions_8.js +1 -1
  346. package/SVF-doxygen/html/html/search/functions_b.js +3 -2
  347. package/SVF-doxygen/html/html/search/functions_d.js +1 -1
  348. package/SVF-doxygen/html/html/search/functions_e.js +2 -1
  349. package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
  350. package/SVF-doxygen/html/html/search/typedefs_2.js +1 -1
  351. package/SVF-doxygen/html/html/search/typedefs_4.js +2 -1
  352. package/SVF-doxygen/html/html/search/typedefs_5.js +2 -1
  353. package/SVF-doxygen/html/html/search/typedefs_b.js +1 -1
  354. package/SVF-doxygen/html/html/search/typedefs_f.js +3 -3
  355. package/SVF-doxygen/html/html/search/variables_10.js +1 -1
  356. package/SVF-doxygen/html/html/search/variables_14.js +2 -2
  357. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  358. package/SVF-doxygen/html/html/search/variables_3.js +5 -5
  359. package/SVF-doxygen/html/html/search/variables_6.js +3 -3
  360. package/SVF-doxygen/html/html/search/variables_9.js +1 -1
  361. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  362. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  363. package/SVF-doxygen/html/html/structSVF_1_1MemRegion_1_1equalMemRegion.html +3 -3
  364. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1equalNodeBS-members.html +81 -0
  365. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1equalNodeBS.html +134 -0
  366. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1equalPointsTo.html +3 -3
  367. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  368. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +1 -1
  369. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PAG_01_5_01_4.html +1 -1
  370. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  371. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  372. package/include/Graphs/SVFG.h +4 -4
  373. package/include/Graphs/SVFGOPT.h +4 -4
  374. package/include/MSSA/MemPartition.h +10 -10
  375. package/include/MSSA/MemRegion.h +40 -64
  376. package/include/MSSA/MemSSA.h +1 -4
  377. package/include/MSSA/SVFGBuilder.h +1 -0
  378. package/include/MemoryModel/LocationSet.h +3 -3
  379. package/include/MemoryModel/PersistentPointsToCache.h +20 -9
  380. package/include/MemoryModel/PointerAnalysisImpl.h +3 -4
  381. package/include/Util/SVFUtil.h +44 -1
  382. package/lib/Graphs/SVFG.cpp +12 -12
  383. package/lib/Graphs/SVFGOPT.cpp +6 -6
  384. package/lib/MSSA/MemPartition.cpp +31 -31
  385. package/lib/MSSA/MemRegion.cpp +59 -35
  386. package/lib/MSSA/MemSSA.cpp +5 -0
  387. package/lib/MemoryModel/LocationSet.cpp +2 -2
  388. package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -4
  389. package/lib/Util/Options.cpp +3 -3
  390. package/lib/Util/SVFUtil.cpp +3 -2
  391. package/lib/WPA/FlowSensitive.cpp +34 -0
  392. package/package.json +1 -1
@@ -41,15 +41,15 @@ using namespace SVF;
41
41
  */
42
42
  void DistinctMRG::partitionMRs()
43
43
  {
44
- for(FunToPointsToMap::iterator it = getFunToPointsToList().begin(), eit = getFunToPointsToList().end();
44
+ for(FunToPointsTosMap::iterator it = getFunToPointsToList().begin(), eit = getFunToPointsToList().end();
45
45
  it!=eit; ++it)
46
46
  {
47
47
  const SVFFunction* fun = it->first;
48
48
  /// Collect all points-to target in a function scope.
49
- PointsTo mergePts;
49
+ NodeBS mergePts;
50
50
  for(PointsToList::iterator cit = it->second.begin(), ecit = it->second.end(); cit!=ecit; ++cit)
51
51
  {
52
- const PointsTo& pts = *cit;
52
+ const NodeBS& pts = *cit;
53
53
  mergePts |= pts;
54
54
  }
55
55
  createDistinctMR(fun, mergePts);
@@ -61,17 +61,17 @@ void DistinctMRG::partitionMRs()
61
61
  * 1. collect all points-to targets in a function scope.
62
62
  * 2. create memory region for each point-to target.
63
63
  */
64
- void DistinctMRG::createDistinctMR(const SVFFunction* func, const PointsTo& pts)
64
+ void DistinctMRG::createDistinctMR(const SVFFunction* func, const NodeBS& pts)
65
65
  {
66
66
  /// Create memory regions for each points-to target.
67
67
 
68
- PointsTo::iterator ptsIt = pts.begin();
69
- PointsTo::iterator ptsEit = pts.end();
68
+ NodeBS::iterator ptsIt = pts.begin();
69
+ NodeBS::iterator ptsEit = pts.end();
70
70
  for (; ptsIt != ptsEit; ++ptsIt)
71
71
  {
72
72
  NodeID id = *ptsIt;
73
73
  // create new conditional points-to set with this single element.
74
- PointsTo newPts;
74
+ NodeBS newPts;
75
75
  newPts.set(id);
76
76
 
77
77
  // set the rep cpts as itself.
@@ -88,17 +88,17 @@ void DistinctMRG::createDistinctMR(const SVFFunction* func, const PointsTo& pts)
88
88
  * @param fun The function being analyzed.
89
89
  * @param mrs Memory region set contains all possible target memory regions.
90
90
  */
91
- void DistinctMRG::getMRsForLoad(MRSet& mrs, const PointsTo& pts, const SVFFunction*)
91
+ void DistinctMRG::getMRsForLoad(MRSet& mrs, const NodeBS& pts, const SVFFunction*)
92
92
  {
93
93
  /// Get memory regions for each points-to element in cpts.
94
94
 
95
- PointsTo::iterator ptsIt = pts.begin();
96
- PointsTo::iterator ptsEit = pts.end();
95
+ NodeBS::iterator ptsIt = pts.begin();
96
+ NodeBS::iterator ptsEit = pts.end();
97
97
  for (; ptsIt != ptsEit; ++ptsIt)
98
98
  {
99
99
  NodeID id = *ptsIt;
100
100
  // create new conditional points-to set with this single element.
101
- PointsTo newPts;
101
+ NodeBS newPts;
102
102
  newPts.set(id);
103
103
 
104
104
  MemRegion mr(newPts);
@@ -112,7 +112,7 @@ void DistinctMRG::getMRsForLoad(MRSet& mrs, const PointsTo& pts, const SVFFuncti
112
112
  * Get memory regions to be inserted at a load statement.
113
113
  * Just process as getMRsForLoad().
114
114
  */
115
- void DistinctMRG::getMRsForCallSiteRef(MRSet& aliasMRs, const PointsTo& cpts, const SVFFunction* fun)
115
+ void DistinctMRG::getMRsForCallSiteRef(MRSet& aliasMRs, const NodeBS& cpts, const SVFFunction* fun)
116
116
  {
117
117
  getMRsForLoad(aliasMRs, cpts, fun);
118
118
  }
@@ -121,7 +121,7 @@ void DistinctMRG::getMRsForCallSiteRef(MRSet& aliasMRs, const PointsTo& cpts, co
121
121
 
122
122
  void IntraDisjointMRG::partitionMRs()
123
123
  {
124
- for(FunToPointsToMap::iterator it = getFunToPointsToList().begin(),
124
+ for(FunToPointsTosMap::iterator it = getFunToPointsToList().begin(),
125
125
  eit = getFunToPointsToList().end(); it!=eit; ++it)
126
126
  {
127
127
  const SVFFunction* fun = it->first;
@@ -129,7 +129,7 @@ void IntraDisjointMRG::partitionMRs()
129
129
  for(PointsToList::iterator cit = it->second.begin(), ecit = it->second.end();
130
130
  cit!=ecit; ++cit)
131
131
  {
132
- const PointsTo& cpts = *cit;
132
+ const NodeBS& cpts = *cit;
133
133
 
134
134
  PointsToList& inters = getIntersList(fun);
135
135
  computeIntersections(cpts, inters);
@@ -140,7 +140,7 @@ void IntraDisjointMRG::partitionMRs()
140
140
  for (PointsToList::const_iterator interIt = inters.begin(), interEit = inters.end();
141
141
  interIt != interEit; ++interIt)
142
142
  {
143
- const PointsTo& inter = *interIt;
143
+ const NodeBS& inter = *interIt;
144
144
  createDisjointMR(fun, inter);
145
145
  }
146
146
  }
@@ -149,7 +149,7 @@ void IntraDisjointMRG::partitionMRs()
149
149
  /**
150
150
  * Compute intersections between cpts and computed cpts intersections before.
151
151
  */
152
- void IntraDisjointMRG::computeIntersections(const PointsTo& cpts, PointsToList& inters)
152
+ void IntraDisjointMRG::computeIntersections(const NodeBS& cpts, PointsToList& inters)
153
153
  {
154
154
  if (inters.find(cpts) != inters.end())
155
155
  {
@@ -168,18 +168,18 @@ void IntraDisjointMRG::computeIntersections(const PointsTo& cpts, PointsToList&
168
168
  PointsToList toBeDeleted;
169
169
  PointsToList newInters;
170
170
 
171
- PointsTo cpts_copy = cpts; // make a copy since cpts may be changed.
171
+ NodeBS cpts_copy = cpts; // make a copy since cpts may be changed.
172
172
 
173
173
  // check intersections with existing cpts in subSetMap
174
174
  for (PointsToList::const_iterator interIt = inters.begin(), interEit = inters.end();
175
175
  interIt != interEit; ++interIt)
176
176
  {
177
- const PointsTo& inter = *interIt;
177
+ const NodeBS& inter = *interIt;
178
178
 
179
179
  if (cpts_copy.intersects(inter))
180
180
  {
181
181
  // compute intersection between cpts and inter
182
- PointsTo new_inter = inter;
182
+ NodeBS new_inter = inter;
183
183
  new_inter &= cpts_copy;
184
184
 
185
185
  // remove old intersection and add new one if possible
@@ -189,7 +189,7 @@ void IntraDisjointMRG::computeIntersections(const PointsTo& cpts, PointsToList&
189
189
  newInters.insert(new_inter);
190
190
 
191
191
  // compute complement after intersection
192
- PointsTo complement = inter;
192
+ NodeBS complement = inter;
193
193
  complement.intersectWithComplement(new_inter);
194
194
  if (complement.empty() == false)
195
195
  {
@@ -208,7 +208,7 @@ void IntraDisjointMRG::computeIntersections(const PointsTo& cpts, PointsToList&
208
208
  for (PointsToList::const_iterator it = toBeDeleted.begin(), eit = toBeDeleted.end();
209
209
  it != eit; ++it)
210
210
  {
211
- const PointsTo& temp_cpts = *it;
211
+ const NodeBS& temp_cpts = *it;
212
212
  inters.erase(temp_cpts);
213
213
  }
214
214
 
@@ -216,7 +216,7 @@ void IntraDisjointMRG::computeIntersections(const PointsTo& cpts, PointsToList&
216
216
  for (PointsToList::const_iterator it = newInters.begin(), eit = newInters.end();
217
217
  it != eit; ++it)
218
218
  {
219
- const PointsTo& temp_cpts = *it;
219
+ const NodeBS& temp_cpts = *it;
220
220
  inters.insert(temp_cpts);
221
221
  }
222
222
 
@@ -229,7 +229,7 @@ void IntraDisjointMRG::computeIntersections(const PointsTo& cpts, PointsToList&
229
229
  /**
230
230
  * Create memory regions for each points-to target.
231
231
  */
232
- void IntraDisjointMRG::createDisjointMR(const SVFFunction* func, const PointsTo& cpts)
232
+ void IntraDisjointMRG::createDisjointMR(const SVFFunction* func, const NodeBS& cpts)
233
233
  {
234
234
  // set the rep cpts as itself.
235
235
  cptsToRepCPtsMap[cpts] = cpts;
@@ -238,13 +238,13 @@ void IntraDisjointMRG::createDisjointMR(const SVFFunction* func, const PointsTo&
238
238
  createMR(func, cpts);
239
239
  }
240
240
 
241
- void IntraDisjointMRG::getMRsForLoadFromInterList(MRSet& mrs, const PointsTo& cpts, const PointsToList& inters)
241
+ void IntraDisjointMRG::getMRsForLoadFromInterList(MRSet& mrs, const NodeBS& cpts, const PointsToList& inters)
242
242
  {
243
243
  PointsToList::const_iterator it = inters.begin();
244
244
  PointsToList::const_iterator eit = inters.end();
245
245
  for (; it != eit; ++it)
246
246
  {
247
- const PointsTo& inter = *it;
247
+ const NodeBS& inter = *it;
248
248
  if (cpts.contains(inter))
249
249
  {
250
250
  MemRegion mr(inter);
@@ -259,7 +259,7 @@ void IntraDisjointMRG::getMRsForLoadFromInterList(MRSet& mrs, const PointsTo& cp
259
259
  * Get memory regions to be inserted at a load statement.
260
260
  * Just process as getMRsForLoad().
261
261
  */
262
- void IntraDisjointMRG::getMRsForCallSiteRef(MRSet& aliasMRs, const PointsTo& cpts, const SVFFunction* fun)
262
+ void IntraDisjointMRG::getMRsForCallSiteRef(MRSet& aliasMRs, const NodeBS& cpts, const SVFFunction* fun)
263
263
  {
264
264
  getMRsForLoad(aliasMRs, cpts, fun);
265
265
  }
@@ -269,20 +269,20 @@ void IntraDisjointMRG::getMRsForCallSiteRef(MRSet& aliasMRs, const PointsTo& cpt
269
269
  void InterDisjointMRG::partitionMRs()
270
270
  {
271
271
  /// Generate disjoint cpts.
272
- for(FunToPointsToMap::iterator it = getFunToPointsToList().begin(),
272
+ for(FunToPointsTosMap::iterator it = getFunToPointsToList().begin(),
273
273
  eit = getFunToPointsToList().end(); it!=eit; ++it)
274
274
  {
275
275
  for(PointsToList::iterator cit = it->second.begin(), ecit = it->second.end();
276
276
  cit!=ecit; ++cit)
277
277
  {
278
- const PointsTo& cpts = *cit;
278
+ const NodeBS& cpts = *cit;
279
279
 
280
280
  computeIntersections(cpts, inters);
281
281
  }
282
282
  }
283
283
 
284
284
  /// Create memory regions.
285
- for(FunToPointsToMap::iterator it = getFunToPointsToList().begin(),
285
+ for(FunToPointsTosMap::iterator it = getFunToPointsToList().begin(),
286
286
  eit = getFunToPointsToList().end(); it!=eit; ++it)
287
287
  {
288
288
  const SVFFunction* fun = it->first;
@@ -290,12 +290,12 @@ void InterDisjointMRG::partitionMRs()
290
290
  for(PointsToList::iterator cit = it->second.begin(), ecit = it->second.end();
291
291
  cit!=ecit; ++cit)
292
292
  {
293
- const PointsTo& cpts = *cit;
293
+ const NodeBS& cpts = *cit;
294
294
 
295
295
  for (PointsToList::const_iterator interIt = inters.begin(), interEit = inters.end();
296
296
  interIt != interEit; ++interIt)
297
297
  {
298
- const PointsTo& inter = *interIt;
298
+ const NodeBS& inter = *interIt;
299
299
  if (cpts.contains(inter))
300
300
  createDisjointMR(fun, inter);
301
301
  }
@@ -39,6 +39,12 @@ using namespace SVFUtil;
39
39
  Size_t MemRegion::totalMRNum = 0;
40
40
  Size_t MRVer::totalVERNum = 0;
41
41
 
42
+ MRGenerator::MRGenerator(BVDataPTAImpl* p, bool ptrOnly) :
43
+ pta(p), ptrOnlyMSSA(ptrOnly)
44
+ {
45
+ callGraph = pta->getPTACallGraph();
46
+ callGraphSCC = new SCC(callGraph);
47
+ }
42
48
 
43
49
  /*!
44
50
  * Clean up memory
@@ -61,9 +67,9 @@ void MRGenerator::destroy()
61
67
  /*!
62
68
  * Generate a memory region and put in into functions which use it
63
69
  */
64
- void MRGenerator::createMR(const SVFFunction* fun, const PointsTo& cpts)
70
+ void MRGenerator::createMR(const SVFFunction* fun, const NodeBS& cpts)
65
71
  {
66
- const PointsTo& repCPts = getRepPointsTo(cpts);
72
+ const NodeBS& repCPts = getRepPointsTo(cpts);
67
73
  MemRegion mr(repCPts);
68
74
  MRSet::const_iterator mit = memRegSet.find(&mr);
69
75
  if(mit!=memRegSet.end())
@@ -84,7 +90,7 @@ void MRGenerator::createMR(const SVFFunction* fun, const PointsTo& cpts)
84
90
  /*!
85
91
  * Generate a memory region and put in into functions which use it
86
92
  */
87
- const MemRegion* MRGenerator::getMR(const PointsTo& cpts) const
93
+ const MemRegion* MRGenerator::getMR(const NodeBS& cpts) const
88
94
  {
89
95
  MemRegion mr(getRepPointsTo(cpts));
90
96
  MRSet::iterator mit = memRegSet.find(&mr);
@@ -142,6 +148,24 @@ void MRGenerator::generateMRs()
142
148
  updateAliasMRs();
143
149
  }
144
150
 
151
+ bool MRGenerator::hasPAGEdgeList(const Instruction* inst)
152
+ {
153
+ PAG* pag = pta->getPAG();
154
+ if (ptrOnlyMSSA)
155
+ return pag->hasPTAPAGEdgeList(pag->getICFG()->getBlockICFGNode(inst));
156
+ else
157
+ return pag->hasPAGEdgeList(pag->getICFG()->getBlockICFGNode(inst));
158
+ }
159
+
160
+ PAG::PAGEdgeList& MRGenerator::getPAGEdgesFromInst(const Instruction* inst)
161
+ {
162
+ PAG* pag = pta->getPAG();
163
+ if (ptrOnlyMSSA)
164
+ return pag->getInstPTAPAGEdgeList(pag->getICFG()->getBlockICFGNode(inst));
165
+ else
166
+ return pag->getInstPAGEdgeList(pag->getICFG()->getBlockICFGNode(inst));
167
+ }
168
+
145
169
  /*!
146
170
  * Generate memory regions for loads/stores
147
171
  */
@@ -174,7 +198,7 @@ void MRGenerator::collectModRefForLoadStore()
174
198
  pagEdgeToFunMap[inst] = &fun;
175
199
  if (const StorePE *st = SVFUtil::dyn_cast<StorePE>(inst))
176
200
  {
177
- PointsTo cpts(pta->getPts(st->getDstID()));
201
+ NodeBS cpts(pta->getPts(st->getDstID()));
178
202
  // TODO: change this assertion check later when we have conditional points-to set
179
203
  if (cpts.empty())
180
204
  continue;
@@ -184,7 +208,7 @@ void MRGenerator::collectModRefForLoadStore()
184
208
 
185
209
  else if (const LoadPE *ld = SVFUtil::dyn_cast<LoadPE>(inst))
186
210
  {
187
- PointsTo cpts(pta->getPts(ld->getSrcID()));
211
+ NodeBS cpts(pta->getPts(ld->getSrcID()));
188
212
  // TODO: change this assertion check later when we have conditional points-to set
189
213
  if (cpts.empty())
190
214
  continue;
@@ -257,18 +281,18 @@ void MRGenerator::collectModRefForCall()
257
281
  * 1) map cpts to its superset(rep) which exists in the map, otherwise its superset is itself
258
282
  * 2) adjust existing items in the map if their supersets are cpts
259
283
  */
260
- void MRGenerator::sortPointsTo(const PointsTo& cpts)
284
+ void MRGenerator::sortPointsTo(const NodeBS& cpts)
261
285
  {
262
286
 
263
287
  if(cptsToRepCPtsMap.find(cpts)!=cptsToRepCPtsMap.end())
264
288
  return;
265
289
 
266
290
  PointsToList subSetList;
267
- PointsTo repCPts = cpts;
291
+ NodeBS repCPts = cpts;
268
292
  for(PtsToRepPtsSetMap::iterator it = cptsToRepCPtsMap.begin(),
269
293
  eit = cptsToRepCPtsMap.end(); it!=eit; ++it)
270
294
  {
271
- PointsTo& existCPts = it->second;
295
+ NodeBS& existCPts = it->second;
272
296
  if(cpts.contains(existCPts))
273
297
  {
274
298
  subSetList.insert(it->first);
@@ -297,7 +321,7 @@ void MRGenerator::partitionMRs()
297
321
  /// TODO: we may need some refined region partitioning algorithm here
298
322
  /// For now, we just collapse all refs/mods objects at callsites into one region
299
323
  /// Consider modularly partition memory regions to speed up analysis (only partition regions within function scope)
300
- for(FunToPointsToMap::iterator it = getFunToPointsToList().begin(), eit = getFunToPointsToList().end();
324
+ for(FunToPointsTosMap::iterator it = getFunToPointsToList().begin(), eit = getFunToPointsToList().end();
301
325
  it!=eit; ++it)
302
326
  {
303
327
  for(PointsToList::iterator cit = it->second.begin(), ecit = it->second.end(); cit!=ecit; ++cit)
@@ -306,7 +330,7 @@ void MRGenerator::partitionMRs()
306
330
  }
307
331
  }
308
332
  /// Generate memory regions according to condition pts after computing superset
309
- for(FunToPointsToMap::iterator it = getFunToPointsToList().begin(), eit = getFunToPointsToList().end();
333
+ for(FunToPointsTosMap::iterator it = getFunToPointsToList().begin(), eit = getFunToPointsToList().end();
310
334
  it!=eit; ++it)
311
335
  {
312
336
  const SVFFunction* fun = it->first;
@@ -329,7 +353,7 @@ void MRGenerator::updateAliasMRs()
329
353
  {
330
354
  MRSet aliasMRs;
331
355
  const SVFFunction* fun = getFunction(it->first);
332
- const PointsTo& storeCPts = it->second;
356
+ const NodeBS& storeCPts = it->second;
333
357
  getAliasMemRegions(aliasMRs,storeCPts,fun);
334
358
  for(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)
335
359
  {
@@ -341,7 +365,7 @@ void MRGenerator::updateAliasMRs()
341
365
  {
342
366
  MRSet aliasMRs;
343
367
  const SVFFunction* fun = getFunction(it->first);
344
- const PointsTo& loadCPts = it->second;
368
+ const NodeBS& loadCPts = it->second;
345
369
  getMRsForLoad(aliasMRs, loadCPts, fun);
346
370
  for(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)
347
371
  {
@@ -355,7 +379,7 @@ void MRGenerator::updateAliasMRs()
355
379
  {
356
380
  const SVFFunction* fun = it->first->getCaller();
357
381
  MRSet aliasMRs;
358
- const PointsTo& callsiteModCPts = it->second;
382
+ const NodeBS& callsiteModCPts = it->second;
359
383
  getAliasMemRegions(aliasMRs,callsiteModCPts,fun);
360
384
  for(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)
361
385
  {
@@ -367,7 +391,7 @@ void MRGenerator::updateAliasMRs()
367
391
  {
368
392
  const SVFFunction* fun = it->first->getCaller();
369
393
  MRSet aliasMRs;
370
- const PointsTo& callsiteRefCPts = it->second;
394
+ const NodeBS& callsiteRefCPts = it->second;
371
395
  getMRsForCallSiteRef(aliasMRs, callsiteRefCPts, fun);
372
396
  for(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)
373
397
  {
@@ -475,8 +499,8 @@ void MRGenerator::collectCallSitePts(const CallBlockNode* cs)
475
499
  while(!worklist.empty())
476
500
  {
477
501
  NodeID nodeId = worklist.pop();
478
- const PointsTo& tmp = pta->getPts(nodeId);
479
- for(PointsTo::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++it)
502
+ const NodeBS& tmp = pta->getPts(nodeId);
503
+ for(NodeBS::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++it)
480
504
  argsPts |= CollectPtsChain(*it);
481
505
  }
482
506
 
@@ -488,8 +512,8 @@ void MRGenerator::collectCallSitePts(const CallBlockNode* cs)
488
512
  const PAGNode* node = pta->getPAG()->getCallSiteRet(retBlockNode);
489
513
  if(node->isPointer())
490
514
  {
491
- const PointsTo& tmp = pta->getPts(node->getId());
492
- for(PointsTo::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++it)
515
+ const NodeBS& tmp = pta->getPts(node->getId());
516
+ for(NodeBS::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++it)
493
517
  retPts |= CollectPtsChain(*it);
494
518
  }
495
519
  }
@@ -508,18 +532,18 @@ NodeBS& MRGenerator::CollectPtsChain(NodeID id)
508
532
  return it->second;
509
533
  else
510
534
  {
511
- PointsTo& pts = cachedPtsChainMap[baseId];
535
+ NodeBS& pts = cachedPtsChainMap[baseId];
512
536
  pts |= pta->getPAG()->getFieldsAfterCollapse(baseId);
513
537
 
514
538
  WorkList worklist;
515
- for(PointsTo::iterator it = pts.begin(), eit = pts.end(); it!=eit; ++it)
539
+ for(NodeBS::iterator it = pts.begin(), eit = pts.end(); it!=eit; ++it)
516
540
  worklist.push(*it);
517
541
 
518
542
  while(!worklist.empty())
519
543
  {
520
544
  NodeID nodeId = worklist.pop();
521
- const PointsTo& tmp = pta->getPts(nodeId);
522
- for(PointsTo::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++it)
545
+ const NodeBS& tmp = pta->getPts(nodeId);
546
+ for(NodeBS::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++it)
523
547
  {
524
548
  pts |= CollectPtsChain(*it);
525
549
  }
@@ -643,12 +667,12 @@ void MRGenerator::modRefAnalysis(PTACallGraphNode* callGraphNode, WorkList& work
643
667
  /*!
644
668
  * Obtain the mod sets for a call, used for external ModRefInfo queries
645
669
  */
646
- PointsTo MRGenerator::getModInfoForCall(const CallBlockNode* cs)
670
+ NodeBS MRGenerator::getModInfoForCall(const CallBlockNode* cs)
647
671
  {
648
672
  if (isExtCall(cs->getCallSite()) && !isHeapAllocExtCall(cs->getCallSite()))
649
673
  {
650
674
  PAGEdgeList& pagEdgeList = getPAGEdgesFromInst(cs->getCallSite());
651
- PointsTo mods;
675
+ NodeBS mods;
652
676
  for (PAGEdgeList::const_iterator bit = pagEdgeList.begin(), ebit =
653
677
  pagEdgeList.end(); bit != ebit; ++bit)
654
678
  {
@@ -667,12 +691,12 @@ PointsTo MRGenerator::getModInfoForCall(const CallBlockNode* cs)
667
691
  /*!
668
692
  * Obtain the ref sets for a call, used for external ModRefInfo queries
669
693
  */
670
- PointsTo MRGenerator::getRefInfoForCall(const CallBlockNode* cs)
694
+ NodeBS MRGenerator::getRefInfoForCall(const CallBlockNode* cs)
671
695
  {
672
696
  if (isExtCall(cs->getCallSite()) && !isHeapAllocExtCall(cs->getCallSite()))
673
697
  {
674
698
  PAGEdgeList& pagEdgeList = getPAGEdgesFromInst(cs->getCallSite());
675
- PointsTo refs;
699
+ NodeBS refs;
676
700
  for (PAGEdgeList::const_iterator bit = pagEdgeList.begin(), ebit =
677
701
  pagEdgeList.end(); bit != ebit; ++bit)
678
702
  {
@@ -718,10 +742,10 @@ ModRefInfo MRGenerator::getModRefInfo(const CallBlockNode* cs, const Value* V)
718
742
 
719
743
  if (pta->getPAG()->hasValueNode(V))
720
744
  {
721
- const PointsTo pts(pta->getPts(pta->getPAG()->getValueNode(V)));
722
- const PointsTo csRef = getRefInfoForCall(cs);
723
- const PointsTo csMod = getModInfoForCall(cs);
724
- PointsTo ptsExpanded, csRefExpanded, csModExpanded;
745
+ const NodeBS pts(pta->getPts(pta->getPAG()->getValueNode(V)));
746
+ const NodeBS csRef = getRefInfoForCall(cs);
747
+ const NodeBS csMod = getModInfoForCall(cs);
748
+ NodeBS ptsExpanded, csRefExpanded, csModExpanded;
725
749
  pta->expandFIObjs(pts, ptsExpanded);
726
750
  pta->expandFIObjs(csRef, csRefExpanded);
727
751
  pta->expandFIObjs(csMod, csModExpanded);
@@ -754,11 +778,11 @@ ModRefInfo MRGenerator::getModRefInfo(const CallBlockNode* cs1, const CallBlockN
754
778
  if (getModRefInfo(cs1) == ModRefInfo::NoModRef || getModRefInfo(cs2) == ModRefInfo::NoModRef)
755
779
  return ModRefInfo::NoModRef;
756
780
 
757
- const PointsTo cs1Ref = getRefInfoForCall(cs1);
758
- const PointsTo cs1Mod = getModInfoForCall(cs1);
759
- const PointsTo cs2Ref = getRefInfoForCall(cs2);
760
- const PointsTo cs2Mod = getModInfoForCall(cs2);
761
- PointsTo cs1RefExpanded, cs1ModExpanded, cs2RefExpanded, cs2ModExpanded;
781
+ const NodeBS cs1Ref = getRefInfoForCall(cs1);
782
+ const NodeBS cs1Mod = getModInfoForCall(cs1);
783
+ const NodeBS cs2Ref = getRefInfoForCall(cs2);
784
+ const NodeBS cs2Mod = getModInfoForCall(cs2);
785
+ NodeBS cs1RefExpanded, cs1ModExpanded, cs2RefExpanded, cs2ModExpanded;
762
786
  pta->expandFIObjs(cs1Ref, cs1RefExpanded);
763
787
  pta->expandFIObjs(cs1Mod, cs1ModExpanded);
764
788
  pta->expandFIObjs(cs2Ref, cs2RefExpanded);
@@ -70,6 +70,11 @@ MemSSA::MemSSA(BVDataPTAImpl* p, bool ptrOnlyMSSA) : df(nullptr),dt(nullptr)
70
70
  timeOfGeneratingMemRegions += (mrEnd - mrStart)/TIMEINTERVAL;
71
71
  }
72
72
 
73
+ PAG* MemSSA::getPAG()
74
+ {
75
+ return pta->getPAG();
76
+ }
77
+
73
78
  /*!
74
79
  * Set DF/DT
75
80
  */
@@ -113,10 +113,10 @@ bool LocationSet::increaseIfNotReachUpperBound(std::vector<NodeID>& indices,
113
113
  /*!
114
114
  * Compute all possible locations according to offset and number-stride pairs.
115
115
  */
116
- PointsTo LocationSet::computeAllLocations() const
116
+ NodeBS LocationSet::computeAllLocations() const
117
117
  {
118
118
 
119
- PointsTo result;
119
+ NodeBS result;
120
120
  result.set(getOffset());
121
121
 
122
122
  if (isConstantOffset() == false)
@@ -6,7 +6,6 @@
6
6
  */
7
7
 
8
8
 
9
- #include "Util/Options.h"
10
9
  #include "MemoryModel/PointerAnalysisImpl.h"
11
10
  #include "SVF-FE/CPPUtil.h"
12
11
  #include "SVF-FE/DCHG.h"
@@ -20,13 +19,11 @@ using namespace SVFUtil;
20
19
  using namespace cppUtil;
21
20
  using namespace std;
22
21
 
23
- PersistentPointsToCache<PointsTo> BVDataPTAImpl::ptCache = PersistentPointsToCache<PointsTo>(PointsTo());
24
-
25
22
  /*!
26
23
  * Constructor
27
24
  */
28
25
  BVDataPTAImpl::BVDataPTAImpl(PAG* p, PointerAnalysis::PTATY type, bool alias_check) :
29
- PointerAnalysis(p, type, alias_check)
26
+ PointerAnalysis(p, type, alias_check), ptCache()
30
27
  {
31
28
  if (type == Andersen_BASE || type == Andersen_WPA || type == AndersenWaveDiff_WPA || type == AndersenHCD_WPA || type == AndersenHLCD_WPA
32
29
  || type == AndersenLCD_WPA || type == TypeCPP_WPA || type == FlowS_DDA || type == AndersenWaveDiffWithType_WPA
@@ -7,12 +7,12 @@ namespace SVF
7
7
  {
8
8
  const llvm::cl::opt<bool> Options::MarkedClocksOnly(
9
9
  "marked-clocks-only",
10
- llvm::cl::init(false),
10
+ llvm::cl::init(true),
11
11
  llvm::cl::desc("Only measure times where explicitly marked"));
12
12
 
13
13
  const llvm::cl::opt<NodeIDAllocator::Strategy> Options::NodeAllocStrat(
14
14
  "node-alloc-strat",
15
- llvm::cl::init(NodeIDAllocator::Strategy::DEBUG),
15
+ llvm::cl::init(NodeIDAllocator::Strategy::SEQ),
16
16
  llvm::cl::desc("Method of allocating (LLVM) values and memory objects as node IDs"),
17
17
  llvm::cl::values(
18
18
  clEnumValN(NodeIDAllocator::Strategy::DENSE, "dense", "allocate objects together and values together, separately"),
@@ -26,7 +26,7 @@ namespace SVF
26
26
 
27
27
  const llvm::cl::opt<BVDataPTAImpl::PTBackingType> Options::ptDataBacking(
28
28
  "ptd",
29
- llvm::cl::init(BVDataPTAImpl::PTBackingType::Mutable),
29
+ llvm::cl::init(BVDataPTAImpl::PTBackingType::Persistent),
30
30
  llvm::cl::desc("Overarching points-to data structure"),
31
31
  llvm::cl::values(
32
32
  clEnumValN(BVDataPTAImpl::PTBackingType::Mutable, "mutable", "points-to set per pointer"),
@@ -31,6 +31,8 @@
31
31
  #include "Util/SVFUtil.h"
32
32
  #include "SVF-FE/LLVMUtil.h"
33
33
 
34
+ #include "Util/Conditions.h"
35
+
34
36
  #include <sys/resource.h> /// increase stack size
35
37
 
36
38
  using namespace SVF;
@@ -125,7 +127,7 @@ void SVFUtil::dumpPointsToList(const PointsToList& ptl)
125
127
  ii != ie; ii++)
126
128
  {
127
129
  auto bs = *ii;
128
- dumpSparseSet(bs);
130
+ dumpSet(bs);
129
131
  }
130
132
  outs() << "}\n";
131
133
  }
@@ -351,7 +353,6 @@ std::string SVFUtil::getSourceLoc(const Value* val)
351
353
  return rawstr.str();
352
354
  }
353
355
 
354
-
355
356
  /*!
356
357
  * return string of an LLVM Value
357
358
  */
@@ -615,6 +615,40 @@ bool FlowSensitive::updateCallGraph(const CallSiteToFunPtrMap& callsites)
615
615
  CallEdgeMap newEdges;
616
616
  onTheFlyCallGraphSolve(callsites, newEdges);
617
617
 
618
+ // Bound the new edges by the Andersen's call graph.
619
+ // TODO: we want this to be an assertion eventually.
620
+ const CallEdgeMap &andersCallEdgeMap = ander->getIndCallMap();
621
+ for (typename CallEdgeMap::value_type &csfs : newEdges)
622
+ {
623
+ const CallBlockNode *potentialCallSite = csfs.first;
624
+ FunctionSet &potentialFunctionSet = csfs.second;
625
+
626
+ // Check this callsite even calls anything per Andersen's.
627
+ typename CallEdgeMap::const_iterator andersFunctionSetIt
628
+ = andersCallEdgeMap.find(potentialCallSite);
629
+ if (andersFunctionSetIt == andersCallEdgeMap.end())
630
+ {
631
+ potentialFunctionSet.clear();
632
+ }
633
+
634
+ const FunctionSet &andersFunctionSet = andersFunctionSetIt->second;
635
+ for (FunctionSet::iterator potentialFunctionIt = potentialFunctionSet.begin();
636
+ potentialFunctionIt != potentialFunctionSet.end(); )
637
+ {
638
+ const SVFFunction *potentialFunction = *potentialFunctionIt;
639
+ if (andersFunctionSet.find(potentialFunction) == andersFunctionSet.end())
640
+ {
641
+ // potentialFunction is not in the Andersen's call graph -- remove it.
642
+ potentialFunctionIt = potentialFunctionSet.erase(potentialFunctionIt);
643
+ }
644
+ else
645
+ {
646
+ // potentialFunction is in the Andersen's call graph -- keep it..
647
+ ++potentialFunctionIt;
648
+ }
649
+ }
650
+ }
651
+
618
652
  SVFGEdgeSetTy svfgEdges;
619
653
  connectCallerAndCallee(newEdges, svfgEdges);
620
654
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-tools",
3
- "version": "1.0.281",
3
+ "version": "1.0.285",
4
4
  "description": "* <b>[TypeClone](https://github.com/SVF-tools/SVF/wiki/TypeClone) published in our [ECOOP paper](https://yuleisui.github.io/publications/ecoop20.pdf) is now available in SVF </b> * <b>SVF now uses a single script for its build. Just type [`source ./build.sh`](https://github.com/SVF-tools/SVF/blob/master/build.sh) in your terminal, that's it!</b> * <b>SVF now supports LLVM-10.0.0! </b> * <b>We thank [bsauce](https://github.com/bsauce) for writing a user manual of SVF ([link1](https://www.jianshu.com/p/068a08ec749c) and [link2](https://www.jianshu.com/p/777c30d4240e)) in Chinese </b> * <b>SVF now supports LLVM-9.0.0 (Thank [Byoungyoung Lee](https://github.com/SVF-tools/SVF/issues/142) for his help!). </b> * <b>SVF now supports a set of [field-sensitive pointer analyses](https://yuleisui.github.io/publications/sas2019a.pdf). </b> * <b>[Use SVF as an external lib](https://github.com/SVF-tools/SVF/wiki/Using-SVF-as-a-lib-in-your-own-tool) for your own project (Contributed by [Hongxu Chen](https://github.com/HongxuChen)). </b> * <b>SVF now supports LLVM-7.0.0. </b> * <b>SVF now supports Docker. [Try SVF in Docker](https://github.com/SVF-tools/SVF/wiki/Try-SVF-in-Docker)! </b> * <b>SVF now supports [LLVM-6.0.0](https://github.com/svf-tools/SVF/pull/38) (Contributed by [Jack Anthony](https://github.com/jackanth)). </b> * <b>SVF now supports [LLVM-4.0.0](https://github.com/svf-tools/SVF/pull/23) (Contributed by Jared Carlson. Thank [Jared](https://github.com/jcarlson23) and [Will](https://github.com/dtzWill) for their in-depth [discussions](https://github.com/svf-tools/SVF/pull/18) about updating SVF!) </b> * <b>SVF now supports analysis for C++ programs.</b> <br />",
5
5
  "main": "index.js",
6
6
  "scripts": {