svf-tools 1.0.837 → 1.0.839

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 (401) hide show
  1. package/SVF-doxygen/html/AndersenSCD_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/Andersen_8cpp_source.html +20 -16
  3. package/SVF-doxygen/html/Andersen_8h_source.html +2 -2
  4. package/SVF-doxygen/html/BoundedZ3Expr_8cpp_source.html +1 -1
  5. package/SVF-doxygen/html/CFLAlias_8cpp_source.html +2 -2
  6. package/SVF-doxygen/html/CFLBase_8cpp_source.html +4 -4
  7. package/SVF-doxygen/html/CFLGraphBuilder_8cpp_source.html +1 -1
  8. package/SVF-doxygen/html/CFLSVFGBuilder_8cpp.html +86 -0
  9. package/SVF-doxygen/html/CFLSVFGBuilder_8cpp_source.html +195 -0
  10. package/SVF-doxygen/html/CFLSVFGBuilder_8h.html +98 -0
  11. package/SVF-doxygen/html/CFLSVFGBuilder_8h_source.html +148 -0
  12. package/SVF-doxygen/html/CFLVF_8cpp_source.html +4 -4
  13. package/SVF-doxygen/html/CFLVF_8h.html +1 -1
  14. package/SVF-doxygen/html/CFLVF_8h_source.html +5 -5
  15. package/SVF-doxygen/html/CHGBuilder_8cpp_source.html +1 -1
  16. package/SVF-doxygen/html/ConsG_8cpp_source.html +3 -3
  17. package/SVF-doxygen/html/DCHG_8cpp_source.html +1 -1
  18. package/SVF-doxygen/html/DDAPass_8cpp_source.html +9 -9
  19. package/SVF-doxygen/html/DDAStat_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/DDAVFSolver_8h_source.html +1 -1
  21. package/SVF-doxygen/html/DoubleFreeChecker_8cpp_source.html +5 -5
  22. package/SVF-doxygen/html/DoubleFreeChecker_8h_source.html +1 -1
  23. package/SVF-doxygen/html/ExtAPI_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/FSMPTA_8cpp_source.html +3 -3
  25. package/SVF-doxygen/html/FileChecker_8cpp_source.html +2 -2
  26. package/SVF-doxygen/html/FileChecker_8h_source.html +1 -1
  27. package/SVF-doxygen/html/FlowSensitive_8cpp_source.html +3 -3
  28. package/SVF-doxygen/html/ICFG_8cpp_source.html +1 -1
  29. package/SVF-doxygen/html/IRGraph_8cpp_source.html +1 -1
  30. package/SVF-doxygen/html/LLVMLoopAnalysis_8cpp_source.html +1 -1
  31. package/SVF-doxygen/html/LLVMModule_8cpp_source.html +2 -2
  32. package/SVF-doxygen/html/LeakChecker_8cpp_source.html +3 -3
  33. package/SVF-doxygen/html/LeakChecker_8h_source.html +1 -1
  34. package/SVF-doxygen/html/LockResultValidator_8cpp_source.html +1 -1
  35. package/SVF-doxygen/html/MHP_8cpp_source.html +1 -1
  36. package/SVF-doxygen/html/MTAAnnotator_8cpp_source.html +1 -1
  37. package/SVF-doxygen/html/MTAResultValidator_8cpp_source.html +1 -1
  38. package/SVF-doxygen/html/MTAStat_8cpp_source.html +1 -1
  39. package/SVF-doxygen/html/MemRegion_8cpp_source.html +1 -1
  40. package/SVF-doxygen/html/MemSSA_8cpp_source.html +2 -2
  41. package/SVF-doxygen/html/Options_8cpp_source.html +825 -892
  42. package/SVF-doxygen/html/Options_8h_source.html +275 -297
  43. package/SVF-doxygen/html/PointerAnalysisImpl_8cpp_source.html +1 -1
  44. package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +12 -12
  45. package/SVF-doxygen/html/ProgSlice_8cpp_source.html +170 -136
  46. package/SVF-doxygen/html/ProgSlice_8h_source.html +314 -298
  47. package/SVF-doxygen/html/SVFGBuilder_8cpp_source.html +4 -4
  48. package/SVF-doxygen/html/SVFGOPT_8cpp_source.html +4 -4
  49. package/SVF-doxygen/html/SVFGOPT_8h_source.html +5 -5
  50. package/SVF-doxygen/html/SVFGReadWrite_8cpp_source.html +2 -2
  51. package/SVF-doxygen/html/SVFG_8cpp_source.html +32 -32
  52. package/SVF-doxygen/html/SVFG_8h_source.html +446 -444
  53. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +1 -1
  54. package/SVF-doxygen/html/SVFIR_8cpp_source.html +2 -2
  55. package/SVF-doxygen/html/SVFStatements_8cpp_source.html +1 -1
  56. package/SVF-doxygen/html/SVFUtil_8cpp_source.html +1 -1
  57. package/SVF-doxygen/html/SVFVariables_8cpp_source.html +1 -1
  58. package/SVF-doxygen/html/SaberCondAllocator_8cpp_source.html +2 -2
  59. package/SVF-doxygen/html/SaberCondAllocator_8h_source.html +246 -235
  60. package/SVF-doxygen/html/SaberSVFGBuilder_8cpp.html +1 -0
  61. package/SVF-doxygen/html/SaberSVFGBuilder_8cpp_source.html +272 -266
  62. package/SVF-doxygen/html/SaberSVFGBuilder_8h_source.html +75 -62
  63. package/SVF-doxygen/html/SrcSnkDDA_8cpp_source.html +261 -260
  64. package/SVF-doxygen/html/SrcSnkDDA_8h_source.html +18 -18
  65. package/SVF-doxygen/html/SymbolTableBuilder_8cpp_source.html +3 -3
  66. package/SVF-doxygen/html/SymbolTableInfo_8cpp_source.html +3 -3
  67. package/SVF-doxygen/html/TCT_8cpp_source.html +1 -1
  68. package/SVF-doxygen/html/TypeAnalysis_8cpp_source.html +1 -1
  69. package/SVF-doxygen/html/VFG_8cpp_source.html +1 -1
  70. package/SVF-doxygen/html/VersionedFlowSensitive_8cpp_source.html +4 -4
  71. package/SVF-doxygen/html/WPAPass_8cpp_source.html +5 -5
  72. package/SVF-doxygen/html/Z3Expr_8cpp_source.html +1 -1
  73. package/SVF-doxygen/html/annotated.html +377 -376
  74. package/SVF-doxygen/html/classSVF_1_1AddrStmt.html +1 -1
  75. package/SVF-doxygen/html/classSVF_1_1Andersen.html +18 -14
  76. package/SVF-doxygen/html/classSVF_1_1AndersenBase.html +4 -4
  77. package/SVF-doxygen/html/classSVF_1_1AndersenSCD.html +1 -1
  78. package/SVF-doxygen/html/classSVF_1_1BVDataPTAImpl.html +1 -1
  79. package/SVF-doxygen/html/classSVF_1_1BinaryOPStmt.html +1 -1
  80. package/SVF-doxygen/html/classSVF_1_1BoundedZ3Expr.html +1 -1
  81. package/SVF-doxygen/html/classSVF_1_1BranchStmt.html +1 -1
  82. package/SVF-doxygen/html/classSVF_1_1CFLAlias.html +2 -2
  83. package/SVF-doxygen/html/classSVF_1_1CFLBase.html +4 -4
  84. package/SVF-doxygen/html/classSVF_1_1CFLGraphBuilder.html +1 -1
  85. package/SVF-doxygen/html/classSVF_1_1CFLSVFGBuilder-members.html +121 -0
  86. package/SVF-doxygen/html/classSVF_1_1CFLSVFGBuilder.html +473 -0
  87. package/SVF-doxygen/html/classSVF_1_1CFLSVFGBuilder.png +0 -0
  88. package/SVF-doxygen/html/classSVF_1_1CFLVF-members.html +1 -1
  89. package/SVF-doxygen/html/classSVF_1_1CFLVF.html +11 -11
  90. package/SVF-doxygen/html/classSVF_1_1CHGBuilder.html +1 -1
  91. package/SVF-doxygen/html/classSVF_1_1CallPE.html +1 -1
  92. package/SVF-doxygen/html/classSVF_1_1CmpStmt.html +1 -1
  93. package/SVF-doxygen/html/classSVF_1_1ConstraintNode.html +1 -1
  94. package/SVF-doxygen/html/classSVF_1_1CopyStmt.html +1 -1
  95. package/SVF-doxygen/html/classSVF_1_1DCHGraph.html +1 -1
  96. package/SVF-doxygen/html/classSVF_1_1DDAPass.html +9 -9
  97. package/SVF-doxygen/html/classSVF_1_1DDAStat.html +1 -1
  98. package/SVF-doxygen/html/classSVF_1_1DDAVFSolver.html +1 -1
  99. package/SVF-doxygen/html/classSVF_1_1DoubleFreeChecker.html +6 -6
  100. package/SVF-doxygen/html/classSVF_1_1ExtAPI.html +1 -1
  101. package/SVF-doxygen/html/classSVF_1_1FIObjVar.html +1 -1
  102. package/SVF-doxygen/html/classSVF_1_1FileChecker.html +3 -3
  103. package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +1 -1
  104. package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +4 -4
  105. package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat.html +1 -1
  106. package/SVF-doxygen/html/classSVF_1_1GepObjVar.html +1 -1
  107. package/SVF-doxygen/html/classSVF_1_1GepStmt.html +1 -1
  108. package/SVF-doxygen/html/classSVF_1_1GepValVar.html +1 -1
  109. package/SVF-doxygen/html/classSVF_1_1ICFG.html +1 -1
  110. package/SVF-doxygen/html/classSVF_1_1LLVMLoopAnalysis.html +1 -1
  111. package/SVF-doxygen/html/classSVF_1_1LLVMModuleSet.html +2 -2
  112. package/SVF-doxygen/html/classSVF_1_1LeakChecker.html +6 -6
  113. package/SVF-doxygen/html/classSVF_1_1LoadStmt.html +1 -1
  114. package/SVF-doxygen/html/classSVF_1_1LockResultValidator.html +1 -1
  115. package/SVF-doxygen/html/classSVF_1_1MHP.html +1 -1
  116. package/SVF-doxygen/html/classSVF_1_1MRGenerator.html +1 -1
  117. package/SVF-doxygen/html/classSVF_1_1MTAAnnotator.html +1 -1
  118. package/SVF-doxygen/html/classSVF_1_1MTAResultValidator.html +1 -1
  119. package/SVF-doxygen/html/classSVF_1_1MTASVFGBuilder.html +3 -3
  120. package/SVF-doxygen/html/classSVF_1_1MTAStat.html +1 -1
  121. package/SVF-doxygen/html/classSVF_1_1MemSSA.html +2 -2
  122. package/SVF-doxygen/html/classSVF_1_1ObjTypeInfo.html +1 -1
  123. package/SVF-doxygen/html/classSVF_1_1ObjVar.html +1 -1
  124. package/SVF-doxygen/html/classSVF_1_1Options-members.html +64 -73
  125. package/SVF-doxygen/html/classSVF_1_1Options.html +128 -362
  126. package/SVF-doxygen/html/classSVF_1_1PhiStmt.html +1 -1
  127. package/SVF-doxygen/html/classSVF_1_1PointerAnalysis.html +12 -12
  128. package/SVF-doxygen/html/classSVF_1_1ProgSlice-members.html +25 -22
  129. package/SVF-doxygen/html/classSVF_1_1ProgSlice.html +493 -366
  130. package/SVF-doxygen/html/classSVF_1_1RetPE.html +1 -1
  131. package/SVF-doxygen/html/classSVF_1_1SVFG-members.html +182 -181
  132. package/SVF-doxygen/html/classSVF_1_1SVFG.html +326 -300
  133. package/SVF-doxygen/html/classSVF_1_1SVFGBuilder.html +6 -5
  134. package/SVF-doxygen/html/classSVF_1_1SVFGBuilder.png +0 -0
  135. package/SVF-doxygen/html/classSVF_1_1SVFGOPT.html +11 -11
  136. package/SVF-doxygen/html/classSVF_1_1SVFIR.html +2 -2
  137. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +1 -1
  138. package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +7 -7
  139. package/SVF-doxygen/html/classSVF_1_1SaberCondAllocator-members.html +22 -19
  140. package/SVF-doxygen/html/classSVF_1_1SaberCondAllocator.html +239 -160
  141. package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder-members.html +11 -9
  142. package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder.html +348 -286
  143. package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder.png +0 -0
  144. package/SVF-doxygen/html/classSVF_1_1SelectStmt.html +1 -1
  145. package/SVF-doxygen/html/classSVF_1_1SrcSnkDDA.html +263 -261
  146. package/SVF-doxygen/html/classSVF_1_1StoreStmt.html +1 -1
  147. package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +3 -3
  148. package/SVF-doxygen/html/classSVF_1_1SymbolTableInfo.html +3 -3
  149. package/SVF-doxygen/html/classSVF_1_1TCT.html +1 -1
  150. package/SVF-doxygen/html/classSVF_1_1TDForkPE.html +1 -1
  151. package/SVF-doxygen/html/classSVF_1_1TDJoinPE.html +1 -1
  152. package/SVF-doxygen/html/classSVF_1_1TypeAnalysis.html +1 -1
  153. package/SVF-doxygen/html/classSVF_1_1UnaryOPStmt.html +1 -1
  154. package/SVF-doxygen/html/classSVF_1_1VFG.html +1 -1
  155. package/SVF-doxygen/html/classSVF_1_1ValVar.html +1 -1
  156. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitive.html +4 -4
  157. package/SVF-doxygen/html/classSVF_1_1WPAPass.html +5 -5
  158. package/SVF-doxygen/html/classSVF_1_1Z3Expr.html +1 -1
  159. package/SVF-doxygen/html/classes.html +95 -94
  160. package/SVF-doxygen/html/dir_1b8e404556d3e8597ae60437f0a084bf.html +2 -0
  161. package/SVF-doxygen/html/dir_8a9c8659eb68b9cbd3fead4690588a47.html +2 -0
  162. package/SVF-doxygen/html/files.html +6 -4
  163. package/SVF-doxygen/html/functions_b.html +7 -6
  164. package/SVF-doxygen/html/functions_c.html +38 -29
  165. package/SVF-doxygen/html/functions_d.html +0 -15
  166. package/SVF-doxygen/html/functions_f.html +9 -9
  167. package/SVF-doxygen/html/functions_func_b.html +3 -2
  168. package/SVF-doxygen/html/functions_func_c.html +29 -23
  169. package/SVF-doxygen/html/functions_func_g.html +14 -10
  170. package/SVF-doxygen/html/functions_func_r.html +6 -5
  171. package/SVF-doxygen/html/functions_func_s.html +20 -17
  172. package/SVF-doxygen/html/functions_func_~.html +3 -0
  173. package/SVF-doxygen/html/functions_g.html +10 -6
  174. package/SVF-doxygen/html/functions_m.html +4 -7
  175. package/SVF-doxygen/html/functions_n.html +6 -5
  176. package/SVF-doxygen/html/functions_p.html +15 -14
  177. package/SVF-doxygen/html/functions_r.html +10 -6
  178. package/SVF-doxygen/html/functions_rela_c.html +3 -0
  179. package/SVF-doxygen/html/functions_s.html +24 -21
  180. package/SVF-doxygen/html/functions_t.html +5 -11
  181. package/SVF-doxygen/html/functions_type_n.html +2 -1
  182. package/SVF-doxygen/html/functions_type_s.html +6 -1
  183. package/SVF-doxygen/html/functions_type_w.html +1 -0
  184. package/SVF-doxygen/html/functions_v.html +4 -6
  185. package/SVF-doxygen/html/functions_vars_d.html +0 -15
  186. package/SVF-doxygen/html/functions_vars_m.html +1 -4
  187. package/SVF-doxygen/html/functions_vars_p.html +3 -0
  188. package/SVF-doxygen/html/functions_vars_r.html +3 -0
  189. package/SVF-doxygen/html/functions_vars_s.html +2 -7
  190. package/SVF-doxygen/html/functions_vars_t.html +0 -6
  191. package/SVF-doxygen/html/functions_w.html +3 -2
  192. package/SVF-doxygen/html/functions_~.html +3 -0
  193. package/SVF-doxygen/html/hierarchy.html +2 -1
  194. package/SVF-doxygen/html/namespaceSVF.html +2 -0
  195. package/SVF-doxygen/html/search/all_10.js +207 -206
  196. package/SVF-doxygen/html/search/all_11.js +115 -114
  197. package/SVF-doxygen/html/search/all_12.js +335 -335
  198. package/SVF-doxygen/html/search/all_13.js +190 -192
  199. package/SVF-doxygen/html/search/all_14.js +67 -67
  200. package/SVF-doxygen/html/search/all_15.js +167 -167
  201. package/SVF-doxygen/html/search/all_16.js +63 -63
  202. package/SVF-doxygen/html/search/all_17.js +1 -1
  203. package/SVF-doxygen/html/search/all_18.js +1 -1
  204. package/SVF-doxygen/html/search/all_19.js +11 -11
  205. package/SVF-doxygen/html/search/all_1a.js +26 -25
  206. package/SVF-doxygen/html/search/all_2.js +2 -2
  207. package/SVF-doxygen/html/search/all_3.js +466 -462
  208. package/SVF-doxygen/html/search/all_4.js +230 -235
  209. package/SVF-doxygen/html/search/all_5.js +119 -119
  210. package/SVF-doxygen/html/search/all_6.js +226 -226
  211. package/SVF-doxygen/html/search/all_7.js +804 -803
  212. package/SVF-doxygen/html/search/all_9.js +3 -3
  213. package/SVF-doxygen/html/search/all_b.js +1 -1
  214. package/SVF-doxygen/html/search/all_c.js +1 -1
  215. package/SVF-doxygen/html/search/all_d.js +184 -185
  216. package/SVF-doxygen/html/search/all_e.js +207 -207
  217. package/SVF-doxygen/html/search/all_f.js +116 -116
  218. package/SVF-doxygen/html/search/classes_10.js +73 -73
  219. package/SVF-doxygen/html/search/classes_11.js +15 -15
  220. package/SVF-doxygen/html/search/classes_12.js +2 -2
  221. package/SVF-doxygen/html/search/classes_13.js +10 -10
  222. package/SVF-doxygen/html/search/classes_14.js +14 -14
  223. package/SVF-doxygen/html/search/classes_15.js +1 -1
  224. package/SVF-doxygen/html/search/classes_2.js +37 -36
  225. package/SVF-doxygen/html/search/classes_3.js +37 -37
  226. package/SVF-doxygen/html/search/classes_4.js +9 -9
  227. package/SVF-doxygen/html/search/classes_5.js +28 -28
  228. package/SVF-doxygen/html/search/classes_6.js +104 -104
  229. package/SVF-doxygen/html/search/classes_7.js +34 -34
  230. package/SVF-doxygen/html/search/classes_8.js +56 -56
  231. package/SVF-doxygen/html/search/classes_9.js +1 -1
  232. package/SVF-doxygen/html/search/classes_a.js +12 -12
  233. package/SVF-doxygen/html/search/classes_b.js +29 -29
  234. package/SVF-doxygen/html/search/classes_c.js +6 -6
  235. package/SVF-doxygen/html/search/classes_d.js +18 -18
  236. package/SVF-doxygen/html/search/classes_e.js +36 -36
  237. package/SVF-doxygen/html/search/classes_f.js +25 -25
  238. package/SVF-doxygen/html/search/defines_0.js +3 -3
  239. package/SVF-doxygen/html/search/defines_1.js +2 -2
  240. package/SVF-doxygen/html/search/defines_2.js +30 -30
  241. package/SVF-doxygen/html/search/defines_3.js +20 -20
  242. package/SVF-doxygen/html/search/defines_4.js +2 -2
  243. package/SVF-doxygen/html/search/defines_5.js +4 -4
  244. package/SVF-doxygen/html/search/defines_6.js +2 -2
  245. package/SVF-doxygen/html/search/defines_7.js +5 -5
  246. package/SVF-doxygen/html/search/defines_8.js +11 -11
  247. package/SVF-doxygen/html/search/defines_9.js +9 -9
  248. package/SVF-doxygen/html/search/defines_a.js +2 -2
  249. package/SVF-doxygen/html/search/defines_b.js +1 -1
  250. package/SVF-doxygen/html/search/defines_c.js +3 -3
  251. package/SVF-doxygen/html/search/defines_d.js +2 -2
  252. package/SVF-doxygen/html/search/defines_e.js +7 -7
  253. package/SVF-doxygen/html/search/defines_f.js +3 -3
  254. package/SVF-doxygen/html/search/enums_0.js +3 -3
  255. package/SVF-doxygen/html/search/enums_1.js +2 -2
  256. package/SVF-doxygen/html/search/enums_10.js +1 -1
  257. package/SVF-doxygen/html/search/enums_11.js +1 -1
  258. package/SVF-doxygen/html/search/enums_2.js +8 -8
  259. package/SVF-doxygen/html/search/enums_3.js +1 -1
  260. package/SVF-doxygen/html/search/enums_4.js +3 -3
  261. package/SVF-doxygen/html/search/enums_5.js +1 -1
  262. package/SVF-doxygen/html/search/enums_6.js +2 -2
  263. package/SVF-doxygen/html/search/enums_7.js +2 -2
  264. package/SVF-doxygen/html/search/enums_8.js +4 -4
  265. package/SVF-doxygen/html/search/enums_9.js +1 -1
  266. package/SVF-doxygen/html/search/enums_a.js +1 -1
  267. package/SVF-doxygen/html/search/enums_b.js +7 -7
  268. package/SVF-doxygen/html/search/enums_c.js +1 -1
  269. package/SVF-doxygen/html/search/enums_d.js +4 -4
  270. package/SVF-doxygen/html/search/enums_e.js +2 -2
  271. package/SVF-doxygen/html/search/enums_f.js +4 -4
  272. package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
  273. package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
  274. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  275. package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
  276. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  277. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  278. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  279. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  280. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  281. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  282. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  283. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  284. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  285. package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
  286. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  287. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  288. package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
  289. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  290. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  291. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  292. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  293. package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
  294. package/SVF-doxygen/html/search/files_0.js +13 -13
  295. package/SVF-doxygen/html/search/files_1.js +7 -7
  296. package/SVF-doxygen/html/search/files_10.js +8 -8
  297. package/SVF-doxygen/html/search/files_11.js +8 -8
  298. package/SVF-doxygen/html/search/files_12.js +2 -2
  299. package/SVF-doxygen/html/search/files_2.js +57 -55
  300. package/SVF-doxygen/html/search/files_3.js +14 -14
  301. package/SVF-doxygen/html/search/files_4.js +5 -5
  302. package/SVF-doxygen/html/search/files_5.js +13 -13
  303. package/SVF-doxygen/html/search/files_6.js +9 -9
  304. package/SVF-doxygen/html/search/files_7.js +14 -14
  305. package/SVF-doxygen/html/search/files_8.js +13 -13
  306. package/SVF-doxygen/html/search/files_9.js +18 -18
  307. package/SVF-doxygen/html/search/files_a.js +3 -3
  308. package/SVF-doxygen/html/search/files_b.js +2 -2
  309. package/SVF-doxygen/html/search/files_c.js +20 -20
  310. package/SVF-doxygen/html/search/files_d.js +4 -4
  311. package/SVF-doxygen/html/search/files_e.js +62 -62
  312. package/SVF-doxygen/html/search/files_f.js +8 -8
  313. package/SVF-doxygen/html/search/functions_0.js +13 -13
  314. package/SVF-doxygen/html/search/functions_1.js +362 -362
  315. package/SVF-doxygen/html/search/functions_10.js +140 -140
  316. package/SVF-doxygen/html/search/functions_11.js +139 -139
  317. package/SVF-doxygen/html/search/functions_12.js +289 -288
  318. package/SVF-doxygen/html/search/functions_13.js +59 -59
  319. package/SVF-doxygen/html/search/functions_14.js +39 -39
  320. package/SVF-doxygen/html/search/functions_15.js +71 -71
  321. package/SVF-doxygen/html/search/functions_16.js +32 -32
  322. package/SVF-doxygen/html/search/functions_17.js +3 -3
  323. package/SVF-doxygen/html/search/functions_18.js +173 -172
  324. package/SVF-doxygen/html/search/functions_2.js +89 -89
  325. package/SVF-doxygen/html/search/functions_3.js +260 -258
  326. package/SVF-doxygen/html/search/functions_4.js +78 -78
  327. package/SVF-doxygen/html/search/functions_5.js +53 -53
  328. package/SVF-doxygen/html/search/functions_6.js +60 -60
  329. package/SVF-doxygen/html/search/functions_7.js +856 -855
  330. package/SVF-doxygen/html/search/functions_8.js +149 -149
  331. package/SVF-doxygen/html/search/functions_9.js +424 -424
  332. package/SVF-doxygen/html/search/functions_a.js +30 -30
  333. package/SVF-doxygen/html/search/functions_b.js +2 -2
  334. package/SVF-doxygen/html/search/functions_c.js +25 -25
  335. package/SVF-doxygen/html/search/functions_d.js +79 -79
  336. package/SVF-doxygen/html/search/functions_e.js +35 -35
  337. package/SVF-doxygen/html/search/functions_f.js +56 -56
  338. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  339. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  340. package/SVF-doxygen/html/search/related_0.js +2 -2
  341. package/SVF-doxygen/html/search/related_1.js +2 -2
  342. package/SVF-doxygen/html/search/related_2.js +3 -2
  343. package/SVF-doxygen/html/search/related_3.js +2 -2
  344. package/SVF-doxygen/html/search/related_4.js +2 -2
  345. package/SVF-doxygen/html/search/related_5.js +1 -1
  346. package/SVF-doxygen/html/search/related_6.js +2 -2
  347. package/SVF-doxygen/html/search/related_7.js +4 -4
  348. package/SVF-doxygen/html/search/related_8.js +2 -2
  349. package/SVF-doxygen/html/search/related_9.js +4 -4
  350. package/SVF-doxygen/html/search/related_a.js +19 -19
  351. package/SVF-doxygen/html/search/related_b.js +4 -4
  352. package/SVF-doxygen/html/search/related_c.js +2 -2
  353. package/SVF-doxygen/html/search/related_d.js +12 -12
  354. package/SVF-doxygen/html/search/related_e.js +2 -2
  355. package/SVF-doxygen/html/search/related_f.js +2 -2
  356. package/SVF-doxygen/html/search/typedefs_10.js +17 -16
  357. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  358. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  359. package/SVF-doxygen/html/search/typedefs_13.js +33 -33
  360. package/SVF-doxygen/html/search/typedefs_14.js +8 -8
  361. package/SVF-doxygen/html/search/typedefs_c.js +1 -1
  362. package/SVF-doxygen/html/search/variables_0.js +151 -151
  363. package/SVF-doxygen/html/search/variables_1.js +75 -75
  364. package/SVF-doxygen/html/search/variables_10.js +98 -97
  365. package/SVF-doxygen/html/search/variables_11.js +45 -44
  366. package/SVF-doxygen/html/search/variables_12.js +90 -92
  367. package/SVF-doxygen/html/search/variables_13.js +4 -6
  368. package/SVF-doxygen/html/search/variables_2.js +38 -38
  369. package/SVF-doxygen/html/search/variables_3.js +142 -142
  370. package/SVF-doxygen/html/search/variables_4.js +50 -55
  371. package/SVF-doxygen/html/search/variables_5.js +37 -37
  372. package/SVF-doxygen/html/search/variables_6.js +66 -66
  373. package/SVF-doxygen/html/search/variables_7.js +34 -34
  374. package/SVF-doxygen/html/search/variables_8.js +7 -7
  375. package/SVF-doxygen/html/search/variables_9.js +78 -78
  376. package/SVF-doxygen/html/search/variables_a.js +4 -4
  377. package/SVF-doxygen/html/search/variables_b.js +10 -10
  378. package/SVF-doxygen/html/search/variables_c.js +45 -45
  379. package/SVF-doxygen/html/search/variables_d.js +55 -56
  380. package/SVF-doxygen/html/search/variables_e.js +123 -123
  381. package/SVF-doxygen/html/search/variables_f.js +30 -30
  382. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +2 -2
  383. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +1 -1
  384. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +2 -2
  385. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1SVFG_01_5_01_4.html +2 -2
  386. package/SVF-doxygen/html/svf-ex_8cpp.html +1 -1
  387. package/SVF-doxygen/html/svf-ex_8cpp_source.html +1 -1
  388. package/package.json +1 -1
  389. package/svf/include/CFL/CFLSVFGBuilder.h +58 -0
  390. package/svf/include/CFL/CFLVF.h +2 -2
  391. package/svf/include/Graphs/SVFG.h +1 -0
  392. package/svf/include/SABER/ProgSlice.h +11 -0
  393. package/svf/include/SABER/SaberCondAllocator.h +8 -0
  394. package/svf/include/SABER/SaberSVFGBuilder.h +12 -2
  395. package/svf/include/Util/Options.h +1 -14
  396. package/svf/lib/CFL/CFLSVFGBuilder.cpp +100 -0
  397. package/svf/lib/SABER/ProgSlice.cpp +48 -1
  398. package/svf/lib/SABER/SaberSVFGBuilder.cpp +5 -0
  399. package/svf/lib/SABER/SrcSnkDDA.cpp +1 -0
  400. package/svf/lib/Util/Options.cpp +6 -64
  401. package/svf/lib/WPA/Andersen.cpp +5 -2
