svf-tools 1.0.853 → 1.0.855

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 (325) hide show
  1. package/SVF-doxygen/html/AE_2CMakeLists_8txt.html +106 -0
  2. package/SVF-doxygen/html/AndersenStat_8cpp_source.html +19 -12
  3. package/SVF-doxygen/html/Andersen_8cpp_source.html +3 -3
  4. package/SVF-doxygen/html/Andersen_8h_source.html +4 -4
  5. package/SVF-doxygen/html/CFLStat_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/CMakeLists_8txt.html +5 -5
  7. package/SVF-doxygen/html/CSC_8cpp_source.html +2 -2
  8. package/SVF-doxygen/html/ConsGNode_8h_source.html +4 -4
  9. package/SVF-doxygen/html/ConsG_8cpp_source.html +663 -644
  10. package/SVF-doxygen/html/ConsG_8h_source.html +335 -332
  11. package/SVF-doxygen/html/DDAClient_8cpp_source.html +4 -4
  12. package/SVF-doxygen/html/DDAStat_8cpp_source.html +249 -252
  13. package/SVF-doxygen/html/DDAStat_8h_source.html +70 -93
  14. package/SVF-doxygen/html/FlowSensitiveStat_8cpp_source.html +1 -1
  15. package/SVF-doxygen/html/PTAStat_8cpp_source.html +107 -83
  16. package/SVF-doxygen/html/PTAStat_8h_source.html +38 -13
  17. package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +1 -1
  18. package/SVF-doxygen/html/Steensgaard_8h_source.html +1 -1
  19. package/SVF-doxygen/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/WPAStat_8h_source.html +1 -1
  21. package/SVF-doxygen/html/ae_8cpp.html +179 -0
  22. package/SVF-doxygen/html/ae_8cpp_source.html +738 -0
  23. package/SVF-doxygen/html/annotated.html +1 -0
  24. package/SVF-doxygen/html/classSVF_1_1AddrCGEdge.html +11 -11
  25. package/SVF-doxygen/html/classSVF_1_1Andersen.html +20 -20
  26. package/SVF-doxygen/html/classSVF_1_1AndersenBase.html +10 -10
  27. package/SVF-doxygen/html/classSVF_1_1AndersenSCD.html +1 -1
  28. package/SVF-doxygen/html/classSVF_1_1AndersenSFR.html +3 -3
  29. package/SVF-doxygen/html/classSVF_1_1AndersenStat-members.html +8 -2
  30. package/SVF-doxygen/html/classSVF_1_1AndersenStat.html +34 -12
  31. package/SVF-doxygen/html/classSVF_1_1AndersenWaveDiff.html +1 -1
  32. package/SVF-doxygen/html/classSVF_1_1CFLStat-members.html +8 -2
  33. package/SVF-doxygen/html/classSVF_1_1CFLStat.html +16 -1
  34. package/SVF-doxygen/html/classSVF_1_1CSC.html +5 -5
  35. package/SVF-doxygen/html/classSVF_1_1ConstraintGraph-members.html +81 -80
  36. package/SVF-doxygen/html/classSVF_1_1ConstraintGraph.html +672 -623
  37. package/SVF-doxygen/html/classSVF_1_1ConstraintNode.html +28 -28
  38. package/SVF-doxygen/html/classSVF_1_1DDAClient.html +4 -4
  39. package/SVF-doxygen/html/classSVF_1_1DDAStat-members.html +7 -7
  40. package/SVF-doxygen/html/classSVF_1_1DDAStat.html +283 -463
  41. package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat-members.html +9 -3
  42. package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat.html +17 -2
  43. package/SVF-doxygen/html/classSVF_1_1ICFGStat-members.html +9 -3
  44. package/SVF-doxygen/html/classSVF_1_1ICFGStat.html +15 -0
  45. package/SVF-doxygen/html/classSVF_1_1MTAStat-members.html +7 -1
  46. package/SVF-doxygen/html/classSVF_1_1MTAStat.html +15 -0
  47. package/SVF-doxygen/html/classSVF_1_1MemSSAStat-members.html +9 -3
  48. package/SVF-doxygen/html/classSVF_1_1MemSSAStat.html +15 -0
  49. package/SVF-doxygen/html/classSVF_1_1PTAStat-members.html +7 -1
  50. package/SVF-doxygen/html/classSVF_1_1PTAStat.html +300 -84
  51. package/SVF-doxygen/html/classSVF_1_1PointerAnalysis.html +1 -1
  52. package/SVF-doxygen/html/classSVF_1_1SVFGStat-members.html +7 -1
  53. package/SVF-doxygen/html/classSVF_1_1SVFGStat.html +15 -0
  54. package/SVF-doxygen/html/classSVF_1_1Steensgaard.html +3 -3
  55. package/SVF-doxygen/html/classSVF_1_1TypeAnalysis.html +1 -1
  56. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitiveStat-members.html +9 -3
  57. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitiveStat.html +17 -2
  58. package/SVF-doxygen/html/classSymblicAbstractionTest-members.html +99 -0
  59. package/SVF-doxygen/html/classSymblicAbstractionTest.html +1282 -0
  60. package/SVF-doxygen/html/classes.html +56 -55
  61. package/SVF-doxygen/html/dir_454f632bef84d62ecd1cf13bd508acc9.html +86 -0
  62. package/SVF-doxygen/html/dir_e5d21102e3a998263c6c7812ac857e9d.html +2 -0
  63. package/SVF-doxygen/html/files.html +22 -20
  64. package/SVF-doxygen/html/functions.html +4 -4
  65. package/SVF-doxygen/html/functions_b.html +16 -10
  66. package/SVF-doxygen/html/functions_c.html +27 -24
  67. package/SVF-doxygen/html/functions_f.html +3 -3
  68. package/SVF-doxygen/html/functions_func_b.html +9 -3
  69. package/SVF-doxygen/html/functions_func_c.html +22 -19
  70. package/SVF-doxygen/html/functions_func_g.html +17 -16
  71. package/SVF-doxygen/html/functions_func_n.html +1 -1
  72. package/SVF-doxygen/html/functions_func_r.html +5 -2
  73. package/SVF-doxygen/html/functions_func_s.html +18 -15
  74. package/SVF-doxygen/html/functions_func_t.html +41 -1
  75. package/SVF-doxygen/html/functions_func_~.html +3 -0
  76. package/SVF-doxygen/html/functions_g.html +16 -15
  77. package/SVF-doxygen/html/functions_i.html +3 -3
  78. package/SVF-doxygen/html/functions_l.html +3 -3
  79. package/SVF-doxygen/html/functions_n.html +6 -6
  80. package/SVF-doxygen/html/functions_o.html +3 -3
  81. package/SVF-doxygen/html/functions_p.html +12 -12
  82. package/SVF-doxygen/html/functions_r.html +9 -6
  83. package/SVF-doxygen/html/functions_s.html +22 -19
  84. package/SVF-doxygen/html/functions_t.html +47 -7
  85. package/SVF-doxygen/html/functions_v.html +3 -3
  86. package/SVF-doxygen/html/functions_vars.html +4 -4
  87. package/SVF-doxygen/html/functions_w.html +9 -7
  88. package/SVF-doxygen/html/functions_~.html +3 -0
  89. package/SVF-doxygen/html/globals_a.html +2 -2
  90. package/SVF-doxygen/html/globals_func_a.html +2 -2
  91. package/SVF-doxygen/html/globals_func_m.html +5 -4
  92. package/SVF-doxygen/html/globals_m.html +5 -4
  93. package/SVF-doxygen/html/globals_s.html +3 -0
  94. package/SVF-doxygen/html/globals_vars.html +3 -0
  95. package/SVF-doxygen/html/hierarchy.html +40 -39
  96. package/SVF-doxygen/html/search/all_0.js +4 -4
  97. package/SVF-doxygen/html/search/all_1.js +133 -132
  98. package/SVF-doxygen/html/search/all_10.js +325 -325
  99. package/SVF-doxygen/html/search/all_11.js +225 -224
  100. package/SVF-doxygen/html/search/all_12.js +554 -552
  101. package/SVF-doxygen/html/search/all_13.js +203 -190
  102. package/SVF-doxygen/html/search/all_14.js +67 -67
  103. package/SVF-doxygen/html/search/all_15.js +168 -168
  104. package/SVF-doxygen/html/search/all_16.js +63 -63
  105. package/SVF-doxygen/html/search/all_17.js +1 -1
  106. package/SVF-doxygen/html/search/all_18.js +1 -1
  107. package/SVF-doxygen/html/search/all_19.js +11 -11
  108. package/SVF-doxygen/html/search/all_1a.js +175 -174
  109. package/SVF-doxygen/html/search/all_2.js +173 -171
  110. package/SVF-doxygen/html/search/all_3.js +649 -648
  111. package/SVF-doxygen/html/search/all_4.js +230 -230
  112. package/SVF-doxygen/html/search/all_5.js +119 -119
  113. package/SVF-doxygen/html/search/all_6.js +226 -226
  114. package/SVF-doxygen/html/search/all_7.js +1048 -1048
  115. package/SVF-doxygen/html/search/all_8.js +196 -196
  116. package/SVF-doxygen/html/search/all_9.js +605 -605
  117. package/SVF-doxygen/html/search/all_a.js +46 -46
  118. package/SVF-doxygen/html/search/all_b.js +26 -26
  119. package/SVF-doxygen/html/search/all_c.js +115 -115
  120. package/SVF-doxygen/html/search/all_d.js +197 -197
  121. package/SVF-doxygen/html/search/all_e.js +207 -207
  122. package/SVF-doxygen/html/search/all_f.js +116 -116
  123. package/SVF-doxygen/html/search/classes_0.js +26 -26
  124. package/SVF-doxygen/html/search/classes_1.js +9 -9
  125. package/SVF-doxygen/html/search/classes_10.js +74 -73
  126. package/SVF-doxygen/html/search/classes_11.js +15 -15
  127. package/SVF-doxygen/html/search/classes_12.js +2 -2
  128. package/SVF-doxygen/html/search/classes_13.js +10 -10
  129. package/SVF-doxygen/html/search/classes_14.js +14 -14
  130. package/SVF-doxygen/html/search/classes_15.js +1 -1
  131. package/SVF-doxygen/html/search/classes_2.js +81 -81
  132. package/SVF-doxygen/html/search/classes_3.js +37 -37
  133. package/SVF-doxygen/html/search/classes_4.js +9 -9
  134. package/SVF-doxygen/html/search/classes_5.js +28 -28
  135. package/SVF-doxygen/html/search/classes_6.js +104 -104
  136. package/SVF-doxygen/html/search/classes_7.js +34 -34
  137. package/SVF-doxygen/html/search/classes_8.js +57 -57
  138. package/SVF-doxygen/html/search/classes_9.js +1 -1
  139. package/SVF-doxygen/html/search/classes_a.js +12 -12
  140. package/SVF-doxygen/html/search/classes_b.js +29 -29
  141. package/SVF-doxygen/html/search/classes_c.js +6 -6
  142. package/SVF-doxygen/html/search/classes_d.js +18 -18
  143. package/SVF-doxygen/html/search/classes_e.js +36 -36
  144. package/SVF-doxygen/html/search/classes_f.js +25 -25
  145. package/SVF-doxygen/html/search/defines_0.js +3 -3
  146. package/SVF-doxygen/html/search/defines_1.js +2 -2
  147. package/SVF-doxygen/html/search/defines_2.js +30 -30
  148. package/SVF-doxygen/html/search/defines_3.js +20 -20
  149. package/SVF-doxygen/html/search/defines_4.js +2 -2
  150. package/SVF-doxygen/html/search/defines_5.js +4 -4
  151. package/SVF-doxygen/html/search/defines_6.js +2 -2
  152. package/SVF-doxygen/html/search/defines_7.js +5 -5
  153. package/SVF-doxygen/html/search/defines_8.js +11 -11
  154. package/SVF-doxygen/html/search/defines_9.js +9 -9
  155. package/SVF-doxygen/html/search/defines_a.js +2 -2
  156. package/SVF-doxygen/html/search/defines_b.js +1 -1
  157. package/SVF-doxygen/html/search/defines_c.js +3 -3
  158. package/SVF-doxygen/html/search/defines_d.js +2 -2
  159. package/SVF-doxygen/html/search/defines_e.js +7 -7
  160. package/SVF-doxygen/html/search/defines_f.js +3 -3
  161. package/SVF-doxygen/html/search/enums_0.js +3 -3
  162. package/SVF-doxygen/html/search/enums_1.js +2 -2
  163. package/SVF-doxygen/html/search/enums_10.js +1 -1
  164. package/SVF-doxygen/html/search/enums_11.js +1 -1
  165. package/SVF-doxygen/html/search/enums_2.js +8 -8
  166. package/SVF-doxygen/html/search/enums_3.js +1 -1
  167. package/SVF-doxygen/html/search/enums_4.js +3 -3
  168. package/SVF-doxygen/html/search/enums_5.js +1 -1
  169. package/SVF-doxygen/html/search/enums_6.js +2 -2
  170. package/SVF-doxygen/html/search/enums_7.js +2 -2
  171. package/SVF-doxygen/html/search/enums_8.js +4 -4
  172. package/SVF-doxygen/html/search/enums_9.js +1 -1
  173. package/SVF-doxygen/html/search/enums_a.js +1 -1
  174. package/SVF-doxygen/html/search/enums_b.js +7 -7
  175. package/SVF-doxygen/html/search/enums_c.js +1 -1
  176. package/SVF-doxygen/html/search/enums_d.js +4 -4
  177. package/SVF-doxygen/html/search/enums_e.js +2 -2
  178. package/SVF-doxygen/html/search/enums_f.js +4 -4
  179. package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
  180. package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
  181. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  182. package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
  183. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  184. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  185. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  186. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  187. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  188. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  189. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  190. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  191. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  192. package/SVF-doxygen/html/search/enumvalues_7.js +8 -8
  193. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  194. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  195. package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
  196. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  197. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  198. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  199. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  200. package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
  201. package/SVF-doxygen/html/search/files_0.js +14 -13
  202. package/SVF-doxygen/html/search/files_1.js +7 -7
  203. package/SVF-doxygen/html/search/files_10.js +8 -8
  204. package/SVF-doxygen/html/search/files_11.js +8 -8
  205. package/SVF-doxygen/html/search/files_12.js +2 -2
  206. package/SVF-doxygen/html/search/files_2.js +57 -57
  207. package/SVF-doxygen/html/search/files_3.js +14 -14
  208. package/SVF-doxygen/html/search/files_4.js +5 -5
  209. package/SVF-doxygen/html/search/files_5.js +13 -13
  210. package/SVF-doxygen/html/search/files_6.js +9 -9
  211. package/SVF-doxygen/html/search/files_7.js +14 -14
  212. package/SVF-doxygen/html/search/files_8.js +13 -13
  213. package/SVF-doxygen/html/search/files_9.js +18 -18
  214. package/SVF-doxygen/html/search/files_a.js +3 -3
  215. package/SVF-doxygen/html/search/files_b.js +2 -2
  216. package/SVF-doxygen/html/search/files_c.js +20 -20
  217. package/SVF-doxygen/html/search/files_d.js +4 -4
  218. package/SVF-doxygen/html/search/files_e.js +62 -62
  219. package/SVF-doxygen/html/search/files_f.js +8 -8
  220. package/SVF-doxygen/html/search/functions_0.js +13 -13
  221. package/SVF-doxygen/html/search/functions_1.js +364 -364
  222. package/SVF-doxygen/html/search/functions_10.js +140 -140
  223. package/SVF-doxygen/html/search/functions_11.js +140 -139
  224. package/SVF-doxygen/html/search/functions_12.js +289 -288
  225. package/SVF-doxygen/html/search/functions_13.js +72 -59
  226. package/SVF-doxygen/html/search/functions_14.js +39 -39
  227. package/SVF-doxygen/html/search/functions_15.js +71 -71
  228. package/SVF-doxygen/html/search/functions_16.js +32 -32
  229. package/SVF-doxygen/html/search/functions_17.js +3 -3
  230. package/SVF-doxygen/html/search/functions_18.js +175 -174
  231. package/SVF-doxygen/html/search/functions_2.js +91 -89
  232. package/SVF-doxygen/html/search/functions_3.js +262 -261
  233. package/SVF-doxygen/html/search/functions_4.js +78 -78
  234. package/SVF-doxygen/html/search/functions_5.js +53 -53
  235. package/SVF-doxygen/html/search/functions_6.js +60 -60
  236. package/SVF-doxygen/html/search/functions_7.js +857 -857
  237. package/SVF-doxygen/html/search/functions_8.js +148 -148
  238. package/SVF-doxygen/html/search/functions_9.js +421 -421
  239. package/SVF-doxygen/html/search/functions_a.js +30 -30
  240. package/SVF-doxygen/html/search/functions_b.js +2 -2
  241. package/SVF-doxygen/html/search/functions_c.js +25 -25
  242. package/SVF-doxygen/html/search/functions_d.js +79 -79
  243. package/SVF-doxygen/html/search/functions_e.js +35 -35
  244. package/SVF-doxygen/html/search/functions_f.js +56 -56
  245. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  246. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  247. package/SVF-doxygen/html/search/related_0.js +2 -2
  248. package/SVF-doxygen/html/search/related_1.js +2 -2
  249. package/SVF-doxygen/html/search/related_2.js +3 -3
  250. package/SVF-doxygen/html/search/related_3.js +2 -2
  251. package/SVF-doxygen/html/search/related_4.js +2 -2
  252. package/SVF-doxygen/html/search/related_5.js +1 -1
  253. package/SVF-doxygen/html/search/related_6.js +2 -2
  254. package/SVF-doxygen/html/search/related_7.js +4 -4
  255. package/SVF-doxygen/html/search/related_8.js +2 -2
  256. package/SVF-doxygen/html/search/related_9.js +4 -4
  257. package/SVF-doxygen/html/search/related_a.js +19 -19
  258. package/SVF-doxygen/html/search/related_b.js +4 -4
  259. package/SVF-doxygen/html/search/related_c.js +2 -2
  260. package/SVF-doxygen/html/search/related_d.js +12 -12
  261. package/SVF-doxygen/html/search/related_e.js +2 -2
  262. package/SVF-doxygen/html/search/related_f.js +2 -2
  263. package/SVF-doxygen/html/search/typedefs_0.js +19 -19
  264. package/SVF-doxygen/html/search/typedefs_1.js +26 -26
  265. package/SVF-doxygen/html/search/typedefs_10.js +62 -62
  266. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  267. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  268. package/SVF-doxygen/html/search/typedefs_13.js +33 -33
  269. package/SVF-doxygen/html/search/typedefs_14.js +8 -8
  270. package/SVF-doxygen/html/search/typedefs_2.js +129 -129
  271. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  272. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  273. package/SVF-doxygen/html/search/typedefs_5.js +41 -41
  274. package/SVF-doxygen/html/search/typedefs_6.js +56 -56
  275. package/SVF-doxygen/html/search/typedefs_7.js +44 -44
  276. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  277. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  278. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  279. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  280. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  281. package/SVF-doxygen/html/search/typedefs_d.js +14 -14
  282. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  283. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  284. package/SVF-doxygen/html/search/variables_0.js +151 -151
  285. package/SVF-doxygen/html/search/variables_1.js +76 -76
  286. package/SVF-doxygen/html/search/variables_10.js +98 -98
  287. package/SVF-doxygen/html/search/variables_11.js +45 -45
  288. package/SVF-doxygen/html/search/variables_12.js +91 -90
  289. package/SVF-doxygen/html/search/variables_13.js +74 -74
  290. package/SVF-doxygen/html/search/variables_14.js +14 -14
  291. package/SVF-doxygen/html/search/variables_15.js +49 -49
  292. package/SVF-doxygen/html/search/variables_16.js +9 -9
  293. package/SVF-doxygen/html/search/variables_17.js +1 -1
  294. package/SVF-doxygen/html/search/variables_18.js +2 -2
  295. package/SVF-doxygen/html/search/variables_2.js +38 -38
  296. package/SVF-doxygen/html/search/variables_3.js +142 -142
  297. package/SVF-doxygen/html/search/variables_4.js +50 -50
  298. package/SVF-doxygen/html/search/variables_5.js +37 -37
  299. package/SVF-doxygen/html/search/variables_6.js +66 -66
  300. package/SVF-doxygen/html/search/variables_7.js +34 -34
  301. package/SVF-doxygen/html/search/variables_8.js +7 -7
  302. package/SVF-doxygen/html/search/variables_9.js +78 -78
  303. package/SVF-doxygen/html/search/variables_a.js +4 -4
  304. package/SVF-doxygen/html/search/variables_b.js +10 -10
  305. package/SVF-doxygen/html/search/variables_c.js +45 -45
  306. package/SVF-doxygen/html/search/variables_d.js +55 -55
  307. package/SVF-doxygen/html/search/variables_e.js +123 -123
  308. package/SVF-doxygen/html/search/variables_f.js +30 -30
  309. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +118 -118
  310. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01Inverse_3_01SVF_1_1ConstraintNode_01_5_01_4_01_4.html +1 -1
  311. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1ConstraintGraph_01_5_01_4.html +2 -2
  312. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1ConstraintNode_01_5_01_4.html +1 -1
  313. package/build.sh +1 -1
  314. package/package.json +1 -1
  315. package/svf/include/DDA/DDAStat.h +0 -17
  316. package/svf/include/Graphs/ConsG.h +2 -0
  317. package/svf/include/Util/PTAStat.h +19 -1
  318. package/svf/lib/DDA/DDAStat.cpp +0 -3
  319. package/svf/lib/Graphs/ConsG.cpp +20 -0
  320. package/svf/lib/Util/PTAStat.cpp +17 -1
  321. package/svf/lib/WPA/Andersen.cpp +2 -2
  322. package/svf/lib/WPA/AndersenStat.cpp +3 -0
  323. package/svf-llvm/tools/AE/CMakeLists.txt +2 -0
  324. package/svf-llvm/tools/AE/ae.cpp +607 -0
  325. package/svf-llvm/tools/CMakeLists.txt +3 -2
