svf-tools 1.0.310 → 1.0.314

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 (447) hide show
  1. package/SVF-doxygen/html/html/AndersenHCD_8cpp_source.html +3 -3
  2. package/SVF-doxygen/html/html/AndersenHLCD_8cpp_source.html +2 -2
  3. package/SVF-doxygen/html/html/AndersenLCD_8cpp_source.html +3 -3
  4. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +3 -3
  5. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +6 -6
  6. package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +6 -6
  7. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +21 -21
  8. package/SVF-doxygen/html/html/AndersenWaveDiffWithType_8cpp_source.html +4 -4
  9. package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +4 -4
  10. package/SVF-doxygen/html/html/Andersen_8cpp.html +1 -0
  11. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +58 -56
  12. package/SVF-doxygen/html/html/Andersen_8h_source.html +118 -118
  13. package/SVF-doxygen/html/html/CHG_8cpp.html +3 -3
  14. package/SVF-doxygen/html/html/CHG_8cpp_source.html +49 -50
  15. package/SVF-doxygen/html/html/CHG_8h_source.html +3 -3
  16. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +17 -16
  17. package/SVF-doxygen/html/html/CPPUtil_8h_source.html +16 -16
  18. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +5 -5
  19. package/SVF-doxygen/html/html/CallGraphBuilder_8h_source.html +1 -1
  20. package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
  21. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +10 -10
  22. package/SVF-doxygen/html/html/ConsG_8h_source.html +7 -7
  23. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +8 -8
  24. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +5 -5
  25. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +13 -13
  26. package/SVF-doxygen/html/html/DCHG_8h_source.html +2 -2
  27. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +7 -7
  28. package/SVF-doxygen/html/html/DDAClient_8h_source.html +2 -2
  29. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +5 -5
  30. package/SVF-doxygen/html/html/DDAPass_8h_source.html +1 -1
  31. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +4 -4
  32. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +10 -10
  33. package/SVF-doxygen/html/html/DoubleFreeChecker_8h_source.html +1 -1
  34. package/SVF-doxygen/html/html/ExternalPAG_8cpp.html +1 -1
  35. package/SVF-doxygen/html/html/ExternalPAG_8cpp_source.html +8 -8
  36. package/SVF-doxygen/html/html/ExternalPAG_8h_source.html +1 -1
  37. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +10 -10
  38. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
  39. package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
  40. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
  41. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +3 -3
  42. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +9 -9
  43. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +11 -11
  44. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +7 -7
  45. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +5 -5
  46. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +82 -81
  47. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +4 -4
  48. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +4 -4
  49. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
  50. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +1 -1
  51. package/SVF-doxygen/html/html/ICFGStat_8h_source.html +3 -3
  52. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +6 -6
  53. package/SVF-doxygen/html/html/ICFG_8h_source.html +6 -6
  54. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +4 -4
  55. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +2 -2
  56. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +2 -2
  57. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +1 -1
  58. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +4 -4
  59. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
  60. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +1 -1
  61. package/SVF-doxygen/html/html/LocationSet_8h_source.html +1 -2
  62. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +6 -6
  63. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +1 -1
  64. package/SVF-doxygen/html/html/MHP_8cpp_source.html +13 -13
  65. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +4 -4
  66. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -1
  67. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
  68. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -1
  69. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
  70. package/SVF-doxygen/html/html/MTA_8cpp_source.html +5 -5
  71. package/SVF-doxygen/html/html/MTA_8h_source.html +1 -1
  72. package/SVF-doxygen/html/html/MemModelBuilder_8cpp.html +90 -0
  73. package/SVF-doxygen/html/html/MemModelBuilder_8cpp_source.html +205 -0
  74. package/SVF-doxygen/html/html/MemModelBuilder_8h.html +97 -0
  75. package/SVF-doxygen/html/html/MemModelBuilder_8h_source.html +105 -0
  76. package/SVF-doxygen/html/html/MemModel_8cpp_source.html +9 -53
  77. package/SVF-doxygen/html/html/MemModel_8h_source.html +44 -44
  78. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +17 -17
  79. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +3 -3
  80. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +13 -13
  81. package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +12 -12
  82. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +2 -2
  83. package/SVF-doxygen/html/html/Options_8cpp_source.html +1 -2
  84. package/SVF-doxygen/html/html/Options_8h_source.html +2 -2
  85. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +1 -1
  86. package/SVF-doxygen/html/html/PAGBuilder_8cpp_source.html +25 -25
  87. package/SVF-doxygen/html/html/PAGBuilder_8h_source.html +1 -1
  88. package/SVF-doxygen/html/html/PAGEdge_8h_source.html +2 -2
  89. package/SVF-doxygen/html/html/PAGNode_8h_source.html +11 -11
  90. package/SVF-doxygen/html/html/PAG_8cpp_source.html +34 -34
  91. package/SVF-doxygen/html/html/PAG_8h_source.html +41 -41
  92. package/SVF-doxygen/html/html/PCG_8cpp_source.html +8 -8
  93. package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
  94. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +8 -8
  95. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +2 -2
  96. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +24 -24
  97. package/SVF-doxygen/html/html/PTAType_8h_source.html +4 -4
  98. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
  99. package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +1 -1
  100. package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +34 -33
  101. package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +7 -7
  102. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +15 -15
  103. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +66 -66
  104. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +15 -15
  105. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +7 -7
  106. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +3 -3
  107. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +4 -4
  108. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
  109. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +10 -10
  110. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +8 -8
  111. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +5 -5
  112. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +9 -9
  113. package/SVF-doxygen/html/html/SVFG_8h_source.html +7 -7
  114. package/SVF-doxygen/html/html/SVFModule_8cpp.html +1 -1
  115. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +6 -5
  116. package/SVF-doxygen/html/html/SVFModule_8h.html +3 -0
  117. package/SVF-doxygen/html/html/SVFModule_8h_source.html +53 -46
  118. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
  119. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +8 -8
  120. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +6 -6
  121. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
  122. package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -1
  123. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +2 -2
  124. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +5 -55
  125. package/SVF-doxygen/html/html/SymbolTableInfo_8h.html +0 -4
  126. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +88 -101
  127. package/SVF-doxygen/html/html/TCT_8cpp_source.html +11 -11
  128. package/SVF-doxygen/html/html/TCT_8h_source.html +10 -10
  129. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +5 -5
  130. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +1 -1
  131. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +3 -3
  132. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +8 -8
  133. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +7 -7
  134. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +2 -2
  135. package/SVF-doxygen/html/html/VFGNode_8h_source.html +2 -2
  136. package/SVF-doxygen/html/html/VFG_8cpp_source.html +6 -6
  137. package/SVF-doxygen/html/html/VFG_8h_source.html +6 -6
  138. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +7 -7
  139. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +13 -13
  140. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +11 -11
  141. package/SVF-doxygen/html/html/WPAPass_8h_source.html +1 -1
  142. package/SVF-doxygen/html/html/annotated.html +135 -136
  143. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  144. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  145. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
  146. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +2 -2
  148. package/SVF-doxygen/html/html/classSVF_1_1AddrPE.html +1 -1
  149. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +1 -1
  150. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
  151. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +1 -1
  152. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +228 -228
  153. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +1 -1
  154. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +60 -58
  155. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +1 -1
  156. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +43 -43
  157. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +1 -1
  158. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +23 -23
  159. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +1 -1
  160. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +52 -52
  161. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +1 -1
  162. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +38 -38
  163. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +1 -1
  164. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +17 -17
  165. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +31 -31
  166. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +1 -1
  167. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +38 -38
  168. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType-members.html +1 -1
  169. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType.html +31 -31
  170. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +1 -1
  171. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +73 -72
  172. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +1 -1
  173. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  174. package/SVF-doxygen/html/html/classSVF_1_1CHGraph-members.html +1 -1
  175. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +123 -120
  176. package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +1 -1
  177. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +3 -3
  178. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  179. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjPN.html +1 -1
  180. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjPN.html +1 -1
  181. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjPN.html +1 -1
  182. package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +1 -1
  183. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
  184. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +115 -115
  185. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +15 -15
  186. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +18 -18
  187. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +13 -13
  188. package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +1 -1
  189. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +1 -1
  190. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +22 -22
  191. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
  192. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +9 -9
  193. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +4 -4
  194. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
  195. package/SVF-doxygen/html/html/classSVF_1_1DummyObjPN.html +1 -1
  196. package/SVF-doxygen/html/html/classSVF_1_1DummyValPN.html +1 -1
  197. package/SVF-doxygen/html/html/classSVF_1_1ExternalPAG.html +8 -8
  198. package/SVF-doxygen/html/html/classSVF_1_1FIObjPN.html +1 -1
  199. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -2
  200. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +10 -10
  201. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +44 -44
  202. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +24 -24
  203. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +32 -32
  204. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +5 -5
  205. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
  206. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
  207. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
  208. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
  209. package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +1 -1
  210. package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +1 -1
  211. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +5 -5
  212. package/SVF-doxygen/html/html/classSVF_1_1GenericGraph.html +47 -47
  213. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +58 -57
  214. package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +5 -5
  215. package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +1 -1
  216. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +1 -1
  217. package/SVF-doxygen/html/html/classSVF_1_1GepValPN.html +1 -1
  218. package/SVF-doxygen/html/html/classSVF_1_1GlobalBlockNode.html +1 -1
  219. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +13 -13
  220. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +3 -3
  221. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
  222. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +6 -6
  223. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +2 -2
  224. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +3 -3
  225. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  226. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  227. package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +1 -1
  228. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
  229. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  230. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +17 -17
  231. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
  232. package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +1 -1
  233. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +1 -1
  234. package/SVF-doxygen/html/html/classSVF_1_1LocObjTypeInfo.html +1 -1
  235. package/SVF-doxygen/html/html/classSVF_1_1LocSymTableInfo.html +2 -2
  236. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +1 -1
  237. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +8 -8
  238. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
  239. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +15 -15
  240. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +24 -24
  241. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
  242. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
  243. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +5 -5
  244. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +3 -3
  245. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +4 -4
  246. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +21 -21
  247. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +5 -5
  248. package/SVF-doxygen/html/html/classSVF_1_1MemModelBuilder-members.html +95 -0
  249. package/SVF-doxygen/html/html/classSVF_1_1MemModelBuilder.html +711 -0
  250. package/SVF-doxygen/html/html/classSVF_1_1MemObj-members.html +7 -10
  251. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +92 -199
  252. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +3 -3
  253. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator-members.html +1 -1
  254. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +7 -7
  255. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +34 -34
  256. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +3 -3
  257. package/SVF-doxygen/html/html/classSVF_1_1ObjPN.html +3 -3
  258. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo-members.html +8 -10
  259. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +68 -168
  260. package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +1 -1
  261. package/SVF-doxygen/html/html/classSVF_1_1Options.html +5 -5
  262. package/SVF-doxygen/html/html/classSVF_1_1PAG.html +67 -67
  263. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilder.html +41 -41
  264. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +3 -3
  265. package/SVF-doxygen/html/html/classSVF_1_1PAGEdge.html +5 -5
  266. package/SVF-doxygen/html/html/classSVF_1_1PAGNode.html +10 -10
  267. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +15 -15
  268. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
  269. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +16 -16
  270. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +4 -4
  271. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +32 -32
  272. package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +6 -6
  273. package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +5 -5
  274. package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +10 -10
  275. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache-members.html +39 -38
  276. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +153 -116
  277. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +21 -21
  278. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +3 -3
  279. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
  280. package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +1 -1
  281. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  282. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +2 -2
  283. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +8 -8
  284. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
  285. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +35 -35
  286. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +7 -7
  287. package/SVF-doxygen/html/html/classSVF_1_1SVFModule-members.html +1 -0
  288. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +113 -80
  289. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +3 -3
  290. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +16 -16
  291. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +5 -5
  292. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +1 -1
  293. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +14 -14
  294. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +2 -2
  295. package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +1 -1
  296. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +1 -1
  297. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +49 -55
  298. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +300 -587
  299. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +28 -28
  300. package/SVF-doxygen/html/html/classSVF_1_1TCTNode.html +1 -1
  301. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
  302. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
  303. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +3 -3
  304. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +1 -1
  305. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +11 -11
  306. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +8 -8
  307. package/SVF-doxygen/html/html/classSVF_1_1TypeSystem.html +1 -1
  308. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +1 -1
  309. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  310. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +14 -14
  311. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
  312. package/SVF-doxygen/html/html/classSVF_1_1ValPN.html +2 -2
  313. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +2 -2
  314. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +35 -35
  315. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +11 -11
  316. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +3 -3
  317. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +11 -11
  318. package/SVF-doxygen/html/html/classes.html +91 -91
  319. package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
  320. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  321. package/SVF-doxygen/html/html/dir_5840dc76920ee0f379cd88b55fa041fd.html +1 -1
  322. package/SVF-doxygen/html/html/dir_770a542efe75a1b68c109cb4e4290224.html +1 -1
  323. package/SVF-doxygen/html/html/files.html +2 -2
  324. package/SVF-doxygen/html/html/functions_0x7e.html +5 -8
  325. package/SVF-doxygen/html/html/functions_a.html +13 -10
  326. package/SVF-doxygen/html/html/functions_b.html +1 -1
  327. package/SVF-doxygen/html/html/functions_c.html +38 -36
  328. package/SVF-doxygen/html/html/functions_e.html +1 -1
  329. package/SVF-doxygen/html/html/functions_f.html +3 -3
  330. package/SVF-doxygen/html/html/functions_func.html +12 -9
  331. package/SVF-doxygen/html/html/functions_func_0x7e.html +5 -8
  332. package/SVF-doxygen/html/html/functions_func_b.html +1 -1
  333. package/SVF-doxygen/html/html/functions_func_c.html +28 -26
  334. package/SVF-doxygen/html/html/functions_func_e.html +1 -1
  335. package/SVF-doxygen/html/html/functions_func_g.html +11 -13
  336. package/SVF-doxygen/html/html/functions_func_h.html +3 -3
  337. package/SVF-doxygen/html/html/functions_func_i.html +8 -7
  338. package/SVF-doxygen/html/html/functions_func_l.html +2 -8
  339. package/SVF-doxygen/html/html/functions_func_m.html +4 -1
  340. package/SVF-doxygen/html/html/functions_func_p.html +1 -1
  341. package/SVF-doxygen/html/html/functions_func_s.html +8 -5
  342. package/SVF-doxygen/html/html/functions_func_v.html +0 -3
  343. package/SVF-doxygen/html/html/functions_g.html +6 -8
  344. package/SVF-doxygen/html/html/functions_h.html +3 -3
  345. package/SVF-doxygen/html/html/functions_i.html +15 -14
  346. package/SVF-doxygen/html/html/functions_l.html +6 -10
  347. package/SVF-doxygen/html/html/functions_m.html +5 -1
  348. package/SVF-doxygen/html/html/functions_n.html +4 -4
  349. package/SVF-doxygen/html/html/functions_o.html +3 -3
  350. package/SVF-doxygen/html/html/functions_p.html +13 -9
  351. package/SVF-doxygen/html/html/functions_r.html +1 -1
  352. package/SVF-doxygen/html/html/functions_rela.html +3 -0
  353. package/SVF-doxygen/html/html/functions_s.html +20 -14
  354. package/SVF-doxygen/html/html/functions_t.html +4 -4
  355. package/SVF-doxygen/html/html/functions_u.html +3 -3
  356. package/SVF-doxygen/html/html/functions_v.html +2 -5
  357. package/SVF-doxygen/html/html/functions_vars_l.html +1 -1
  358. package/SVF-doxygen/html/html/functions_vars_s.html +2 -1
  359. package/SVF-doxygen/html/html/functions_w.html +3 -1
  360. package/SVF-doxygen/html/html/hierarchy.html +127 -128
  361. package/SVF-doxygen/html/html/mta_8cpp.html +1 -1
  362. package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
  363. package/SVF-doxygen/html/html/namespaceSVF.html +1 -3
  364. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
  365. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +40 -39
  366. package/SVF-doxygen/html/html/saber_8cpp.html +1 -1
  367. package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
  368. package/SVF-doxygen/html/html/search/all_1.js +3 -2
  369. package/SVF-doxygen/html/html/search/all_10.js +9 -9
  370. package/SVF-doxygen/html/html/search/all_12.js +2 -2
  371. package/SVF-doxygen/html/html/search/all_13.js +9 -8
  372. package/SVF-doxygen/html/html/search/all_14.js +6 -6
  373. package/SVF-doxygen/html/html/search/all_15.js +2 -2
  374. package/SVF-doxygen/html/html/search/all_16.js +0 -1
  375. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  376. package/SVF-doxygen/html/html/search/all_1b.js +3 -4
  377. package/SVF-doxygen/html/html/search/all_2.js +1 -1
  378. package/SVF-doxygen/html/html/search/all_3.js +11 -10
  379. package/SVF-doxygen/html/html/search/all_5.js +1 -1
  380. package/SVF-doxygen/html/html/search/all_6.js +1 -1
  381. package/SVF-doxygen/html/html/search/all_7.js +2 -2
  382. package/SVF-doxygen/html/html/search/all_8.js +3 -3
  383. package/SVF-doxygen/html/html/search/all_9.js +4 -3
  384. package/SVF-doxygen/html/html/search/all_c.js +4 -7
  385. package/SVF-doxygen/html/html/search/all_d.js +4 -1
  386. package/SVF-doxygen/html/html/search/all_e.js +2 -2
  387. package/SVF-doxygen/html/html/search/all_f.js +1 -1
  388. package/SVF-doxygen/html/html/search/classes_9.js +1 -3
  389. package/SVF-doxygen/html/html/search/classes_a.js +1 -0
  390. package/SVF-doxygen/html/html/search/files_8.js +1 -3
  391. package/SVF-doxygen/html/html/search/files_9.js +2 -0
  392. package/SVF-doxygen/html/html/search/functions_0.js +3 -2
  393. package/SVF-doxygen/html/html/search/functions_1.js +1 -1
  394. package/SVF-doxygen/html/html/search/functions_10.js +1 -0
  395. package/SVF-doxygen/html/html/search/functions_13.js +0 -1
  396. package/SVF-doxygen/html/html/search/functions_16.js +3 -4
  397. package/SVF-doxygen/html/html/search/functions_2.js +10 -9
  398. package/SVF-doxygen/html/html/search/functions_4.js +1 -1
  399. package/SVF-doxygen/html/html/search/functions_6.js +2 -2
  400. package/SVF-doxygen/html/html/search/functions_7.js +3 -3
  401. package/SVF-doxygen/html/html/search/functions_8.js +2 -1
  402. package/SVF-doxygen/html/html/search/functions_a.js +1 -3
  403. package/SVF-doxygen/html/html/search/functions_b.js +2 -1
  404. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  405. package/SVF-doxygen/html/html/search/related_3.js +1 -0
  406. package/SVF-doxygen/html/html/search/variables_13.js +1 -1
  407. package/SVF-doxygen/html/html/search/variables_14.js +2 -2
  408. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  409. package/SVF-doxygen/html/html/search/variables_c.js +1 -1
  410. package/SVF-doxygen/html/html/search/variables_e.js +1 -1
  411. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CHGraph_01_5_01_4.html +12 -12
  412. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  413. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
  414. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PAG_01_5_01_4.html +17 -17
  415. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +2 -2
  416. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01TCT_01_5_01_4.html +1 -1
  417. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1GenericNode_3_01NodeTy_00_01EdgeTy_01_4_01_5_4_01_4.html +14 -14
  418. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericGraph_3_01NodeTy_00_01EdgeTy_01_4_01_5_4.html +20 -20
  419. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericNode_3_01NodeTy_00_01EdgeTy_01_4_01_5_01_4.html +16 -16
  420. package/SVF-doxygen/html/html/svf-ex_8cpp.html +8 -7
  421. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +6 -5
  422. package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
  423. package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
  424. package/include/Graphs/GenericGraph.h +5 -8
  425. package/include/MemoryModel/MemModel.h +5 -21
  426. package/include/MemoryModel/PersistentPointsToCache.h +13 -7
  427. package/include/MemoryModel/PointerAnalysisImpl.h +1 -0
  428. package/include/SVF-FE/CHG.h +1 -1
  429. package/include/SVF-FE/MemModelBuilder.h +102 -0
  430. package/include/SVF-FE/SymbolTableInfo.h +12 -79
  431. package/include/Util/NodeIDAllocator.h +1 -1
  432. package/include/Util/SVFModule.h +16 -0
  433. package/include/WPA/Andersen.h +2 -7
  434. package/lib/Graphs/PAG.cpp +3 -10
  435. package/lib/MemoryModel/MemModel.cpp +10 -436
  436. package/lib/SVF-FE/CHG.cpp +0 -6
  437. package/lib/SVF-FE/CPPUtil.cpp +2 -0
  438. package/lib/SVF-FE/MemModelBuilder.cpp +616 -0
  439. package/lib/SVF-FE/SymbolTableInfo.cpp +10 -453
  440. package/lib/Util/NodeIDAllocator.cpp +2 -1
  441. package/lib/Util/Options.cpp +2 -10
  442. package/lib/Util/SVFModule.cpp +3 -2
  443. package/lib/WPA/Andersen.cpp +13 -1
  444. package/package.json +1 -1
  445. package/tools/Example/svf-ex.cpp +6 -3
  446. package/include/SVF-FE/LocMemModel.h +0 -35
  447. package/lib/SVF-FE/LocMemModel.cpp +0 -31