@@ -0,0 +1,58 @@
1
+ //===- CFLSVFGBuilder.h -- Building SVFG for CFL--------------------------//
2
+ //
3
+ // SVF: Static Value-Flow Analysis
4
+ //
5
+ // Copyright (C) <2013-> <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 Affero 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 Affero General Public License for more details.
17
+
18
+ // You should have received a copy of the GNU Affero General Public License
19
+ // along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ //
21
+ //===----------------------------------------------------------------------===//
22
+
23
+ //
24
+ // Created by Xiao on 30/12/23.
25
+ //
26
+
27
+ #ifndef SVF_CFLSVFGBUILDER_H
28
+ #define SVF_CFLSVFGBUILDER_H
29
+
30
+ #include "SABER/SaberSVFGBuilder.h"
31
+
32
+ namespace SVF
33
+ {
34
+
35
+ class CFLSVFGBuilder: public SaberSVFGBuilder
36
+ {
37
+ public:
38
+ typedef Set<const SVFGNode*> SVFGNodeSet;
39
+ typedef Map<NodeID, PointsTo> NodeToPTSSMap;
40
+ typedef FIFOWorkList<NodeID> WorkList;
41
+
42
+ /// Constructor
43
+ CFLSVFGBuilder() = default;
44
+
45
+ /// Destructor
46
+ virtual ~CFLSVFGBuilder() = default;
47
+
48
+ protected:
49
+ /// Re-write create SVFG method
50
+ virtual void buildSVFG();
51
+
52
+ /// Remove Incoming Edge for strong-update (SU) store instruction
53
+ /// Because the SU node does not receive indirect value
54
+ virtual void rmIncomingEdgeForSUStore(BVDataPTAImpl* pta);
55
+ };
56
+
57
+ }
58
+ #endif //SVF_CFLSVFGBUILDER_H
@@ -33,7 +33,7 @@
33
33
 