@@ -36,8 +36,17 @@
36
36
  using namespace SVF;
37
37
  using namespace std;
38
38
 
39
- PTAStat::PTAStat(PointerAnalysis* p) : SVFStat(), pta(p)
39
+ PTAStat::PTAStat(PointerAnalysis* p) : SVFStat(),
40
+ pta(p),
41
+ _vmrssUsageBefore(0),
42
+ _vmrssUsageAfter(0),
43
+ _vmsizeUsageBefore(0),
44
+ _vmsizeUsageAfter(0)
40
45
  {
46
+ u32_t vmrss = 0;
47
+ u32_t vmsize = 0;
48
+ SVFUtil::getMemoryUsageKB(&vmrss, &vmsize);
49
+ setMemUsageBefore(vmrss, vmsize);
41
50
  }
42
51
 
43
52
  void PTAStat::performStat()
@@ -59,6 +68,13 @@ void PTAStat::performStat()
59
68
  }
60
69
  }
61
70
  PTNumStatMap["LocalVarInRecur"] = localVarInRecursion.count();
71
+
72
+ u32_t vmrss = 0;
73
+ u32_t vmsize = 0;
74
+ SVFUtil::getMemoryUsageKB(&vmrss, &vmsize);
75
+ setMemUsageAfter(vmrss, vmsize);
76
+ PTNumStatMap["MemoryUsageVmrss"] = _vmrssUsageAfter - _vmrssUsageBefore;
77
+ PTNumStatMap["MemoryUsageVmsize"] = _vmsizeUsageAfter - _vmsizeUsageBefore;
62
78
  }