@@ -47,39 +47,15 @@ using namespace SVFUtil;
47
47
  DataLayout* SymbolTableInfo::dl = nullptr;
48
48
  SymbolTableInfo* SymbolTableInfo::symInfo = nullptr;
49
49
 
50
+
50
51
  /*
51
- * Initial the memory object here
52
+ * Initial the memory object here (for a dummy object)
52
53
  */
53
- void MemObj::init(const Value *val)
54
+ ObjTypeInfo* SymbolTableInfo::createObjTypeInfo(const Type* type)
54
55
  {
55
- const PointerType *refTy = nullptr;
56
-
57
- const Instruction *I = SVFUtil::dyn_cast<Instruction>(val);
58
-
59
- // We consider two types of objects:
60
- // (1) A heap/static object from a callsite
61
- if (I && isNonInstricCallSite(I))
62
- refTy = getRefTypeOfHeapAllocOrStatic(I);
63
- // (2) Other objects (e.g., alloca, global, etc.)
64
- else
65
- refTy = SVFUtil::dyn_cast<PointerType>(val->getType());
66
-
67
- if (refTy)
68
- {
69
- Type *objTy = refTy->getElementType();
70
- if(Options::LocMemModel)
71
- typeInfo = new LocObjTypeInfo(val, objTy, Options::MaxFieldLimit);
72
- else
73
- typeInfo = new ObjTypeInfo(val, objTy, Options::MaxFieldLimit);
74
- typeInfo->init(val);
75
- }
76
- else
77
- {
78
- writeWrnMsg("try to create an object with a non-pointer type.");
79
- writeWrnMsg(val->getName().str());
80
- writeWrnMsg("(" + getSourceLoc(val) + ")");
81
- assert(false && "Memory object must be held by a pointer-typed ref value.");
82
- }
56
+ ObjTypeInfo* typeInfo = new ObjTypeInfo(StInfo::getMaxFieldLimit(),type);
57
+ typeInfo->analyzeHeapObjType(type);
58
+ return typeInfo;
83
59
  }