34
34
  #include "CFL/CFLBase.h"
35
35
  #include "CFL/CFLStat.h"
36
- #include "SABER/SaberSVFGBuilder.h"
36
+ #include "CFL/CFLSVFGBuilder.h"
37
37
  #include "WPA/Andersen.h"
38
38
 
39
39
  namespace SVF
@@ -59,7 +59,7 @@ public:
59
59
  void buildCFLGraph();
60
60
 
61
61
  private:
62
- SaberSVFGBuilder memSSA;
62
+ CFLSVFGBuilder memSSA;
63
63
  SVFG* svfg;
64
64
  };
65
65
 
@@ -66,6 +66,7 @@ class SVFG : public VFG
66
66
  {
67
67
  friend class SVFGBuilder;
68
68
  friend class SaberSVFGBuilder;
69
+ friend class CFLSVFGBuilder;
69
70
  friend class TaintSVFGBuilder;
70
71
  friend class DDASVFGBuilder;
71
72
  friend class MTASVFGBuilder;
@@ -58,6 +58,9 @@ public:
58
58
  typedef FIFOWorkList<const SVFGNode*> VFWorkList; ///< worklist for value-flow guard computation
59
59
  typedef FIFOWorkList<const SVFBasicBlock*> CFWorkList; ///< worklist for control-flow guard computation
60
60
 
61
+ typedef SaberCondAllocator::SVFGNodeToSVFGNodeSetMap SVFGNodeToSVFGNodeSetMap;
62
+
63
+
61
64
  /// Constructor
62
65
  ProgSlice(const SVFGNode* src, SaberCondAllocator* pa, const SVFG* graph):
63
66
  root(src), partialReachable(false), fullReachable(false), reachGlob(false),
@@ -296,6 +299,14 @@ protected:
296
299
  finalCond = cond;
297
300
  }