63
79
 
64
80
  void PTAStat::callgraphStat()
@@ -74,11 +74,11 @@ void AndersenBase::initialize()
74
74
  {
75
75
  /// Build SVFIR
76
76
  PointerAnalysis::initialize();
77
+ /// Create statistic class
78
+ stat = new AndersenStat(this);
77
79
  /// Build Constraint Graph
78
80
  consCG = new ConstraintGraph(pag);
79
81
  setGraph(consCG);
80
- /// Create statistic class
81
- stat = new AndersenStat(this);
82
82
  if (Options::ConsCGDotGraph())
83
83
  consCG->dump("consCG_initial");
84
84
  }
@@ -352,6 +352,9 @@ void AndersenStat::performStat()
352
352
  PTNumStatMap["PointsToConstPtr"] = _NumOfConstantPtr;
353
353
  PTNumStatMap["PointsToBlkPtr"] = _NumOfBlackholePtr;
354
354
 
355
+ PTNumStatMap["MemoryUsageVmrss"] = _vmrssUsageAfter - _vmrssUsageBefore;
356
+ PTNumStatMap["MemoryUsageVmsize"] = _vmsizeUsageAfter - _vmsizeUsageBefore;
357
+
355
358
  PTAStat::printStat("Andersen Pointer Analysis Stats");