84
60
 
85
61
  /*!
@@ -89,10 +65,7 @@ SymbolTableInfo* SymbolTableInfo::SymbolInfo()
89
65
  {
90
66
  if (symInfo == nullptr)
91
67
  {
92
- if(Options::LocMemModel)
93
- symInfo = new LocSymTableInfo();
94
- else
95
- symInfo = new SymbolTableInfo();
68
+ symInfo = new SymbolTableInfo();
96
69
  symInfo->setModelConstants(Options::ModelConsts);
97
70
  }
98
71
  return symInfo;
@@ -405,161 +378,6 @@ LocationSet SymbolTableInfo::getModulusOffset(const MemObj* obj, const LocationS
405
378
  }
406
379
 
407
380
 
408
- /*!
409
- * This method identify which is value sym and which is object sym
410
- */
411
- void SymbolTableInfo::buildMemModel(SVFModule* svfModule)
412
- {
413
- SVFUtil::increaseStackSize();
414
-
415
- mod = svfModule;
416
-
417
- StInfo::setMaxFieldLimit(Options::MaxFieldLimit);
418
-
419
- // Object #0 is black hole the object that may point to any object
420
- assert(totalSymNum == BlackHole && "Something changed!");
421
- symTyMap.insert(std::make_pair(totalSymNum++, BlackHole));
422
- createBlkOrConstantObj(BlackHole);
423
-
424
- // Object #1 always represents the constant
425
- assert(totalSymNum == ConstantObj && "Something changed!");
426
- symTyMap.insert(std::make_pair(totalSymNum++, ConstantObj));
427
- createBlkOrConstantObj(ConstantObj);
428
-
429
- // Pointer #2 always represents the pointer points-to black hole.
430
- assert(totalSymNum == BlkPtr && "Something changed!");
431
- symTyMap.insert(std::make_pair(totalSymNum++, BlkPtr));
432
-
433
- // Pointer #3 always represents the null pointer.
434
- assert(totalSymNum == NullPtr && "Something changed!");
435
- symTyMap.insert(std::make_pair(totalSymNum, NullPtr));
436
-
437
- // Add symbols for all the globals .
438
- for (SVFModule::global_iterator I = svfModule->global_begin(), E =
439
- svfModule->global_end(); I != E; ++I)
440
- {
441
- collectSym(*I);
442
- }
443
-
444
- // Add symbols for all the global aliases
445
- for (SVFModule::alias_iterator I = svfModule->alias_begin(), E =
446
- svfModule->alias_end(); I != E; I++)
447
- {
448
- collectSym(*I);
449
- collectSym((*I)->getAliasee());
450
- }
451
-
452
- // Add symbols for all of the functions and the instructions in them.
453
- for (SVFModule::llvm_iterator F = svfModule->llvmFunBegin(), E = svfModule->llvmFunEnd(); F != E; ++F)
454
- {
455
- Function *fun = *F;
456
- collectSym(fun);
457
- collectRet(fun);
458
- if (fun->getFunctionType()->isVarArg())
459
- collectVararg(fun);
460
-
461
- // Add symbols for all formal parameters.
462
- for (Function::arg_iterator I = fun->arg_begin(), E = fun->arg_end();
463
- I != E; ++I)
464
- {
465
- collectSym(&*I);
466
- }
467
-
468
- // collect and create symbols inside the function body
469
- for (inst_iterator II = inst_begin(*fun), E = inst_end(*fun); II != E; ++II)
470
- {
471
- const Instruction *inst = &*II;
472
- collectSym(inst);
473
-
474
- // initialization for some special instructions
475
- //{@
476
- if (const StoreInst *st = SVFUtil::dyn_cast<StoreInst>(inst))
477
- {
478
- collectSym(st->getPointerOperand());
479
- collectSym(st->getValueOperand());
480
- }
481
- else if (const LoadInst *ld = SVFUtil::dyn_cast<LoadInst>(inst))
482
- {
483
- collectSym(ld->getPointerOperand());
484
- }
485
- else if (const PHINode *phi = SVFUtil::dyn_cast<PHINode>(inst))
486
- {
487
- for (u32_t i = 0; i < phi->getNumIncomingValues(); ++i)
488
- {
489
- collectSym(phi->getIncomingValue(i));
490
- }
491
- }
492
- else if (const GetElementPtrInst *gep = SVFUtil::dyn_cast<GetElementPtrInst>(
493
- inst))
494
- {
495
- collectSym(gep->getPointerOperand());
496
- }
497
- else if (const SelectInst *sel = SVFUtil::dyn_cast<SelectInst>(inst))
498
- {
499
- collectSym(sel->getTrueValue());
500
- collectSym(sel->getFalseValue());
501
- }
502
- else if (const BinaryOperator *binary = SVFUtil::dyn_cast<BinaryOperator>(inst))
503
- {
504
- for (u32_t i = 0; i < binary->getNumOperands(); i++)
505
- collectSym(binary->getOperand(i));
506
- }
507
- else if (const UnaryOperator *unary = SVFUtil::dyn_cast<UnaryOperator>(inst))
508
- {
509
- for (u32_t i = 0; i < unary->getNumOperands(); i++)
510
- collectSym(unary->getOperand(i));
511
- }
512
- else if (const CmpInst *cmp = SVFUtil::dyn_cast<CmpInst>(inst))
513
- {
514
- for (u32_t i = 0; i < cmp->getNumOperands(); i++)
515
- collectSym(cmp->getOperand(i));
516
- }
517
- else if (const CastInst *cast = SVFUtil::dyn_cast<CastInst>(inst))
518
- {
519
- collectSym(cast->getOperand(0));
520
- }
521
- else if (const ReturnInst *ret = SVFUtil::dyn_cast<ReturnInst>(inst))
522
- {
523
- if(ret->getReturnValue())
524
- collectSym(ret->getReturnValue());
525
- }
526
- else if (const BranchInst *br = SVFUtil::dyn_cast<BranchInst>(inst))
527
- {
528
- Value* opnd = br->isConditional() ? br->getCondition() : br->getOperand(0);
529
- collectSym(opnd);
530
- }
531
- else if (const SwitchInst *sw = SVFUtil::dyn_cast<SwitchInst>(inst))
532
- {
533
- collectSym(sw->getCondition());
534
- }
535
- else if (isNonInstricCallSite(inst))
536
- {
537
-
538
- CallSite cs = SVFUtil::getLLVMCallSite(inst);
539
- callSiteSet.insert(cs);
540
- for (CallSite::arg_iterator it = cs.arg_begin();
541
- it != cs.arg_end(); ++it)
542
- {
543
- collectSym(*it);
544
- }
545
- // Calls to inline asm need to be added as well because the callee isn't
546
- // referenced anywhere else.
547
- const Value *Callee = cs.getCalledValue();
548
- collectSym(Callee);
549
-
550
- //TODO handle inlineAsm
551
- ///if (SVFUtil::isa<InlineAsm>(Callee))
552
-
553
- }
554
- //@}
555
- }
556
- }
557
-
558
- NodeIDAllocator::get()->endSymbolAllocation();
559
- if (Options::SymTabPrint) {
560
- SymbolTableInfo::SymbolInfo()->dump();
561
- }
562
- }
563
381
 