298
301
 
302
+ /// Compute invalid branch condition stemming from removed strong update value-flow edges
303
+ Condition computeInvalidCondFromRemovedSUVFEdge(const SVFGNode * cur);
304
+
305
+ const SVFGNodeToSVFGNodeSetMap& getRemovedSUVFEdges() const
306
+ {
307
+ return pathAllocator->getRemovedSUVFEdges();
308
+ }
309
+
299
310
  private:
300
311
  SVFGNodeSet forwardslice; ///< the forward slice
301
312
  SVFGNodeSet backwardslice; ///< the backward slice
@@ -56,6 +56,7 @@ public:
56
56
  typedef Map<const SVFFunction*, BasicBlockSet> FunToExitBBsMap; ///< map a function to all its basic blocks calling program exit
57
57
  typedef Map<const SVFBasicBlock*, Condition> BBToCondMap; ///< map a basic block to its condition during control-flow guard computation
58
58
  typedef FIFOWorkList<const SVFBasicBlock*> CFWorkList; ///< worklist for control-flow guard computation
59
+ typedef Map<const SVFGNode*, Set<const SVFGNode*>> SVFGNodeToSVFGNodeSetMap;
59
60
 
60
61
 
61
62
  /// Constructor
@@ -239,6 +240,12 @@ public:
239
240
  setCondInst(condition, inst);