356
359
  }
357
360
 
@@ -0,0 +1,2 @@
1
+ add_llvm_executable(ae ae.cpp)
2
+ target_link_libraries(ae PUBLIC ${llvm_libs} SvfLLVM)
@@ -0,0 +1,607 @@
1
+ //
2
+ // Created by Jiawei Ren on 11/28/23.
3
+ //
4
+ #include "AbstractExecution/IntervalExeState.h"
5
+ #include "AbstractExecution/RelExeState.h"
6
+ #include "AbstractExecution/RelationSolver.h"
7
+ #include "SVF-LLVM/LLVMUtil.h"
8
+ #include "Util/Z3Expr.h"
9
+ #include "Util/Options.h"
10
+ #include <chrono>
11
+
12
+ using namespace SVF;
13
+ using namespace SVFUtil;
14
+
15
+ static Option<bool> SYMABS(
16
+ "symabs",
17
+ "symbolic abstraction test",
18
+ false
19
+ );
20
+
21
+ class SymblicAbstractionTest
22
+ {
23
+ public:
24
+ SymblicAbstractionTest() = default;
25
+
26
+ ~SymblicAbstractionTest() = default;
27
+
28
+ static z3::context& getContext()
29
+ {
30
+ return Z3Expr::getContext();
31
+ }
32
+
33
+ void test_print()
34
+ {
35
+ SVFUtil::outs() << "hello print\n";
36
+ }
37
+
38
+ IntervalESBase RSY_time(IntervalESBase& inv, const Z3Expr& phi,
39
+ RelationSolver& rs)
40
+ {
41
+ auto start_time = std::chrono::high_resolution_clock::now();
42
+ IntervalESBase resRSY = rs.RSY(inv, phi);
43
+ auto end_time = std::chrono::high_resolution_clock::now();
44
+ auto duration = std::chrono::duration_cast<std::chrono::microseconds>(
45
+ end_time - start_time);
46
+ outs() << "running time of RSY : " << duration.count()
47
+ << " microseconds\n";
48
+ return resRSY;
49
+ }
50
+ IntervalESBase Bilateral_time(IntervalESBase& inv, const Z3Expr& phi,
51
+ RelationSolver& rs)
52
+ {
53
+ auto start_time = std::chrono::high_resolution_clock::now();
54
+ IntervalESBase resBilateral = rs.bilateral(inv, phi);
55
+ auto end_time = std::chrono::high_resolution_clock::now();
56
+ auto duration = std::chrono::duration_cast<std::chrono::microseconds>(
57
+ end_time - start_time);
58
+ outs() << "running time of Bilateral: " << duration.count()
59
+ << " microseconds\n";
60
+ return resBilateral;
61
+ }
62
+ IntervalESBase BS_time(IntervalESBase& inv, const Z3Expr& phi,
63
+ RelationSolver& rs)
64
+ {
65
+ auto start_time = std::chrono::high_resolution_clock::now();
66
+ IntervalESBase resBS = rs.BS(inv, phi);
67
+ auto end_time = std::chrono::high_resolution_clock::now();
68
+ auto duration = std::chrono::duration_cast<std::chrono::microseconds>(
69
+ end_time - start_time);
70
+ outs() << "running time of BS : " << duration.count()
71
+ << " microseconds\n";
72
+ return resBS;
73
+ }
74
+
75
+ void testRelExeState1_1()
76
+ {
77
+ SVFUtil::outs() << sucMsg("\t SUCCESS :") << "test1_1 start\n";
78
+ IntervalESBase itv;
79
+ RelExeState relation;
80
+ // var0 := [0, 1];
81
+ itv[0] = IntervalValue(0, 1);
82
+ relation[0] = getContext().int_const("0");
83
+ // var1 := var0 + 1;
84
+ relation[1] =
85
+ getContext().int_const("1") == getContext().int_const("0") + 1;
86
+ itv[1] = itv[0] + IntervalValue(1);
87
+ // Test extract sub vars
88
+ Set<u32_t> res;
89
+ relation.extractSubVars(relation[1], res);
90
+ assert(res == Set<u32_t>({0, 1}) && "inconsistency occurs");
91
+ IntervalESBase inv = itv.sliceState(res);
92
+ RelationSolver rs;
93
+ const Z3Expr& relExpr = relation[1];
94
+ const Z3Expr& initExpr = rs.gamma_hat(inv);
95
+ const Z3Expr& phi = (relExpr && initExpr).simplify();
96
+ IntervalESBase resRSY = rs.RSY(inv, phi);
97
+ IntervalESBase resBilateral = rs.bilateral(inv, phi);
98
+ IntervalESBase resBS = rs.BS(inv, phi);
99
+ // 0:[0,1] 1:[1,2]
100
+ assert(resRSY == resBS && resBS == resBilateral && "inconsistency occurs");
101
+ for (auto r : resRSY.getVarToVal())
102
+ {
103
+ outs() << r.first << " " << r.second << "\n";
104
+ }
105
+ IntervalESBase::VarToValMap intendedRes = {{0, IntervalValue(0, 1)}, {1, IntervalValue(1, 2)}};
106
+ assert(IntervalESBase::eqVarToValMap(resBS.getVarToVal(), intendedRes) && "inconsistency occurs");
107
+ }
108
+
109
+ void testRelExeState1_2()
110
+ {
111
+ SVFUtil::outs() << "test1_2 start\n";
112
+ IntervalESBase itv;
113
+ RelExeState relation;
114
+ // var0 := [0, 1];
115
+ relation[0] = getContext().int_const("0");
116
+ itv[0] = IntervalValue(0, 1);
117
+ // var1 := var0 + 1;
118
+ relation[1] =
119
+ getContext().int_const("1") == getContext().int_const("0") * 2;
120
+ itv[1] = itv[0] * IntervalValue(2);
121
+
122
+ // Test extract sub vars
123
+ Set<u32_t> res;
124
+ relation.extractSubVars(relation[1], res);
125
+ assert(res == Set<u32_t>({0, 1}) && "inconsistency occurs");
126
+ IntervalESBase inv = itv.sliceState(res);
127
+ RelationSolver rs;
128
+ const Z3Expr& relExpr = relation[1];
129
+ const Z3Expr& initExpr = rs.gamma_hat(inv);
130
+ const Z3Expr& phi = (relExpr && initExpr).simplify();
131
+ IntervalESBase resRSY = rs.RSY(inv, phi);
132
+ IntervalESBase resBilateral = rs.bilateral(inv, phi);
133
+ IntervalESBase resBS = rs.BS(inv, phi);
134
+ // 0:[0,1] 1:[0,2]
135
+ assert(resRSY == resBS && resBS == resBilateral && "inconsistency occurs");
136
+ for (auto r : resRSY.getVarToVal())
137
+ {
138
+ outs() << r.first << " " << r.second << "\n";
139
+ }
140
+ IntervalESBase::VarToValMap intendedRes = {{0, IntervalValue(0, 1)}, {1, IntervalValue(0, 2)}};
141
+ assert(IntervalESBase::eqVarToValMap(resBS.getVarToVal(), intendedRes) && "inconsistency occurs");
142
+ }
143
+
144
+ void testRelExeState2_1()
145
+ {
146
+ SVFUtil::outs() << "test2_1 start\n";
147
+ IntervalESBase itv;
148
+ RelExeState relation;
149
+ // var0 := [0, 10];
150
+ relation[0] = getContext().int_const("0");
151
+ itv[0] = IntervalValue(0, 10);
152
+ // var1 := var0;
153
+ relation[1] =
154
+ getContext().int_const("1") == getContext().int_const("0");
155
+ itv[1] = itv[0];
156
+ // var2 := var1 - var0;
157
+ relation[2] = getContext().int_const("2") ==
158
+ getContext().int_const("1") - getContext().int_const("0");
159
+ itv[2] = itv[1] - itv[0];
160
+ // Test extract sub vars
161
+ Set<u32_t> res;
162
+ relation.extractSubVars(relation[2], res);
163
+ assert(res == Set<u32_t>({0, 1, 2}) && "inconsistency occurs");
164
+ IntervalESBase inv = itv.sliceState(res);
165
+ RelationSolver rs;
166
+ const Z3Expr& relExpr = relation[2] && relation[1];
167
+ const Z3Expr& initExpr = rs.gamma_hat(inv);
168
+ const Z3Expr& phi = (relExpr && initExpr).simplify();
169
+ IntervalESBase resRSY = rs.RSY(inv, phi);
170
+ IntervalESBase resBilateral = rs.bilateral(inv, phi);
171
+ IntervalESBase resBS = rs.BS(inv, phi);
172
+ // 0:[0,10] 1:[0,10] 2:[0,0]
173
+ assert(resRSY == resBS && resBS == resBilateral && "inconsistency occurs");
174
+ for (auto r : resRSY.getVarToVal())
175
+ {
176
+ outs() << r.first << " " << r.second << "\n";
177
+ }
178
+ // ground truth
179
+ IntervalESBase::VarToValMap intendedRes = {{0, IntervalValue(0, 10)},
180
+ {1, IntervalValue(0, 10)},
181
+ {2, IntervalValue(0, 0)}
182
+ };
183
+ assert(IntervalESBase::eqVarToValMap(resBS.getVarToVal(), intendedRes) && "inconsistency occurs");
184
+ }
185
+
186
+ void testRelExeState2_2()
187
+ {
188
+ SVFUtil::outs() << "test2_2 start\n";
189
+ IntervalESBase itv;
190
+ RelExeState relation;
191
+ // var0 := [0, 100];
192
+ relation[0] = getContext().int_const("0");
193
+ itv[0] = IntervalValue(0, 100);
194
+ // var1 := var0;
195
+ relation[1] =
196
+ getContext().int_const("1") == getContext().int_const("0");
197
+ itv[1] = itv[0];
198
+ // var2 := var1 - var0;
199
+ relation[2] = getContext().int_const("2") ==
200
+ getContext().int_const("1") - getContext().int_const("0");
201
+ itv[2] = itv[1] - itv[0];
202
+
203
+ // Test extract sub vars
204
+ Set<u32_t> res;
205
+ relation.extractSubVars(relation[2], res);
206
+ assert(res == Set<u32_t>({0, 1, 2}) && "inconsistency occurs");
207
+ IntervalESBase inv = itv.sliceState(res);
208
+ RelationSolver rs;
209
+ const Z3Expr& relExpr = relation[2] && relation[1];
210
+ const Z3Expr& initExpr = rs.gamma_hat(inv);
211
+ const Z3Expr& phi = (relExpr && initExpr).simplify();
212
+ IntervalESBase resRSY = rs.RSY(inv, phi);
213
+ IntervalESBase resBilateral = rs.bilateral(inv, phi);
214
+ IntervalESBase resBS = rs.BS(inv, phi);
215
+ // 0:[0,100] 1:[0,100] 2:[0,0]
216
+ assert(resRSY == resBS && resBS == resBilateral && "inconsistency occurs");
217
+ for (auto r : resRSY.getVarToVal())
218
+ {
219
+ outs() << r.first << " " << r.second << "\n";
220
+ }
221
+ // ground truth
222
+ IntervalESBase::VarToValMap intendedRes = {{0, IntervalValue(0, 100)},
223
+ {1, IntervalValue(0, 100)},
224
+ {2, IntervalValue(0, 0)}
225
+ };
226
+ assert(IntervalESBase::eqVarToValMap(resBS.getVarToVal(), intendedRes) && "inconsistency occurs");
227
+ }
228
+
229
+ void testRelExeState2_3()
230
+ {
231
+ SVFUtil::outs() << "test2_3 start\n";
232
+ IntervalESBase itv;
233
+ RelExeState relation;
234
+ // var0 := [0, 1000];
235
+ relation[0] = getContext().int_const("0");
236
+ itv[0] = IntervalValue(0, 1000);
237
+ // var1 := var0;
238
+ relation[1] =
239
+ getContext().int_const("1") == getContext().int_const("0");
240
+ itv[1] = itv[0];
241
+ // var2 := var1 - var0;
242
+ relation[2] = getContext().int_const("2") ==
243
+ getContext().int_const("1") - getContext().int_const("0");
244
+ itv[2] = itv[1] - itv[0];
245
+
246
+ // Test extract sub vars
247
+ Set<u32_t> res;
248
+ relation.extractSubVars(relation[2], res);
249
+ assert(res == Set<u32_t>({0, 1, 2}) && "inconsistency occurs");
250
+ IntervalESBase inv = itv.sliceState(res);
251
+ RelationSolver rs;
252
+ const Z3Expr& relExpr = relation[2] && relation[1];
253
+ const Z3Expr& initExpr = rs.gamma_hat(inv);
254
+ const Z3Expr& phi = (relExpr && initExpr).simplify();
255
+ IntervalESBase resRSY = rs.RSY(inv, phi);
256
+ IntervalESBase resBilateral = rs.bilateral(inv, phi);
257
+ IntervalESBase resBS = rs.BS(inv, phi);
258
+ // 0:[0,1000] 1:[0,1000] 2:[0,0]
259
+ assert(resRSY == resBS && resBS == resBilateral && "inconsistency occurs");
260
+ for (auto r : resRSY.getVarToVal())
261
+ {
262
+ outs() << r.first << " " << r.second << "\n";
263
+ }
264
+ // ground truth
265
+ // ground truth
266
+ IntervalESBase::VarToValMap intendedRes = {{0, IntervalValue(0, 1000)},
267
+ {1, IntervalValue(0, 1000)},
268
+ {2, IntervalValue(0, 0)}
269
+ };
270
+ assert(IntervalESBase::eqVarToValMap(resBS.getVarToVal(), intendedRes) && "inconsistency occurs");
271
+ }
272
+
273
+ void testRelExeState2_4()
274
+ {
275
+ SVFUtil::outs() << "test2_4 start\n";
276
+ IntervalESBase itv;
277
+ RelExeState relation;
278
+ // var0 := [0, 10000];
279
+ relation[0] = getContext().int_const("0");
280
+ itv[0] = IntervalValue(0, 10000);
281
+ // var1 := var0;
282
+ relation[1] =
283
+ getContext().int_const("1") == getContext().int_const("0");
284
+ itv[1] = itv[0];
285
+ // var2 := var1 - var0;
286
+ relation[2] = getContext().int_const("2") ==
287
+ getContext().int_const("1") - getContext().int_const("0");
288
+ itv[2] = itv[1] - itv[0];
289
+
290
+ // Test extract sub vars
291
+ Set<u32_t> res;
292
+ relation.extractSubVars(relation[2], res);
293
+ assert(res == Set<u32_t>({0, 1, 2}) && "inconsistency occurs");
294
+ IntervalESBase inv = itv.sliceState(res);
295
+ RelationSolver rs;
296
+ const Z3Expr& relExpr = relation[2] && relation[1];
297
+ const Z3Expr& initExpr = rs.gamma_hat(inv);
298
+ const Z3Expr& phi = (relExpr && initExpr).simplify();
299
+ IntervalESBase resRSY = RSY_time(inv, phi, rs);
300
+ IntervalESBase resBilateral = Bilateral_time(inv, phi, rs);
301
+ IntervalESBase resBS = BS_time(inv, phi, rs);
302
+ // 0:[0,10000] 1:[0,10000] 2:[0,0]
303
+ assert(resRSY == resBS && resBS == resBilateral && "inconsistency occurs");
304
+ for (auto r : resRSY.getVarToVal())
305
+ {
306
+ outs() << r.first << " " << r.second << "\n";
307
+ }
308
+ // ground truth
309
+ // ground truth
310
+ IntervalESBase::VarToValMap intendedRes = {{0, IntervalValue(0, 10000)},
311
+ {1, IntervalValue(0, 10000)},
312
+ {2, IntervalValue(0, 0)}
313
+ };
314
+ assert(IntervalESBase::eqVarToValMap(resBS.getVarToVal(), intendedRes) && "inconsistency occurs");
315
+ }
316
+
317
+ void testRelExeState2_5()
318
+ {
319
+ SVFUtil::outs() << "test2_5 start\n";
320
+ IntervalESBase itv;
321
+ RelExeState relation;
322
+ // var0 := [0, 100000];
323
+ relation[0] = getContext().int_const("0");
324
+ itv[0] = IntervalValue(0, 100000);
325
+ // var1 := var0;
326
+ relation[1] =
327
+ getContext().int_const("1") == getContext().int_const("0");
328
+ itv[1] = itv[0];
329
+ // var2 := var1 - var0;
330
+ relation[2] = getContext().int_const("2") ==
331
+ getContext().int_const("1") - getContext().int_const("0");
332
+ itv[2] = itv[1] - itv[0];
333
+
334
+ // Test extract sub vars
335
+ Set<u32_t> res;
336
+ relation.extractSubVars(relation[2], res);
337
+ assert(res == Set<u32_t>({0, 1, 2}) && "inconsistency occurs");
338
+ IntervalESBase inv = itv.sliceState(res);
339
+ RelationSolver rs;
340
+ const Z3Expr& relExpr = relation[2] && relation[1];
341
+ const Z3Expr& initExpr = rs.gamma_hat(inv);
342
+ const Z3Expr& phi = (relExpr && initExpr).simplify();
343
+ IntervalESBase resRSY = RSY_time(inv, phi, rs);
344
+ IntervalESBase resBilateral = Bilateral_time(inv, phi, rs);
345
+ IntervalESBase resBS = BS_time(inv, phi, rs);
346
+ // 0:[0,100000] 1:[0,100000] 2:[0,0]
347
+ assert(resRSY == resBS && resBS == resBilateral && "inconsistency occurs");
348
+ for (auto r : resRSY.getVarToVal())
349
+ {
350
+ outs() << r.first << " " << r.second << "\n";
351
+ }
352
+ // ground truth
353
+ // ground truth
354
+ IntervalESBase::VarToValMap intendedRes = {{0, IntervalValue(0, 100000)},
355
+ {1, IntervalValue(0, 100000)},
356
+ {2, IntervalValue(0, 0)}
357
+ };
358
+ assert(IntervalESBase::eqVarToValMap(resBS.getVarToVal(), intendedRes) && "inconsistency occurs");
359
+ }
360
+
361
+ void testRelExeState3_1()
362
+ {
363
+ SVFUtil::outs() << "test3_1 start\n";
364
+ IntervalESBase itv;
365
+ RelExeState relation;
366
+ // var0 := [1, 10];
367
+ relation[0] = getContext().int_const("0");
368
+ itv[0] = IntervalValue(1, 10);
369
+ // var1 := var0;
370
+ relation[1] =
371
+ getContext().int_const("1") == getContext().int_const("0");
372
+ itv[1] = itv[0];
373
+ // var2 := var1 / var0;
374
+ relation[2] = getContext().int_const("2") ==
375
+ getContext().int_const("1") / getContext().int_const("0");
376
+ itv[2] = itv[1] / itv[0];
377
+ // Test extract sub vars
378
+ Set<u32_t> res;
379
+ relation.extractSubVars(relation[2], res);
380
+ assert(res == Set<u32_t>({0, 1, 2}) && "inconsistency occurs");
381
+ IntervalESBase inv = itv.sliceState(res);
382
+ RelationSolver rs;
383
+ const Z3Expr& relExpr = relation[2] && relation[1];
384
+ const Z3Expr& initExpr = rs.gamma_hat(inv);
385
+ const Z3Expr& phi = (relExpr && initExpr).simplify();
386
+ IntervalESBase resRSY = rs.RSY(inv, phi);
387
+ IntervalESBase resBilateral = rs.bilateral(inv, phi);
388
+ IntervalESBase resBS = rs.BS(inv, phi);
389
+ // 0:[1,10] 1:[1,10] 2:[1,1]
390
+ assert(resRSY == resBS && resBS == resBilateral && "inconsistency occurs");
391
+ for (auto r : resRSY.getVarToVal())
392
+ {
393
+ outs() << r.first << " " << r.second << "\n";
394
+ }
395
+ // ground truth
396
+ IntervalESBase::VarToValMap intendedRes = {{0, IntervalValue(1, 10)},
397
+ {1, IntervalValue(1, 10)},
398
+ {2, IntervalValue(1, 1)}
399
+ };
400
+ assert(IntervalESBase::eqVarToValMap(resBS.getVarToVal(), intendedRes) && "inconsistency occurs");
401
+ }
402
+
403
+ void testRelExeState3_2()
404
+ {
405
+ SVFUtil::outs() << "test3_2 start\n";
406
+ IntervalESBase itv;
407
+ RelExeState relation;
408
+ // var0 := [1, 1000];
409
+ relation[0] = getContext().int_const("0");
410
+ itv[0] = IntervalValue(1, 1000);
411
+ // var1 := var0;
412
+ relation[1] =
413
+ getContext().int_const("1") == getContext().int_const("0");
414
+ itv[1] = itv[0];
415
+ // var2 := var1 / var0;
416
+ relation[2] = getContext().int_const("2") ==
417
+ getContext().int_const("1") / getContext().int_const("0");
418
+ itv[2] = itv[1] / itv[0];
419
+ // Test extract sub vars
420
+ Set<u32_t> res;
421
+ relation.extractSubVars(relation[2], res);
422
+ assert(res == Set<u32_t>({0, 1, 2}) && "inconsistency occurs");
423
+ IntervalESBase inv = itv.sliceState(res);
424
+ RelationSolver rs;
425
+ const Z3Expr& relExpr = relation[2] && relation[1];
426
+ const Z3Expr& initExpr = rs.gamma_hat(inv);
427
+ const Z3Expr& phi = (relExpr && initExpr).simplify();
428
+ IntervalESBase resRSY = rs.RSY(inv, phi);
429
+ IntervalESBase resBilateral = rs.bilateral(inv, phi);
430
+ IntervalESBase resBS = rs.BS(inv, phi);
431
+ // 0:[1,1000] 1:[1,1000] 2:[1,1]
432
+ assert(resRSY == resBS && resBS == resBilateral && "inconsistency occurs");
433
+ for (auto r : resRSY.getVarToVal())
434
+ {
435
+ outs() << r.first << " " << r.second << "\n";
436
+ }
437
+ // ground truth
438
+ IntervalESBase::VarToValMap intendedRes = {{0, IntervalValue(1, 1000)},
439
+ {1, IntervalValue(1, 1000)},
440
+ {2, IntervalValue(1, 1)}
441
+ };
442
+ assert(IntervalESBase::eqVarToValMap(resBS.getVarToVal(), intendedRes) && "inconsistency occurs");
443
+ }
444
+
445
+ void testRelExeState3_3()
446
+ {
447
+ SVFUtil::outs() << "test3_3 start\n";
448
+ IntervalESBase itv;
449
+ RelExeState relation;
450
+ // var0 := [1, 10000];
451
+ relation[0] = getContext().int_const("0");
452
+ itv[0] = IntervalValue(1, 10000);
453
+ // var1 := var0;
454
+ relation[1] =
455
+ getContext().int_const("1") == getContext().int_const("0");
456
+ itv[1] = itv[0];
457
+ // var2 := var1 / var0;
458
+ relation[2] = getContext().int_const("2") ==
459
+ getContext().int_const("1") / getContext().int_const("0");
460
+ itv[2] = itv[1] / itv[0];
461
+ // Test extract sub vars
462
+ Set<u32_t> res;
463
+ relation.extractSubVars(relation[2], res);
464
+ assert(res == Set<u32_t>({0, 1, 2}) && "inconsistency occurs");
465
+ IntervalESBase inv = itv.sliceState(res);
466
+ RelationSolver rs;
467
+ const Z3Expr& relExpr = relation[2] && relation[1];
468
+ const Z3Expr& initExpr = rs.gamma_hat(inv);
469
+ const Z3Expr& phi = (relExpr && initExpr).simplify();
470
+ IntervalESBase resRSY = RSY_time(inv, phi, rs);
471
+ IntervalESBase resBilateral = Bilateral_time(inv, phi, rs);
472
+ IntervalESBase resBS = BS_time(inv, phi, rs);
473
+ // 0:[1,10000] 1:[1,10000] 2:[1,1]
474
+ assert(resRSY == resBS && resBS == resBilateral && "inconsistency occurs");
475
+ for (auto r : resRSY.getVarToVal())
476
+ {
477
+ outs() << r.first << " " << r.second << "\n";
478
+ }
479
+ // ground truth
480
+ IntervalESBase::VarToValMap intendedRes =
481
+ Map<u32_t, IntervalValue>({{0, IntervalValue(1, 10000)},
482
+ {1, IntervalValue(1, 10000)},
483
+ {2, IntervalValue(1, 1)}});
484
+ }
485
+
486
+ void testRelExeState3_4()
487
+ {
488
+ SVFUtil::outs() << "test3_4 start\n";
489
+ IntervalESBase itv;
490
+ RelExeState relation;
491
+ // var0 := [1, 100000];
492
+ relation[0] = getContext().int_const("0");
493
+ itv[0] = IntervalValue(1, 100000);
494
+ // var1 := var0;
495
+ relation[1] =
496
+ getContext().int_const("1") == getContext().int_const("0");
497
+ itv[1] = itv[0];
498
+ // var2 := var1 / var0;
499
+ relation[2] = getContext().int_const("2") ==
500
+ getContext().int_const("1") / getContext().int_const("0");
501
+ itv[2] = itv[1] / itv[0];
502
+ // Test extract sub vars
503
+ Set<u32_t> res;
504
+ relation.extractSubVars(relation[2], res);
505
+ assert(res == Set<u32_t>({0, 1, 2}) && "inconsistency occurs");
506
+ IntervalESBase inv = itv.sliceState(res);
507
+ RelationSolver rs;
508
+ const Z3Expr& relExpr = relation[2] && relation[1];
509
+ const Z3Expr& initExpr = rs.gamma_hat(inv);
510
+ const Z3Expr& phi = (relExpr && initExpr).simplify();
511
+ IntervalESBase resRSY = RSY_time(inv, phi, rs);
512
+ IntervalESBase resBilateral = Bilateral_time(inv, phi, rs);
513
+ IntervalESBase resBS = BS_time(inv, phi, rs);
514
+ // 0:[1,100000] 1:[1,100000] 2:[1,1]
515
+ assert(resRSY == resBS && resBS == resBilateral && "inconsistency occurs");
516
+ for (auto r : resRSY.getVarToVal())
517
+ {
518
+ outs() << r.first << " " << r.second << "\n";
519
+ }
520
+ // ground truth
521
+ IntervalESBase::VarToValMap intendedRes = {{0, IntervalValue(1, 100000)},
522
+ {1, IntervalValue(1, 100000)},
523
+ {2, IntervalValue(1, 1)}
524
+ };
525
+ assert(IntervalESBase::eqVarToValMap(resBS.getVarToVal(), intendedRes) && "inconsistency occurs");
526
+ }
527
+
528
+ void testRelExeState4_1()
529
+ {
530
+ SVFUtil::outs() << "test4_1 start\n";
531
+ IntervalESBase itv;
532
+ RelExeState relation;
533
+ // var0 := [0, 10];
534
+ relation[0] = getContext().int_const("0");
535
+ itv[0] = IntervalValue(0, 10);
536
+ // var1 := var0;
537
+ relation[1] =
538
+ getContext().int_const("1") == getContext().int_const("0");
539
+ itv[1] = itv[0];
540
+ // var2 := var1 / var0;
541
+ relation[2] = getContext().int_const("2") ==
542
+ getContext().int_const("1") / getContext().int_const("0");
543
+ itv[2] = itv[1] / itv[0];
544
+ // Test extract sub vars
545
+ Set<u32_t> res;
546
+ relation.extractSubVars(relation[2], res);
547
+ assert(res == Set<u32_t>({0, 1, 2}) && "inconsistency occurs");
548
+ IntervalESBase inv = itv.sliceState(res);
549
+ RelationSolver rs;
550
+ const Z3Expr& relExpr = relation[2] && relation[1];
551
+ const Z3Expr& initExpr = rs.gamma_hat(inv);
552
+ const Z3Expr& phi = (relExpr && initExpr).simplify();
553
+ // IntervalExeState resRSY = rs.RSY(inv, phi);
554
+ outs() << "rsy done\n";
555
+ // IntervalExeState resBilateral = rs.bilateral(inv, phi);
556
+ outs() << "bilateral done\n";
557
+ IntervalESBase resBS = rs.BS(inv, phi);
558
+ outs() << "bs done\n";
559
+ // 0:[0,10] 1:[0,10] 2:[-00,+00]
560
+ // assert(resRSY == resBS && resBS == resBilateral);
561
+ for (auto r : resBS.getVarToVal())
562
+ {
563
+ outs() << r.first << " " << r.second << "\n";
564
+ }
565
+ // ground truth
566
+ IntervalESBase::VarToValMap intendedRes = {{0, IntervalValue(0, 10)},
567
+ {1, IntervalValue(0, 10)},
568
+ {2, IntervalValue(IntervalValue::minus_infinity(), IntervalValue::plus_infinity())}
569
+ };
570
+ assert(IntervalESBase::eqVarToValMap(resBS.getVarToVal(), intendedRes) && "inconsistency occurs");
571
+ }
572
+
573
+ void testsValidation()
574
+ {
575
+ SymblicAbstractionTest saTest;
576
+ saTest.testRelExeState1_1();
577
+ saTest.testRelExeState1_2();
578
+
579
+ saTest.testRelExeState2_1();
580
+ saTest.testRelExeState2_2();
581
+ saTest.testRelExeState2_3();
582
+ // saTest.testRelExeState2_4(); /// 10000
583
+ // saTest.testRelExeState2_5(); /// 100000
584
+
585
+ saTest.testRelExeState3_1();
586
+ saTest.testRelExeState3_2();
587
+ // saTest.testRelExeState3_3(); /// 10000
588
+ // saTest.testRelExeState3_4(); /// 100000
589
+
590
+ outs() << "start top\n";
591
+ saTest.testRelExeState4_1(); /// top
592
+ }
593
+ };
594
+
595
+ int main(int argc, char** argv)
596
+ {
597
+ std::vector<std::string> moduleNameVec;
598
+ moduleNameVec = OptionBase::parseOptions(
599
+ argc, argv, "Source-Sink Bug Detector", "[options] <input-bitcode...>"
600
+ );
601
+ if (SYMABS())
602
+ {
603
+ SymblicAbstractionTest saTest;
604
+ saTest.testsValidation();
605
+ }
606
+ return 0;
607
+ }
@@ -5,15 +5,16 @@ add_subdirectory(DDA)
5
5
  add_subdirectory(MTA)
6
6
  add_subdirectory(CFL)
7
7
  add_subdirectory(LLVM2SVF)
8
+ add_subdirectory(AE)
8
9
 
9
10
  set_target_properties(
10
- cfl dvf svf-ex llvm2svf mta saber wpa
11
+ cfl dvf svf-ex llvm2svf mta saber wpa ae
11
12
  PROPERTIES
12
13
  RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
13
14
  )
14
15
 
15
16
  install(
16
- TARGETS cfl dvf svf-ex llvm2svf mta saber wpa
17
+ TARGETS cfl dvf svf-ex llvm2svf mta saber wpa ae
17
18
  EXPORT SVFTargets
18
19
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
19
20
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}