564
382
  /*!
565
383
  * Destroy the memory for this symbol table after use
@@ -579,121 +397,9 @@ void SymbolTableInfo::destroy()
579
397
  if (iter->second)
580
398
  delete iter->second;
581
399
  }
582
- }
583
-
584
- /*!
585
- * Collect symbols, including value and object syms
586
- */
587
- void SymbolTableInfo::collectSym(const Value *val)
588
- {
589
-
590
- //TODO: filter the non-pointer type // if (!SVFUtil::isa<PointerType>(val->getType())) return;
591
-
592
- DBOUT(DMemModel, outs() << "collect sym from ##" << *val << " \n");
593
-
594
- // special sym here
595
- if (isNullPtrSym(val) || isBlackholeSym(val))
596
- return;
597
-
598
- //TODO handle constant expression value here??
599
- handleCE(val);
600
-
601
- // create a value sym
602
- collectVal(val);
603
-
604
- // create an object If it is a heap, stack, global, function.
605
- if (isObject(val))
606
- {
607
- collectObj(val);
608
- }
609
- }
610
-
611
- /*!
612
- * Get value sym, if not available create a new one
613
- */
614
- void SymbolTableInfo::collectVal(const Value *val)
615
- {
616
- ValueToIDMapTy::iterator iter = valSymMap.find(val);
617
- if (iter == valSymMap.end())
618
- {
619
- // create val sym and sym type
620
- SymID id = NodeIDAllocator::get()->allocateValueId();
621
- valSymMap.insert(std::make_pair(val, id));
622
- symTyMap.insert(std::make_pair(id, ValSym));
623
- DBOUT(DMemModel,
624
- outs() << "create a new value sym " << id << "\n");
625
- /// handle global constant expression here
626
- if (const GlobalVariable* globalVar = SVFUtil::dyn_cast<GlobalVariable>(val))
627
- handleGlobalCE(globalVar);
628
- }
629
400
 
630
- if (isConstantObjSym(val))
631
- collectObj(val);
632
- }
633
-
634
- /*!
635
- * Get memory object sym, if not available create a new one
636
- */
637
- void SymbolTableInfo::collectObj(const Value *val)
638
- {
639
- val = getGlobalRep(val);
640
- ValueToIDMapTy::iterator iter = objSymMap.find(val);
641
- if (iter == objSymMap.end())
642
- {
643
- // if the object pointed by the pointer is a constant data (e.g., i32 0) or a global constant object (e.g. string)
644
- // then we treat them as one ConstantObj
645
- if(isConstantData(val) || (isConstantObjSym(val) && !getModelConstants()))
646
- {
647
- objSymMap.insert(std::make_pair(val, constantSymID()));
648
- }
649
- // otherwise, we will create an object for each abstract memory location
650
- else
651
- {
652
- // create obj sym and sym type
653
- SymID id = NodeIDAllocator::get()->allocateObjectId();
654
- objSymMap.insert(std::make_pair(val, id));
655
- symTyMap.insert(std::make_pair(id, ObjSym));
656
- DBOUT(DMemModel,
657
- outs() << "create a new obj sym " << id << "\n");
658
-
659
- // create a memory object
660
- MemObj* mem = new MemObj(val, id);
661
- assert(objMap.find(id) == objMap.end());
662
- objMap[id] = mem;
663
- }
664
- }
665
- }
666
-
667
- /*!
668
- * Create unique return sym, if not available create a new one
669
- */
670
- void SymbolTableInfo::collectRet(const Function *val)
671
- {
672
- FunToIDMapTy::iterator iter = returnSymMap.find(val);
673
- if (iter == returnSymMap.end())
674
- {
675
- SymID id = NodeIDAllocator::get()->allocateValueId();
676
- returnSymMap.insert(std::make_pair(val, id));
677
- symTyMap.insert(std::make_pair(id, RetSym));
678
- DBOUT(DMemModel,
679
- outs() << "create a return sym " << id << "\n");
680
- }
681
- }
682
-
683
- /*!
684
- * Create vararg sym, if not available create a new one
685
- */
686
- void SymbolTableInfo::collectVararg(const Function *val)
687
- {
688
- FunToIDMapTy::iterator iter = varargSymMap.find(val);
689
- if (iter == varargSymMap.end())
690
- {
691
- SymID id = NodeIDAllocator::get()->allocateValueId();
692
- varargSymMap.insert(std::make_pair(val, id));
693
- symTyMap.insert(std::make_pair(id, VarargSym));
694
- DBOUT(DMemModel,
695
- outs() << "create a vararg sym " << id << "\n");
696
- }
401
+ delete dl;
402
+ dl = nullptr;
697
403
  }