240
241
  negConds.set(condition.id());
241
242
  }
243
+
244
+ SVFGNodeToSVFGNodeSetMap & getRemovedSUVFEdges()
245
+ {
246
+ return removedSUVFEdges;
247
+ }
248
+
242
249
  private:
243
250
 
244
251
  /// Allocate path condition for every basic block
@@ -299,6 +306,7 @@ private:
299
306
  NodeBS negConds; ///bit vector for distinguish neg
300
307
  std::vector<Condition> conditionVec; /// vector storing z3expression
301
308
  static u32_t totalCondNum; /// a counter for fresh condition
309
+ SVFGNodeToSVFGNodeSetMap removedSUVFEdges;
302
310
 
303
311
  protected:
304
312
  BBCondMap bbConds; ///< map basic block to its successors/predecessors branch conditions
@@ -34,9 +34,12 @@
34
34
  #include "SVFIR/SVFValue.h"
35
35
  #include "Util/WorkList.h"
36
36
 
37
+
37
38
  namespace SVF
38
39
  {
39
40
 
41
+ class SaberCondAllocator;
42
+
40
43
  class SaberSVFGBuilder : public SVFGBuilder
41
44
  {
42
45
 
@@ -62,6 +65,11 @@ public:
62
65
  svfg->addActualParmVFGNode(pagNode, cs);
63
66
  }
64
67
 
68
+ void setSaberCondAllocator(SaberCondAllocator* allocator)
69
+ {
70
+ saberCondAllocator = allocator;
71
+ }
72
+
65
73
  protected:
66
74
  /// Re-write create SVFG method
67
75
  virtual void buildSVFG();
@@ -69,7 +77,7 @@ protected:
69
77
  /// Return TRUE if this is a strong update STORE statement.
70
78
  bool isStrongUpdate(const SVFGNode* node, NodeID& singleton, BVDataPTAImpl* pta);
71
79
 
72
- private:
80
+ protected:
73
81
  /// Remove direct value-flow edge to a dereference point for Saber source-sink memory error detection
74
82
  /// for example, given two statements: p = alloc; q = *p, the direct SVFG edge between them is deleted
75
83
  /// Because those edges only stand for values used at the dereference points but they can not pass the value to other definitions
@@ -77,7 +85,7 @@ private:
77
85
 
78
86
  /// Remove Incoming Edge for strong-update (SU) store instruction
79
87
  /// Because the SU node does not receive indirect value
80
- void rmIncomingEdgeForSUStore(BVDataPTAImpl* pta);
88
+ virtual void rmIncomingEdgeForSUStore(BVDataPTAImpl* pta);
81
89
 
82
90
  /// Add actual parameter SVFGNode for 1st argument of a deallocation like external function
83
91
  /// In order to path sensitive leak detection
@@ -97,6 +105,8 @@ private:
97
105
  PointsTo globs;
98
106
  /// Store all global SVFG nodes
99
107
  SVFGNodeSet globSVFGNodes;
108
+
109
+ SaberCondAllocator* saberCondAllocator;
100
110
  };
101
111
 
102
112
  } // End namespace SVF
@@ -80,17 +80,6 @@ public:
80
80
  // ContextDDA.cpp
81
81
  static const Option<u32_t> CxtBudget;
82
82
 
83
- // DDAClient.cpp
84
- static const Option<bool> SingleLoad;
85
- static const Option<bool> DumpFree;
86
- static const Option<bool> DumpUninitVar;
87
- static const Option<bool> DumpUninitPtr;
88
- static const Option<bool> DumpSUPts;
89
- static const Option<bool> DumpSUStore;
90
- static const Option<bool> MallocOnly;
91
- static const Option<bool> TaintUninitHeap;
92
- static const Option<bool> TaintUninitStack;
93
-
94
83
  // DDAPass.cpp
95
84
  static const Option<u32_t> MaxPathLen;
96
85
  static const Option<u32_t> MaxContextLen;
@@ -121,14 +110,12 @@ public:
121
110
  // Sparse value-flow graph (VFG.cpp)
122
111
  static const Option<bool> DumpVFG;
123
112
 
124
- // Location set for modeling abstract memory object (AccessPath.cpp)
125
- static const Option<bool> SingleStride;
126
-
127
113
  // Base class of pointer analyses (PointerAnalysis.cpp)
128
114
  static const Option<bool> TypePrint;
129
115
  static const Option<bool> FuncPointerPrint;
130
116
  static const Option<bool> PTSPrint;