698
404
 
699
405
  /*!
@@ -751,156 +457,6 @@ bool SymbolTableInfo::isConstantObjSym(const Value *val)
751
457
  }
752
458
 
753
459
 
754
- /*!
755
- * Handle constant expression
756
- */
757
- void SymbolTableInfo::handleCE(const Value *val)
758
- {
759
- if (const Constant* ref = SVFUtil::dyn_cast<Constant>(val))
760
- {
761
- if (const ConstantExpr* ce = isGepConstantExpr(ref))
762
- {
763
- DBOUT(DMemModelCE,
764
- outs() << "handle constant expression " << *ref << "\n");
765
- collectVal(ce);
766
- collectVal(ce->getOperand(0));
767
- // handle the recursive constant express case
768
- // like (gep (bitcast (gep X 1)) 1); the inner gep is ce->getOperand(0)
769
- handleCE(ce->getOperand(0));
770
- }
771
- else if (const ConstantExpr* ce = isCastConstantExpr(ref))
772
- {
773
- DBOUT(DMemModelCE,
774
- outs() << "handle constant expression " << *ref << "\n");
775
- collectVal(ce);
776
- collectVal(ce->getOperand(0));
777
- // handle the recursive constant express case
778
- // like (gep (bitcast (gep X 1)) 1); the inner gep is ce->getOperand(0)
779
- handleCE(ce->getOperand(0));
780
- }
781
- else if (const ConstantExpr* ce = isSelectConstantExpr(ref))
782
- {
783
- DBOUT(DMemModelCE,
784
- outs() << "handle constant expression " << *ref << "\n");
785
- collectVal(ce);
786
- collectVal(ce->getOperand(0));
787
- collectVal(ce->getOperand(1));
788
- collectVal(ce->getOperand(2));
789
- // handle the recursive constant express case
790
- // like (gep (bitcast (gep X 1)) 1); the inner gep is ce->getOperand(0)
791
- handleCE(ce->getOperand(0));
792
- handleCE(ce->getOperand(1));
793
- handleCE(ce->getOperand(2));
794
- }
795
- // if we meet a int2ptr, then it points-to black hole
796
- else if (const ConstantExpr *int2Ptrce = isInt2PtrConstantExpr(ref)) {
797
- collectVal(int2Ptrce);
798
- } else if (const ConstantExpr *ptr2Intce = isPtr2IntConstantExpr(ref)) {
799
- collectVal(ptr2Intce);
800
- const Constant *opnd = ptr2Intce->getOperand(0);
801
- handleCE(opnd);
802
- } else if (isTruncConstantExpr(ref) || isCmpConstantExpr(ref)) {
803
- collectVal(ref);
804
- } else if (isBinaryConstantExpr(ref)) {
805
- collectVal(ref);
806
- } else if (isUnaryConstantExpr(ref)) {
807
- // we don't handle unary constant expression like fneg(x) now
808
- collectVal(ref);
809
- } else if (SVFUtil::isa<ConstantAggregate>(ref)) {
810
- // we don't handle constant agrgregate like constant vectors
811
- collectVal(ref);
812
- } else {
813
- if (SVFUtil::isa<ConstantExpr>(val))
814
- assert(false && "we don't handle all other constant expression for now!");
815
- collectVal(ref);
816
- }
817
- }
818
- }
819
-
820
- /*!
821
- * Handle global constant expression
822
- */
823
- void SymbolTableInfo::handleGlobalCE(const GlobalVariable *G)
824
- {
825
- assert(G);
826
-
827
- //The type this global points to
828
- const Type *T = G->getType()->getContainedType(0);
829
- bool is_array = 0;
830
- //An array is considered a single variable of its type.
831
- while (const ArrayType *AT = SVFUtil::dyn_cast<ArrayType>(T))
832
- {
833
- T = AT->getElementType();
834
- is_array = 1;
835
- }
836
-
837
- if (SVFUtil::isa<StructType>(T))
838
- {
839
- //A struct may be used in constant GEP expr.
840
- for (Value::const_user_iterator it = G->user_begin(), ie = G->user_end();
841
- it != ie; ++it)
842
- {
843
- handleCE(*it);
844
- }
845
- }
846
- else
847
- {
848
- if (is_array)
849
- {
850
- for (Value::const_user_iterator it = G->user_begin(), ie =
851
- G->user_end(); it != ie; ++it)
852
- {
853
- handleCE(*it);
854
- }
855
- }
856
- }
857
-
858
- if (G->hasInitializer())
859
- {
860
- handleGlobalInitializerCE(G->getInitializer(), 0);
861
- }
862
- }
863
-
864
- /*!
865
- * Handle global variable initialization
866
- */
867
- void SymbolTableInfo::handleGlobalInitializerCE(const Constant *C,
868
- u32_t offset)
869
- {
870
-
871
- if (C->getType()->isSingleValueType())
872
- {
873
- if (const ConstantExpr *E = SVFUtil::dyn_cast<ConstantExpr>(C))
874
- {
875
- handleCE(E);
876
- }
877
- else
878
- {
879
- collectVal(C);
880
- }
881
- }
882
- else if (SVFUtil::isa<ConstantArray>(C))
883
- {
884
- for (u32_t i = 0, e = C->getNumOperands(); i != e; i++)
885
- {
886
- handleGlobalInitializerCE(SVFUtil::cast<Constant>(C->getOperand(i)), offset);
887
- }
888
- }
889
- else if (SVFUtil::isa<ConstantStruct>(C))
890
- {
891
- const StructType *sty = SVFUtil::cast<StructType>(C->getType());
892
- const std::vector<u32_t>& offsetvect =
893
- SymbolTableInfo::SymbolInfo()->getFattenFieldIdxVec(sty);
894
- for (u32_t i = 0, e = C->getNumOperands(); i != e; i++)
895
- {
896
- u32_t off = offsetvect[i];
897
- handleGlobalInitializerCE(SVFUtil::cast<Constant>(C->getOperand(i)),
898
- offset + off);
899
- }
900
- }
901
- }
902
-
903
-
904
460
  /*
905
461
  * Print out the composite type information
906
462
  */
@@ -1089,3 +645,4 @@ u32_t SymbolTableInfo::getTypeSizeInBytes(const StructType *sty, u32_t field_idx
1089
645
 
1090
646
 
1091
647
 
648
+
@@ -148,9 +148,10 @@ namespace SVF
148
148
  return id;
149
149
  }
150
150
 
151
- void NodeIDAllocator::endSymbolAllocation(void)
151
+ NodeID NodeIDAllocator::endSymbolAllocation(void)
152
152
  {
153
153
  numSymbols = numNodes;
154
+ return numSymbols;
154
155
  }
155
156
 
156
157
  const std::string NodeIDAllocator::Clusterer::NumObjects = "NumObjects";
@@ -26,8 +26,8 @@ namespace SVF
26
26
  llvm::cl::desc("Method of allocating (LLVM) values and memory objects as node IDs"),
27
27
  llvm::cl::values(
28
28
  clEnumValN(NodeIDAllocator::Strategy::DENSE, "dense", "allocate objects together and values together, separately"),
29
- clEnumValN(NodeIDAllocator::Strategy::SEQ, "seq", "allocate values and objects sequentially, intermixed"),
30
- clEnumValN(NodeIDAllocator::Strategy::DEBUG, "debug", "allocate value and objects sequentially, intermixed, except GEP objects as offsets (default)")));
29
+ clEnumValN(NodeIDAllocator::Strategy::SEQ, "seq", "allocate values and objects sequentially, intermixed (default)"),
30
+ clEnumValN(NodeIDAllocator::Strategy::DEBUG, "debug", "allocate value and objects sequentially, intermixed, except GEP objects as offsets")));
31
31
 