131
117
  static const Option<bool> PTSAllPrint;
118
+ static const Option<bool> PrintFieldWithBasePrefix;
132
119
  static const Option<bool> PStat;
133
120
  static const Option<u32_t> StatBudget;
134
121
  static const Option<bool> PAGDotGraph;
@@ -0,0 +1,100 @@
1
+ //===- CFLSVFGBuilder.cpp -- Building SVFG for CFL--------------------------//
2
+ //
3
+ // SVF: Static Value-Flow Analysis
4
+ //
5
+ // Copyright (C) <2013-> <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 Affero 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 Affero General Public License for more details.
17
+
18
+ // You should have received a copy of the GNU Affero General Public License
19
+ // along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ //
21
+ //===----------------------------------------------------------------------===//
22
+
23
+ //
24
+ // Created by Xiao on 30/12/23.
25
+ //
26
+ #include "MemoryModel/PointerAnalysisImpl.h"
27
+ #include "Graphs/SVFG.h"
28
+ #include "Util/Options.h"
29
+ #include "CFL/CFLSVFGBuilder.h"
30
+
31
+
32
+ using namespace SVF;
33
+ using namespace SVFUtil;
34
+
35
+ void CFLSVFGBuilder::buildSVFG()
36
+ {
37
+
38
+ MemSSA* mssa = svfg->getMSSA();
39
+ svfg->buildSVFG();
40
+ BVDataPTAImpl* pta = mssa->getPTA();
41
+ DBOUT(DGENERAL, outs() << pasMsg("\tCollect Global Variables\n"));
42
+
43
+ collectGlobals(pta);
44
+
45
+ DBOUT(DGENERAL, outs() << pasMsg("\tRemove Dereference Direct SVFG Edge\n"));
46
+
47
+ rmDerefDirSVFGEdges(pta);
48
+
49
+ rmIncomingEdgeForSUStore(pta);
50
+
51
+ DBOUT(DGENERAL, outs() << pasMsg("\tAdd Sink SVFG Nodes\n"));
52
+
53
+ AddExtActualParmSVFGNodes(pta->getPTACallGraph());
54
+
55
+ if(pta->printStat())
56
+ svfg->performStat();
57
+ }
58
+
59
+
60
+ /*!
61
+ * Remove Incoming Edge for strong-update (SU) store instruction
62
+ * Because the SU node does not receive indirect value
63
+ *
64
+ * e.g.,
65
+ * L1: *p = O; (singleton)
66
+ * L2: *p = _; (SU here)
67
+ * We should remove the indirect value flow L1 -> L2
68
+ * Because the points-to set of O from L1 does not pass to that after L2
69
+ */
70
+ void CFLSVFGBuilder::rmIncomingEdgeForSUStore(BVDataPTAImpl* pta)
71
+ {
72
+
73
+ for(SVFG::iterator it = svfg->begin(), eit = svfg->end(); it!=eit; ++it)
74
+ {
75
+ const SVFGNode* node = it->second;
76
+
77
+ if(const StoreSVFGNode* stmtNode = SVFUtil::dyn_cast<StoreSVFGNode>(node))
78
+ {
79
+ if(SVFUtil::isa<StoreStmt>(stmtNode->getPAGEdge()))
80
+ {
81
+ NodeID singleton;
82
+ if(isStrongUpdate(node, singleton, pta))
83
+ {
84
+ Set<SVFGEdge*> toRemove;
85
+ for (SVFGNode::const_iterator it2 = node->InEdgeBegin(), eit2 = node->InEdgeEnd(); it2 != eit2; ++it2)
86
+ {
87
+ if ((*it2)->isIndirectVFGEdge())
88
+ {
89
+ toRemove.insert(*it2);
90
+ }
91
+ }
92
+ for (SVFGEdge* edge: toRemove)
93
+ {
94
+ svfg->removeSVFGEdge(edge);
95
+ }
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
@@ -52,6 +52,8 @@ bool ProgSlice::AllPathReachableSolve()
52
52
  {
53
53
  const SVFGNode* node = worklist.pop();
54
54
  setCurSVFGNode(node);
55
+
56
+ Condition invalidCond = computeInvalidCondFromRemovedSUVFEdge(node);
55
57
  Condition cond = getVFCond(node);
56
58
  for(SVFGNode::const_iterator it = node->OutEdgeBegin(), eit = node->OutEdgeEnd(); it!=eit; ++it)
57
59
  {
@@ -75,7 +77,7 @@ bool ProgSlice::AllPathReachableSolve()
75
77
  }
76
78
  else
77
79
  vfCond = ComputeIntraVFGGuard(nodeBB,succBB);
78
-
80
+ vfCond = condAnd(vfCond, condNeg(invalidCond));
79
81
  Condition succPathCond = condAnd(cond, vfCond);
80
82
  if(setVFCond(succ, condOr(getVFCond(succ), succPathCond) ))
81
83
  worklist.push(succ);
@@ -89,6 +91,51 @@ bool ProgSlice::AllPathReachableSolve()
89
91
  return isSatisfiableForAll();
90
92
  }
91
93
 
94
+ /*!
95
+ * Compute invalid branch condition stemming from removed strong update value-flow edges
96
+ *
97
+ * Fix issue: https://github.com/SVF-tools/SVF/issues/1306
98
+ * Line 11->13 is removed due to a strong update at Line 13, which means Line 11 is unreachable to Line 13 on the value flow graph.
99
+ * However on the control flow graph they are still considered as reachable,
100
+ * making the vf guard on Line 11 -> Line 15 a true condition (should consider the infeasible branch Line 11 -> Line 13)
101
+ * Therefore, we collect this infeasible branch condition (condition on Line 11 -> Line 13, `a == b`) as an invalid condition (invalidCond),
102
+ * and add the negation of invalidCond when computing value flow guard starting from the source of the SU.
103
+ * In this example, we add `a != b` on Line 11 -> Line 15.
104
+ *
105
+ * @param cur current SVFG node
106
+ * @return invalid branch condition
107
+ */
108
+ ProgSlice::Condition ProgSlice::computeInvalidCondFromRemovedSUVFEdge(const SVFGNode * cur)
109
+ {
110
+ Set<const SVFBasicBlock*> validOutBBs; // the BBs of valid successors
111
+ for(SVFGNode::const_iterator it = cur->OutEdgeBegin(), eit = cur->OutEdgeEnd(); it!=eit; ++it)
112
+ {
113
+ const SVFGEdge* edge = (*it);
114
+ const SVFGNode* succ = edge->getDstNode();
115
+ if(inBackwardSlice(succ))
116
+ {
117
+ validOutBBs.insert(getSVFGNodeBB(succ));
118
+ }
119
+ }
120
+ Condition invalidCond = getFalseCond();
121
+ auto suVFEdgesIt = getRemovedSUVFEdges().find(cur);
122
+ if (suVFEdgesIt != getRemovedSUVFEdges().end())
123
+ {
124
+ for (const auto &succ: suVFEdgesIt->second)
125
+ {
126
+ if (!validOutBBs.count(getSVFGNodeBB(succ)))
127
+ {
128
+ // removed vfg node does not reside in the BBs of valid successors
129
+ const SVFBasicBlock *nodeBB = getSVFGNodeBB(cur);
130
+ const SVFBasicBlock *succBB = getSVFGNodeBB(succ);
131
+ clearCFCond();
132
+ invalidCond = condOr(invalidCond, ComputeIntraVFGGuard(nodeBB, succBB));
133
+ }
134
+ }
135
+ }
136
+ return invalidCond;
137
+ }
138
+
92
139
  /*!
93
140
  * Solve by computing disjunction of conditions from all sinks (e.g., memory leak)
94
141
  */
@@ -32,6 +32,8 @@
32
32
  #include "MemoryModel/PointerAnalysisImpl.h"
33
33
  #include "Graphs/SVFG.h"
34
34
  #include "Util/Options.h"
35
+ #include "SABER/SaberCondAllocator.h"
36
+
35
37
 
36
38
  using namespace SVF;
37
39
  using namespace SVFUtil;
@@ -50,6 +52,7 @@ void SaberSVFGBuilder::buildSVFG()
50
52
 
51
53
  rmDerefDirSVFGEdges(pta);
52
54
 
55
+ assert(saberCondAllocator && "saber condition allocator not set yet!");
53
56
  rmIncomingEdgeForSUStore(pta);
54
57
 
55
58
  DBOUT(DGENERAL, outs() << pasMsg("\tAdd Sink SVFG Nodes\n"));
@@ -276,6 +279,8 @@ void SaberSVFGBuilder::rmIncomingEdgeForSUStore(BVDataPTAImpl* pta)
276
279
  }
277
280
  for (SVFGEdge* edge: toRemove)
278
281
  {
282
+ if (isa<StoreSVFGNode>(edge->getSrcNode()))
283
+ saberCondAllocator->getRemovedSUVFEdges()[edge->getSrcNode()].insert(edge->getDstNode());
279
284
  svfg->removeSVFGEdge(edge);
280
285
  }
281
286
  }
@@ -43,6 +43,7 @@ void SrcSnkDDA::initialize(SVFModule* module)
43
43
  SVFIR* pag = PAG::getPAG();
44
44
 
45
45
  AndersenWaveDiff* ander = AndersenWaveDiff::createAndersenWaveDiff(pag);
46
+ memSSA.setSaberCondAllocator(getSaberCondAllocator());
46
47
  if(Options::SABERFULLSVFG())
47
48
  svfg = memSSA.buildFullSVFG(ander);
48
49
  else
@@ -75,62 +75,6 @@ const Option<u32_t> Options::CxtBudget(
75
75
  10000
76
76
  );
77
77
 
78
-
79
- // DDAClient.cpp
80
- const Option<bool> Options::SingleLoad(
81
- "single-load",
82
- "Count load pointer with same source operand as one query",
83
- true
84
- );
85
-
86
- const Option<bool> Options::DumpFree(
87
- "dump-free",
88
- "Dump use after free locations",
89
- false
90
- );
91
-
92
- const Option<bool> Options::DumpUninitVar(
93
- "dump-uninit-var",
94
- "Dump uninitialised variables",
95
- false
96
- );
97
-
98
- const Option<bool> Options::DumpUninitPtr(
99
- "dump-uninit-ptr",
100
- "Dump uninitialised pointers",
101
- false
102
- );
103
-
104
- const Option<bool> Options::DumpSUPts(
105
- "dump-su-pts",
106
- "Dump strong updates store",
107
- false
108
- );
109
-
110
- const Option<bool> Options::DumpSUStore(
111
- "dump-su-store",
112
- "Dump strong updates store",
113
- false
114
- );
115
-
116
- const Option<bool> Options::MallocOnly(
117
- "malloc-only",
118
- "Only add tainted objects for malloc",
119
- true
120
- );
121
-
122
- const Option<bool> Options::TaintUninitHeap(
123
- "uninit-heap",
124
- "detect uninitialized heap variables",
125
- true
126
- );
127
-
128
- const Option<bool> Options::TaintUninitStack(
129
- "uninit-stack",
130
- "detect uninitialized stack variables",
131
- true
132
- );
133
-
134
78
  // DDAPass.cpp
135
79
  const Option<u32_t> Options::MaxPathLen(
136
80
  "max-path",
@@ -254,14 +198,6 @@ const Option<bool> Options::DumpVFG(
254
198
  );
255
199
 
256
200
 
257
- // Location set for modeling abstract memory object (AccessPath.cpp)
258
- const Option<bool> Options::SingleStride(
259
- "stride-only",
260
- "Only use single stride in LocMemoryModel",
261
- false
262
- );
263
-
264
-
265
201
  // Base class of pointer analyses (PointerAnalysis.cpp)
266
202
  const Option<bool> Options::TypePrint(
267
203
  "print-type",
@@ -281,6 +217,12 @@ const Option<bool> Options::PTSPrint(
281
217
  false
282
218
  );
283
219
 
220
+ const Option<bool> Options::PrintFieldWithBasePrefix(
221
+ "print-field",
222
+ "Print field object with base object id as the prefix",
223
+ false
224
+ );
225
+
284
226
  const Option<bool> Options::PTSAllPrint(
285
227
  "print-all-pts",
286
228
  "Print all points-to set of both top-level and address-taken variables",
@@ -911,8 +911,11 @@ void Andersen::dumpTopLevelPtsTo()
911
911
  }
912
912
  for (multiset<u32_t>::const_iterator it = line.begin(); it != line.end(); ++it)
913
913
  {
914
- if (auto gepNode = SVFUtil::dyn_cast<GepObjVar>(pag->getGNode(*it)))
915
- outs() << gepNode->getBaseNode() << "_" << gepNode->getConstantFieldIdx() << " ";
914
+ if(Options::PrintFieldWithBasePrefix())
915
+ if (auto gepNode = SVFUtil::dyn_cast<GepObjVar>(pag->getGNode(*it)))
916
+ outs() << gepNode->getBaseNode() << "_" << gepNode->getConstantFieldIdx() << " ";
917
+ else
918
+ outs() << *it << " ";
916
919
  else
917
920
  outs() << *it << " ";
918
921
  }