32
32
  const llvm::cl::opt<unsigned> Options::MaxFieldLimit(
33
33
  "field-limit",
@@ -629,14 +629,6 @@ namespace SVF
629
629
  llvm::cl::desc("add svf.main()")
630
630
  );
631
631
 
632
-
633
- // SymbolTableInfo.cpp
634
- const llvm::cl::opt<bool> Options::LocMemModel(
635
- "loc-mm",
636
- llvm::cl::init(false),
637
- llvm::cl::desc("Bytes/bits modeling of memory locations")
638
- );
639
-
640
632
  const llvm::cl::opt<bool> Options::ModelConsts(
641
633
  "model-consts",
642
634
  llvm::cl::init(false),
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
  #include "Util/SVFModule.h"
25
- #include "SVF-FE/SymbolTableInfo.h"
25
+ #include "SVF-FE/MemModelBuilder.h"
26
26
  #include "Util/SVFUtil.h"
27
27
 
28
28
  using namespace SVF;
@@ -34,6 +34,7 @@ void SVFModule::buildSymbolTableInfo()
34
34
  /// building symbol table
35
35
  DBOUT(DGENERAL, SVFUtil::outs() << SVFUtil::pasMsg("Building Symbol table ...\n"));
36
36
  SymbolTableInfo *symInfo = SymbolTableInfo::SymbolInfo();
37
- symInfo->buildMemModel(this);
37
+ MemModelBuilder builder(symInfo);
38
+ builder.buildMemModel(this);
38
39
  }
39
40
  }
@@ -28,9 +28,9 @@
28
28
  */
29
29
 
30
30
  #include "Util/Options.h"
31
+ #include "SVF-FE/CommonCHG.h"
31
32
  #include "SVF-FE/LLVMUtil.h"
32
33
  #include "MemoryModel/PointsTo.h"
33
- #include "Util/Options.h"
34
34
  #include "WPA/Andersen.h"
35
35
  #include "WPA/Steensgaard.h"
36
36
 
@@ -57,6 +57,18 @@ double AndersenBase::timeOfProcessCopyGep = 0;
57
57
  double AndersenBase::timeOfProcessLoadStore = 0;
58
58
  double AndersenBase::timeOfUpdateCallGraph = 0;
59
59
 
60
+ /*!
61
+ * Destructor
62
+ */
63
+ AndersenBase::~AndersenBase()
64
+ {
65
+ delete consCG;
66
+ consCG = nullptr;
67
+
68
+ auto * chg = getCHGraph();
69
+ delete chg;
70
+ chg = nullptr;
71
+ }
60
72
 
61
73
  /*!
62
74
  * Initilize analysis
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-tools",
3
- "version": "1.0.310",
3
+ "version": "1.0.314",
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": {
@@ -160,9 +160,9 @@ int main(int argc, char ** argv)
160
160
  SVFModule* svfModule = LLVMModuleSet::getLLVMModuleSet()->buildSVFModule(moduleNameVec);
161
161
  svfModule->buildSymbolTableInfo();
162
162
 
163
- /// Build Program Assignment Graph (PAG)
164
- PAGBuilder builder;
165
- PAG* pag = builder.build(svfModule);
163
+ /// Build Program Assignment Graph (PAG)
164
+ PAGBuilder builder;
165
+ PAG* pag = builder.build(svfModule);
166
166
 
167
167
  /// Create Andersen's pointer analysis
168
168
  Andersen* ander = AndersenWaveDiff::createAndersenWaveDiff(pag);
@@ -199,7 +199,10 @@ int main(int argc, char ** argv)
199
199
  PAG::releasePAG();
200
200
 
201
201
  LLVMModuleSet::getLLVMModuleSet()->dumpModulesToFile(".svf.bc");
202
+ SVF::LLVMModuleSet::releaseLLVMModuleSet();
203
+ delete svfModule;
202
204
 
205
+ llvm::llvm_shutdown();
203
206
  return 0;
204
207
  }
205
208
 
@@ -1,35 +0,0 @@
1
- //===- LocMemModel.h -- Location set based memory model-----------------------//
2
- //
3
- // SVF: Static Value-Flow Analysis
4
- //
5
- // Copyright (C) <2013-2017> <Yulei Sui>
6
- //
7
-
8
- // This program is free software: you can redistribute it and/or modify
9
- // it under the terms of the GNU General Public License as published by
10
- // the Free Software Foundation, either version 3 of the License, or
11
- // (at your option) any later version.
12
-
13
- // This program is distributed in the hope that it will be useful,
14
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- // GNU General Public License for more details.
17
-
18
- // You should have received a copy of the GNU General Public License
19
- // along with this program. If not, see <http://www.gnu.org/licenses/>.
20
- //
21
- //===----------------------------------------------------------------------===//
22
-
23
- /*
24
- * LocMemModel.h
25
- *
26
- * Created on: Apr 28, 2014
27
- * Author: Yulei
28
- */
29
-
30
- #ifndef LOCMEMMODEL_H_
31
- #define LOCMEMMODEL_H_
32
-
33
-
34
-
35
- #endif /* LOCMEMMODEL_H_ */
@@ -1,31 +0,0 @@
1
- //===- LocMemModel.cpp -- Location set based memory model---------------------//
2
- //
3
- // SVF: Static Value-Flow Analysis
4
- //
5
- // Copyright (C) <2013-2017> <Yulei Sui>
6
- //
7
-
8
- // This program is free software: you can redistribute it and/or modify
9
- // it under the terms of the GNU General Public License as published by
10
- // the Free Software Foundation, either version 3 of the License, or
11
- // (at your option) any later version.
12
-
13
- // This program is distributed in the hope that it will be useful,
14
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- // GNU General Public License for more details.
17
-
18
- // You should have received a copy of the GNU General Public License
19
- // along with this program. If not, see <http://www.gnu.org/licenses/>.
20
- //
21
- //===----------------------------------------------------------------------===//
22
-
23
- /*
24
- * LocMemModel.cpp
25
- *
26
- * Created on: Apr 28, 2014
27
- * Author: Yulei Sui
28
- */
29
-
30
-
31
-