svf-tools 1.0.838 → 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 (317) hide show
  1. package/SVF-doxygen/html/CFLSVFGBuilder_8cpp.html +86 -0
  2. package/SVF-doxygen/html/CFLSVFGBuilder_8cpp_source.html +195 -0
  3. package/SVF-doxygen/html/CFLSVFGBuilder_8h.html +98 -0
  4. package/SVF-doxygen/html/CFLSVFGBuilder_8h_source.html +148 -0
  5. package/SVF-doxygen/html/CFLVF_8h.html +1 -1
  6. package/SVF-doxygen/html/CFLVF_8h_source.html +5 -5
  7. package/SVF-doxygen/html/DDAStat_8cpp_source.html +1 -1
  8. package/SVF-doxygen/html/DDAVFSolver_8h_source.html +1 -1
  9. package/SVF-doxygen/html/DoubleFreeChecker_8cpp_source.html +4 -4
  10. package/SVF-doxygen/html/DoubleFreeChecker_8h_source.html +1 -1
  11. package/SVF-doxygen/html/FileChecker_8cpp_source.html +2 -2
  12. package/SVF-doxygen/html/FileChecker_8h_source.html +1 -1
  13. package/SVF-doxygen/html/LeakChecker_8cpp_source.html +2 -2
  14. package/SVF-doxygen/html/LeakChecker_8h_source.html +1 -1
  15. package/SVF-doxygen/html/ProgSlice_8cpp_source.html +170 -136
  16. package/SVF-doxygen/html/ProgSlice_8h_source.html +314 -298
  17. package/SVF-doxygen/html/SVFGOPT_8h_source.html +5 -5
  18. package/SVF-doxygen/html/SVFGReadWrite_8cpp_source.html +2 -2
  19. package/SVF-doxygen/html/SVFG_8cpp_source.html +29 -29
  20. package/SVF-doxygen/html/SVFG_8h_source.html +446 -444
  21. package/SVF-doxygen/html/SaberCondAllocator_8cpp_source.html +1 -1
  22. package/SVF-doxygen/html/SaberCondAllocator_8h_source.html +246 -235
  23. package/SVF-doxygen/html/SaberSVFGBuilder_8cpp.html +1 -0
  24. package/SVF-doxygen/html/SaberSVFGBuilder_8cpp_source.html +271 -265
  25. package/SVF-doxygen/html/SaberSVFGBuilder_8h_source.html +75 -62
  26. package/SVF-doxygen/html/SrcSnkDDA_8cpp_source.html +257 -256
  27. package/SVF-doxygen/html/SrcSnkDDA_8h_source.html +18 -18
  28. package/SVF-doxygen/html/VersionedFlowSensitive_8cpp_source.html +3 -3
  29. package/SVF-doxygen/html/WPAPass_8cpp_source.html +1 -1
  30. package/SVF-doxygen/html/annotated.html +377 -376
  31. package/SVF-doxygen/html/classSVF_1_1CFLSVFGBuilder-members.html +121 -0
  32. package/SVF-doxygen/html/classSVF_1_1CFLSVFGBuilder.html +473 -0
  33. package/SVF-doxygen/html/classSVF_1_1CFLSVFGBuilder.png +0 -0
  34. package/SVF-doxygen/html/classSVF_1_1CFLVF-members.html +1 -1
  35. package/SVF-doxygen/html/classSVF_1_1CFLVF.html +7 -7
  36. package/SVF-doxygen/html/classSVF_1_1DDAStat.html +1 -1
  37. package/SVF-doxygen/html/classSVF_1_1DDAVFSolver.html +1 -1
  38. package/SVF-doxygen/html/classSVF_1_1DoubleFreeChecker.html +5 -5
  39. package/SVF-doxygen/html/classSVF_1_1FileChecker.html +3 -3
  40. package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +1 -1
  41. package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat.html +1 -1
  42. package/SVF-doxygen/html/classSVF_1_1LeakChecker.html +5 -5
  43. package/SVF-doxygen/html/classSVF_1_1ProgSlice-members.html +25 -22
  44. package/SVF-doxygen/html/classSVF_1_1ProgSlice.html +493 -366
  45. package/SVF-doxygen/html/classSVF_1_1SVFG-members.html +182 -181
  46. package/SVF-doxygen/html/classSVF_1_1SVFG.html +324 -298
  47. package/SVF-doxygen/html/classSVF_1_1SVFGBuilder.html +2 -1
  48. package/SVF-doxygen/html/classSVF_1_1SVFGBuilder.png +0 -0
  49. package/SVF-doxygen/html/classSVF_1_1SVFGOPT.html +7 -7
  50. package/SVF-doxygen/html/classSVF_1_1SaberCondAllocator-members.html +22 -19
  51. package/SVF-doxygen/html/classSVF_1_1SaberCondAllocator.html +238 -159
  52. package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder-members.html +11 -9
  53. package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder.html +347 -285
  54. package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder.png +0 -0
  55. package/SVF-doxygen/html/classSVF_1_1SrcSnkDDA.html +259 -257
  56. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitive.html +3 -3
  57. package/SVF-doxygen/html/classSVF_1_1WPAPass.html +1 -1
  58. package/SVF-doxygen/html/classes.html +95 -94
  59. package/SVF-doxygen/html/dir_1b8e404556d3e8597ae60437f0a084bf.html +2 -0
  60. package/SVF-doxygen/html/dir_8a9c8659eb68b9cbd3fead4690588a47.html +2 -0
  61. package/SVF-doxygen/html/files.html +6 -4
  62. package/SVF-doxygen/html/functions_b.html +4 -3
  63. package/SVF-doxygen/html/functions_c.html +38 -29
  64. package/SVF-doxygen/html/functions_f.html +6 -6
  65. package/SVF-doxygen/html/functions_func_b.html +3 -2
  66. package/SVF-doxygen/html/functions_func_c.html +29 -23
  67. package/SVF-doxygen/html/functions_func_g.html +14 -10
  68. package/SVF-doxygen/html/functions_func_i.html +1 -1
  69. package/SVF-doxygen/html/functions_func_r.html +6 -5
  70. package/SVF-doxygen/html/functions_func_s.html +20 -17
  71. package/SVF-doxygen/html/functions_func_~.html +3 -0
  72. package/SVF-doxygen/html/functions_g.html +10 -6
  73. package/SVF-doxygen/html/functions_i.html +5 -5
  74. package/SVF-doxygen/html/functions_m.html +1 -1
  75. package/SVF-doxygen/html/functions_n.html +8 -7
  76. package/SVF-doxygen/html/functions_p.html +15 -15
  77. package/SVF-doxygen/html/functions_r.html +12 -6
  78. package/SVF-doxygen/html/functions_rela_c.html +3 -0
  79. package/SVF-doxygen/html/functions_s.html +22 -11
  80. package/SVF-doxygen/html/functions_t.html +7 -7
  81. package/SVF-doxygen/html/functions_type_n.html +2 -1
  82. package/SVF-doxygen/html/functions_type_s.html +6 -1
  83. package/SVF-doxygen/html/functions_type_w.html +1 -0
  84. package/SVF-doxygen/html/functions_v.html +4 -6
  85. package/SVF-doxygen/html/functions_vars_m.html +1 -1
  86. package/SVF-doxygen/html/functions_vars_r.html +3 -0
  87. package/SVF-doxygen/html/functions_vars_s.html +2 -1
  88. package/SVF-doxygen/html/functions_w.html +4 -3
  89. package/SVF-doxygen/html/functions_~.html +3 -0
  90. package/SVF-doxygen/html/hierarchy.html +2 -1
  91. package/SVF-doxygen/html/namespaceSVF.html +2 -0
  92. package/SVF-doxygen/html/search/all_10.js +325 -325
  93. package/SVF-doxygen/html/search/all_11.js +224 -223
  94. package/SVF-doxygen/html/search/all_12.js +553 -551
  95. package/SVF-doxygen/html/search/all_13.js +190 -190
  96. package/SVF-doxygen/html/search/all_14.js +67 -67
  97. package/SVF-doxygen/html/search/all_15.js +167 -167
  98. package/SVF-doxygen/html/search/all_16.js +63 -63
  99. package/SVF-doxygen/html/search/all_17.js +1 -1
  100. package/SVF-doxygen/html/search/all_18.js +1 -1
  101. package/SVF-doxygen/html/search/all_19.js +11 -11
  102. package/SVF-doxygen/html/search/all_1a.js +173 -172
  103. package/SVF-doxygen/html/search/all_2.js +1 -1
  104. package/SVF-doxygen/html/search/all_3.js +466 -462
  105. package/SVF-doxygen/html/search/all_4.js +230 -230
  106. package/SVF-doxygen/html/search/all_5.js +119 -119
  107. package/SVF-doxygen/html/search/all_6.js +226 -226
  108. package/SVF-doxygen/html/search/all_7.js +1047 -1046
  109. package/SVF-doxygen/html/search/all_8.js +198 -198
  110. package/SVF-doxygen/html/search/all_9.js +608 -608
  111. package/SVF-doxygen/html/search/all_a.js +46 -46
  112. package/SVF-doxygen/html/search/all_b.js +26 -26
  113. package/SVF-doxygen/html/search/all_c.js +115 -115
  114. package/SVF-doxygen/html/search/all_d.js +197 -197
  115. package/SVF-doxygen/html/search/all_e.js +207 -207
  116. package/SVF-doxygen/html/search/all_f.js +116 -116
  117. package/SVF-doxygen/html/search/classes_0.js +26 -26
  118. package/SVF-doxygen/html/search/classes_1.js +9 -9
  119. package/SVF-doxygen/html/search/classes_10.js +73 -73
  120. package/SVF-doxygen/html/search/classes_11.js +15 -15
  121. package/SVF-doxygen/html/search/classes_12.js +2 -2
  122. package/SVF-doxygen/html/search/classes_13.js +10 -10
  123. package/SVF-doxygen/html/search/classes_14.js +14 -14
  124. package/SVF-doxygen/html/search/classes_15.js +1 -1
  125. package/SVF-doxygen/html/search/classes_2.js +81 -80
  126. package/SVF-doxygen/html/search/classes_3.js +37 -37
  127. package/SVF-doxygen/html/search/classes_4.js +9 -9
  128. package/SVF-doxygen/html/search/classes_5.js +28 -28
  129. package/SVF-doxygen/html/search/classes_6.js +104 -104
  130. package/SVF-doxygen/html/search/classes_7.js +34 -34
  131. package/SVF-doxygen/html/search/classes_8.js +56 -56
  132. package/SVF-doxygen/html/search/classes_9.js +1 -1
  133. package/SVF-doxygen/html/search/classes_a.js +12 -12
  134. package/SVF-doxygen/html/search/classes_b.js +29 -29
  135. package/SVF-doxygen/html/search/classes_c.js +6 -6
  136. package/SVF-doxygen/html/search/classes_d.js +18 -18
  137. package/SVF-doxygen/html/search/classes_e.js +36 -36
  138. package/SVF-doxygen/html/search/classes_f.js +25 -25
  139. package/SVF-doxygen/html/search/defines_0.js +3 -3
  140. package/SVF-doxygen/html/search/defines_1.js +2 -2
  141. package/SVF-doxygen/html/search/defines_2.js +30 -30
  142. package/SVF-doxygen/html/search/defines_3.js +20 -20
  143. package/SVF-doxygen/html/search/defines_4.js +2 -2
  144. package/SVF-doxygen/html/search/defines_5.js +4 -4
  145. package/SVF-doxygen/html/search/defines_6.js +2 -2
  146. package/SVF-doxygen/html/search/defines_7.js +5 -5
  147. package/SVF-doxygen/html/search/defines_8.js +11 -11
  148. package/SVF-doxygen/html/search/defines_9.js +9 -9
  149. package/SVF-doxygen/html/search/defines_a.js +2 -2
  150. package/SVF-doxygen/html/search/defines_b.js +1 -1
  151. package/SVF-doxygen/html/search/defines_c.js +3 -3
  152. package/SVF-doxygen/html/search/defines_d.js +2 -2
  153. package/SVF-doxygen/html/search/defines_e.js +7 -7
  154. package/SVF-doxygen/html/search/defines_f.js +3 -3
  155. package/SVF-doxygen/html/search/enums_0.js +3 -3
  156. package/SVF-doxygen/html/search/enums_1.js +2 -2
  157. package/SVF-doxygen/html/search/enums_10.js +1 -1
  158. package/SVF-doxygen/html/search/enums_11.js +1 -1
  159. package/SVF-doxygen/html/search/enums_2.js +8 -8
  160. package/SVF-doxygen/html/search/enums_3.js +1 -1
  161. package/SVF-doxygen/html/search/enums_4.js +3 -3
  162. package/SVF-doxygen/html/search/enums_5.js +1 -1
  163. package/SVF-doxygen/html/search/enums_6.js +2 -2
  164. package/SVF-doxygen/html/search/enums_7.js +2 -2
  165. package/SVF-doxygen/html/search/enums_8.js +4 -4
  166. package/SVF-doxygen/html/search/enums_9.js +1 -1
  167. package/SVF-doxygen/html/search/enums_a.js +1 -1
  168. package/SVF-doxygen/html/search/enums_b.js +7 -7
  169. package/SVF-doxygen/html/search/enums_c.js +1 -1
  170. package/SVF-doxygen/html/search/enums_d.js +4 -4
  171. package/SVF-doxygen/html/search/enums_e.js +2 -2
  172. package/SVF-doxygen/html/search/enums_f.js +4 -4
  173. package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
  174. package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
  175. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  176. package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
  177. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  178. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  179. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  180. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  181. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  182. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  183. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  184. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  185. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  186. package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
  187. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  188. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  189. package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
  190. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  191. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  192. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  193. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  194. package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
  195. package/SVF-doxygen/html/search/files_0.js +13 -13
  196. package/SVF-doxygen/html/search/files_1.js +7 -7
  197. package/SVF-doxygen/html/search/files_10.js +8 -8
  198. package/SVF-doxygen/html/search/files_11.js +8 -8
  199. package/SVF-doxygen/html/search/files_12.js +2 -2
  200. package/SVF-doxygen/html/search/files_2.js +57 -55
  201. package/SVF-doxygen/html/search/files_3.js +14 -14
  202. package/SVF-doxygen/html/search/files_4.js +5 -5
  203. package/SVF-doxygen/html/search/files_5.js +13 -13
  204. package/SVF-doxygen/html/search/files_6.js +9 -9
  205. package/SVF-doxygen/html/search/files_7.js +14 -14
  206. package/SVF-doxygen/html/search/files_8.js +13 -13
  207. package/SVF-doxygen/html/search/files_9.js +18 -18
  208. package/SVF-doxygen/html/search/files_a.js +3 -3
  209. package/SVF-doxygen/html/search/files_b.js +2 -2
  210. package/SVF-doxygen/html/search/files_c.js +20 -20
  211. package/SVF-doxygen/html/search/files_d.js +4 -4
  212. package/SVF-doxygen/html/search/files_e.js +62 -62
  213. package/SVF-doxygen/html/search/files_f.js +8 -8
  214. package/SVF-doxygen/html/search/functions_0.js +13 -13
  215. package/SVF-doxygen/html/search/functions_1.js +362 -362
  216. package/SVF-doxygen/html/search/functions_10.js +140 -140
  217. package/SVF-doxygen/html/search/functions_11.js +139 -139
  218. package/SVF-doxygen/html/search/functions_12.js +289 -288
  219. package/SVF-doxygen/html/search/functions_13.js +59 -59
  220. package/SVF-doxygen/html/search/functions_14.js +39 -39
  221. package/SVF-doxygen/html/search/functions_15.js +71 -71
  222. package/SVF-doxygen/html/search/functions_16.js +32 -32
  223. package/SVF-doxygen/html/search/functions_17.js +3 -3
  224. package/SVF-doxygen/html/search/functions_18.js +173 -172
  225. package/SVF-doxygen/html/search/functions_2.js +89 -89
  226. package/SVF-doxygen/html/search/functions_3.js +260 -258
  227. package/SVF-doxygen/html/search/functions_4.js +78 -78
  228. package/SVF-doxygen/html/search/functions_5.js +53 -53
  229. package/SVF-doxygen/html/search/functions_6.js +60 -60
  230. package/SVF-doxygen/html/search/functions_7.js +856 -855
  231. package/SVF-doxygen/html/search/functions_8.js +149 -149
  232. package/SVF-doxygen/html/search/functions_9.js +424 -424
  233. package/SVF-doxygen/html/search/functions_a.js +30 -30
  234. package/SVF-doxygen/html/search/functions_b.js +2 -2
  235. package/SVF-doxygen/html/search/functions_c.js +25 -25
  236. package/SVF-doxygen/html/search/functions_d.js +79 -79
  237. package/SVF-doxygen/html/search/functions_e.js +35 -35
  238. package/SVF-doxygen/html/search/functions_f.js +56 -56
  239. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  240. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  241. package/SVF-doxygen/html/search/related_0.js +2 -2
  242. package/SVF-doxygen/html/search/related_1.js +2 -2
  243. package/SVF-doxygen/html/search/related_2.js +3 -2
  244. package/SVF-doxygen/html/search/related_3.js +2 -2
  245. package/SVF-doxygen/html/search/related_4.js +2 -2
  246. package/SVF-doxygen/html/search/related_5.js +1 -1
  247. package/SVF-doxygen/html/search/related_6.js +2 -2
  248. package/SVF-doxygen/html/search/related_7.js +4 -4
  249. package/SVF-doxygen/html/search/related_8.js +2 -2
  250. package/SVF-doxygen/html/search/related_9.js +4 -4
  251. package/SVF-doxygen/html/search/related_a.js +19 -19
  252. package/SVF-doxygen/html/search/related_b.js +4 -4
  253. package/SVF-doxygen/html/search/related_c.js +2 -2
  254. package/SVF-doxygen/html/search/related_d.js +12 -12
  255. package/SVF-doxygen/html/search/related_e.js +2 -2
  256. package/SVF-doxygen/html/search/related_f.js +2 -2
  257. package/SVF-doxygen/html/search/typedefs_0.js +19 -19
  258. package/SVF-doxygen/html/search/typedefs_1.js +26 -26
  259. package/SVF-doxygen/html/search/typedefs_10.js +62 -61
  260. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  261. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  262. package/SVF-doxygen/html/search/typedefs_13.js +33 -33
  263. package/SVF-doxygen/html/search/typedefs_14.js +8 -8
  264. package/SVF-doxygen/html/search/typedefs_2.js +129 -129
  265. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  266. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  267. package/SVF-doxygen/html/search/typedefs_5.js +41 -41
  268. package/SVF-doxygen/html/search/typedefs_6.js +56 -56
  269. package/SVF-doxygen/html/search/typedefs_7.js +44 -44
  270. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  271. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  272. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  273. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  274. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  275. package/SVF-doxygen/html/search/typedefs_d.js +14 -14
  276. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  277. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  278. package/SVF-doxygen/html/search/variables_0.js +151 -151
  279. package/SVF-doxygen/html/search/variables_1.js +75 -75
  280. package/SVF-doxygen/html/search/variables_10.js +98 -98
  281. package/SVF-doxygen/html/search/variables_11.js +45 -44
  282. package/SVF-doxygen/html/search/variables_12.js +90 -90
  283. package/SVF-doxygen/html/search/variables_13.js +74 -74
  284. package/SVF-doxygen/html/search/variables_14.js +14 -14
  285. package/SVF-doxygen/html/search/variables_15.js +48 -48
  286. package/SVF-doxygen/html/search/variables_16.js +9 -9
  287. package/SVF-doxygen/html/search/variables_17.js +1 -1
  288. package/SVF-doxygen/html/search/variables_18.js +2 -2
  289. package/SVF-doxygen/html/search/variables_2.js +38 -38
  290. package/SVF-doxygen/html/search/variables_3.js +142 -142
  291. package/SVF-doxygen/html/search/variables_4.js +50 -50
  292. package/SVF-doxygen/html/search/variables_5.js +37 -37
  293. package/SVF-doxygen/html/search/variables_6.js +66 -66
  294. package/SVF-doxygen/html/search/variables_7.js +34 -34
  295. package/SVF-doxygen/html/search/variables_8.js +7 -7
  296. package/SVF-doxygen/html/search/variables_9.js +78 -78
  297. package/SVF-doxygen/html/search/variables_a.js +4 -4
  298. package/SVF-doxygen/html/search/variables_b.js +10 -10
  299. package/SVF-doxygen/html/search/variables_c.js +45 -45
  300. package/SVF-doxygen/html/search/variables_d.js +55 -55
  301. package/SVF-doxygen/html/search/variables_e.js +123 -123
  302. package/SVF-doxygen/html/search/variables_f.js +30 -30
  303. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +1 -1
  304. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1SVFG_01_5_01_4.html +2 -2
  305. package/SVF-doxygen/html/svf-ex_8cpp.html +1 -1
  306. package/SVF-doxygen/html/svf-ex_8cpp_source.html +1 -1
  307. package/package.json +1 -1
  308. package/svf/include/CFL/CFLSVFGBuilder.h +58 -0
  309. package/svf/include/CFL/CFLVF.h +2 -2
  310. package/svf/include/Graphs/SVFG.h +1 -0
  311. package/svf/include/SABER/ProgSlice.h +11 -0
  312. package/svf/include/SABER/SaberCondAllocator.h +8 -0
  313. package/svf/include/SABER/SaberSVFGBuilder.h +12 -2
  314. package/svf/lib/CFL/CFLSVFGBuilder.cpp +100 -0
  315. package/svf/lib/SABER/ProgSlice.cpp +48 -1
  316. package/svf/lib/SABER/SaberSVFGBuilder.cpp +5 -0
  317. package/svf/lib/SABER/SrcSnkDDA.cpp +1 -0
@@ -103,271 +103,276 @@ $(function() {
103
103
  <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>&quot;</span></div>
104
104
  <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFG_8h.html">Graphs/SVFG.h</a>&quot;</span></div>
105
105
  <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div>
106
- <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
107
- <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div>
108
- <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div>
109
- <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
110
- <div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberSVFGBuilder.html#a4d70d1413f42f30437d8eb45ff00b6f6"> 39</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#a4d70d1413f42f30437d8eb45ff00b6f6">SaberSVFGBuilder::buildSVFG</a>()</div>
111
- <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;{</div>
112
- <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
113
- <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="classSVF_1_1MemSSA.html">MemSSA</a>* mssa = svfg-&gt;getMSSA();</div>
114
- <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; svfg-&gt;buildSVFG();</div>
115
- <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* pta = mssa-&gt;<a class="code" href="classSVF_1_1MemSSA.html#ad40617a1907b9a6b8cc24888ce54a0ac">getPTA</a>();</div>
116
- <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">pasMsg</a>(<span class="stringliteral">&quot;\tCollect Global Variables\n&quot;</span>));</div>
117
- <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
118
- <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; collectGlobals(pta);</div>
106
+ <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SaberCondAllocator_8h.html">SABER/SaberCondAllocator.h</a>&quot;</span></div>
107
+ <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
108
+ <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
109
+ <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div>
110
+ <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div>
111
+ <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
112
+ <div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberSVFGBuilder.html#a4d70d1413f42f30437d8eb45ff00b6f6"> 41</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#a4d70d1413f42f30437d8eb45ff00b6f6">SaberSVFGBuilder::buildSVFG</a>()</div>
113
+ <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div>
114
+ <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
115
+ <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="classSVF_1_1MemSSA.html">MemSSA</a>* mssa = svfg-&gt;getMSSA();</div>
116
+ <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; svfg-&gt;buildSVFG();</div>
117
+ <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* pta = mssa-&gt;<a class="code" href="classSVF_1_1MemSSA.html#ad40617a1907b9a6b8cc24888ce54a0ac">getPTA</a>();</div>
118
+ <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">pasMsg</a>(<span class="stringliteral">&quot;\tCollect Global Variables\n&quot;</span>));</div>
119
119
  <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
120
- <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">pasMsg</a>(<span class="stringliteral">&quot;\tRemove Dereference Direct SVFG Edge\n&quot;</span>));</div>
120
+ <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; collectGlobals(pta);</div>
121
121
  <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
122
- <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; rmDerefDirSVFGEdges(pta);</div>
122
+ <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">pasMsg</a>(<span class="stringliteral">&quot;\tRemove Dereference Direct SVFG Edge\n&quot;</span>));</div>
123
123
  <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
124
- <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; rmIncomingEdgeForSUStore(pta);</div>
124
+ <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; rmDerefDirSVFGEdges(pta);</div>
125
125
  <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
126
- <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">pasMsg</a>(<span class="stringliteral">&quot;\tAdd Sink SVFG Nodes\n&quot;</span>));</div>
127
- <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
128
- <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; AddExtActualParmSVFGNodes(pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>());</div>
129
- <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
130
- <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">if</span>(pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4880571f57542afc50da506dfe273183">printStat</a>())</div>
131
- <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; svfg-&gt;performStat();</div>
132
- <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;}</div>
133
- <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
134
- <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; </div>
135
- <div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberSVFGBuilder.html#a2d0492c50159a5f97a587874c6877286"> 67</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#a2d0492c50159a5f97a587874c6877286">SaberSVFGBuilder::collectGlobals</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* pta)</div>
136
- <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;{</div>
137
- <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = svfg-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">getPAG</a>();</div>
138
- <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="namespaceSVF.html#a39d27055a14d9d6363c668ee215a4676">NodeVector</a> worklist;</div>
139
- <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> it = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; it++)</div>
140
- <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div>
141
- <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = it-&gt;second;</div>
142
- <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;DummyValVar, DummyObjVar&gt;(pagNode))</div>
143
- <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">continue</span>;</div>
144
- <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
145
- <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a>* gepobj = SVFUtil::dyn_cast&lt;GepObjVar&gt;(pagNode))</div>
146
- <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div>
147
- <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;DummyObjVar&gt;(pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(gepobj-&gt;getBaseNode())))</div>
148
- <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">continue</span>;</div>
149
- <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
150
- <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* val = pagNode-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ac2db6304ea5526fb446ae882983beeb0">getValue</a>())</div>
151
- <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div>
152
- <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;SVFGlobalValue&gt;(val))</div>
153
- <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; worklist.push_back(it-&gt;first);</div>
154
- <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div>
155
- <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div>
156
- <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
157
- <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#a4cb1f607e33d106dfa178e822c5ab7e1">NodeToPTSSMap</a> cachedPtsMap;</div>
158
- <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">while</span>(!worklist.empty())</div>
159
- <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; {</div>
160
- <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = worklist.back();</div>
161
- <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; worklist.pop_back();</div>
162
- <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; globs.set(<span class="keywordtype">id</span>);</div>
163
- <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = pta-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(<span class="keywordtype">id</span>);</div>
164
- <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = pts.<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">end</a>(); it!=eit; ++it)</div>
165
- <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div>
166
- <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; globs |= CollectPtsChain(pta,*it,cachedPtsMap);</div>
167
- <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</div>
168
- <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div>
169
- <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;}</div>
170
- <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; </div>
171
- <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
172
- <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment">/*</span></div>
173
- <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment"> * https://github.com/SVF-tools/SVF/issues/991</span></div>
174
- <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment"> *</span></div>
175
- <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment"> * Originally, this function will collect all base pointers with all their fields</span></div>
176
- <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="comment"> * inside the points-to set of global variables. But if a global variable points</span></div>
177
- <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="comment"> * to the pointer returned by malloc() at some program points, then all pointers</span></div>
178
- <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="comment"> * returned by malloc() will be included in the global set because of the</span></div>
179
- <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="comment"> * context-insensitive pointer analysis results. This will make saber abandon</span></div>
180
- <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment"> * too many slicing thus miss potential bugs.</span></div>
181
- <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="comment"> *</span></div>
182
- <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment"> * We add an option &quot;saber-collect-extret-globals&quot; to control whether this function</span></div>
183
- <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="comment"> * will collect external functions&#39; returned pointers. This option is true by default,</span></div>
184
- <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="comment"> * making it to be false will let saber analyze more slicing but cause performance downgrade.</span></div>
185
- <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="comment"> *</span></div>
186
- <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="comment"> */</span></div>
187
- <div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberSVFGBuilder.html#a411e168e2a6c27e15186c609c5e216b3"> 119</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#a411e168e2a6c27e15186c609c5e216b3">SaberSVFGBuilder::CollectPtsChain</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* pta, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#a4cb1f607e33d106dfa178e822c5ab7e1">NodeToPTSSMap</a>&amp; cachedPtsMap)</div>
188
- <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;{</div>
189
- <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = svfg-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">getPAG</a>();</div>
190
- <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; </div>
191
- <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseId = pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(<span class="keywordtype">id</span>);</div>
192
- <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; NodeToPTSSMap::iterator it = cachedPtsMap.find(baseId);</div>
193
- <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">if</span>(it!=cachedPtsMap.end())</div>
194
- <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; {</div>
195
- <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div>
196
- <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div>
197
- <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">else</span></div>
198
- <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div>
199
- <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = cachedPtsMap[baseId];</div>
200
- <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="comment">// base object</span></div>
201
- <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1Options.html#a9be31261a2f96c5733bd35a5da07eb76">Options::CollectExtRetGlobals</a>())</div>
202
- <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; {</div>
203
- <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span>(pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#af90d2ccb01402c5ca9d7a059f345c816">isFIObjNode</a>(baseId) &amp;&amp; pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(baseId)-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">hasValue</a>())</div>
204
- <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div>
205
- <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* inst = SVFUtil::dyn_cast&lt;SVFCallInst&gt;(pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(baseId)-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ac2db6304ea5526fb446ae882983beeb0">getValue</a>());</div>
206
- <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">if</span>(inst &amp;&amp; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVFUtil::isExtCall</a>(inst))</div>
207
- <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; {</div>
208
- <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">return</span> pts;</div>
209
- <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div>
210
- <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div>
211
- <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div>
212
- <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
213
- <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; pts |= pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0">getFieldsAfterCollapse</a>(baseId);</div>
214
- <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; </div>
215
- <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div>
216
- <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = pts.<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">end</a>(); it!=eit; ++it)</div>
217
- <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(*it);</div>
218
- <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; </div>
219
- <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">while</span>(!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div>
220
- <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; {</div>
221
- <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div>
222
- <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; tmp = pta-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(nodeId);</div>
223
- <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = tmp.<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>(), eit = tmp.<a class="code" href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">end</a>(); it!=eit; ++it)</div>
224
- <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div>
225
- <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; pts |= CollectPtsChain(pta,*it,cachedPtsMap);</div>
226
- <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div>
227
- <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div>
228
- <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> pts;</div>
229
- <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div>
230
- <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;}</div>
231
- <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; </div>
232
- <div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberSVFGBuilder.html#a4bfa849a30d1982ae597d26b4a01dd0f"> 167</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#a4bfa849a30d1982ae597d26b4a01dd0f">SaberSVFGBuilder::accessGlobal</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* pta,<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode)</div>
233
- <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;{</div>
234
- <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; </div>
235
- <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = pagNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div>
236
- <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts = pta-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(<span class="keywordtype">id</span>);</div>
237
- <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; pts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(<span class="keywordtype">id</span>);</div>
238
- <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; </div>
239
- <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">return</span> pts.<a class="code" href="classSVF_1_1PointsTo.html#ad78e4109c839914c4f7e37ca78046f1d">intersects</a>(globs);</div>
240
- <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;}</div>
126
+ <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; assert(saberCondAllocator &amp;&amp; <span class="stringliteral">&quot;saber condition allocator not set yet!&quot;</span>);</div>
127
+ <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; rmIncomingEdgeForSUStore(pta);</div>
128
+ <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
129
+ <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">pasMsg</a>(<span class="stringliteral">&quot;\tAdd Sink SVFG Nodes\n&quot;</span>));</div>
130
+ <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
131
+ <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; AddExtActualParmSVFGNodes(pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>());</div>
132
+ <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; </div>
133
+ <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span>(pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4880571f57542afc50da506dfe273183">printStat</a>())</div>
134
+ <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; svfg-&gt;performStat();</div>
135
+ <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;}</div>
136
+ <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
137
+ <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
138
+ <div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberSVFGBuilder.html#a2d0492c50159a5f97a587874c6877286"> 70</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#a2d0492c50159a5f97a587874c6877286">SaberSVFGBuilder::collectGlobals</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* pta)</div>
139
+ <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;{</div>
140
+ <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = svfg-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">getPAG</a>();</div>
141
+ <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="namespaceSVF.html#a39d27055a14d9d6363c668ee215a4676">NodeVector</a> worklist;</div>
142
+ <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> it = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; it++)</div>
143
+ <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div>
144
+ <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = it-&gt;second;</div>
145
+ <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;DummyValVar, DummyObjVar&gt;(pagNode))</div>
146
+ <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">continue</span>;</div>
147
+ <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
148
+ <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a>* gepobj = SVFUtil::dyn_cast&lt;GepObjVar&gt;(pagNode))</div>
149
+ <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; {</div>
150
+ <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;DummyObjVar&gt;(pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(gepobj-&gt;getBaseNode())))</div>
151
+ <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">continue</span>;</div>
152
+ <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div>
153
+ <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* val = pagNode-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ac2db6304ea5526fb446ae882983beeb0">getValue</a>())</div>
154
+ <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div>
155
+ <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;SVFGlobalValue&gt;(val))</div>
156
+ <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; worklist.push_back(it-&gt;first);</div>
157
+ <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div>
158
+ <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div>
159
+ <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
160
+ <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#a4cb1f607e33d106dfa178e822c5ab7e1">NodeToPTSSMap</a> cachedPtsMap;</div>
161
+ <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">while</span>(!worklist.empty())</div>
162
+ <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; {</div>
163
+ <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = worklist.back();</div>
164
+ <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; worklist.pop_back();</div>
165
+ <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; globs.set(<span class="keywordtype">id</span>);</div>
166
+ <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = pta-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(<span class="keywordtype">id</span>);</div>
167
+ <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = pts.<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">end</a>(); it!=eit; ++it)</div>
168
+ <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div>
169
+ <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; globs |= CollectPtsChain(pta,*it,cachedPtsMap);</div>
170
+ <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div>
171
+ <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div>
172
+ <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;}</div>
173
+ <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; </div>
174
+ <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
175
+ <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment">/*</span></div>
176
+ <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="comment"> * https://github.com/SVF-tools/SVF/issues/991</span></div>
177
+ <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="comment"> *</span></div>
178
+ <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="comment"> * Originally, this function will collect all base pointers with all their fields</span></div>
179
+ <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="comment"> * inside the points-to set of global variables. But if a global variable points</span></div>
180
+ <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment"> * to the pointer returned by malloc() at some program points, then all pointers</span></div>
181
+ <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="comment"> * returned by malloc() will be included in the global set because of the</span></div>
182
+ <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment"> * context-insensitive pointer analysis results. This will make saber abandon</span></div>
183
+ <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="comment"> * too many slicing thus miss potential bugs.</span></div>
184
+ <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="comment"> *</span></div>
185
+ <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="comment"> * We add an option &quot;saber-collect-extret-globals&quot; to control whether this function</span></div>
186
+ <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="comment"> * will collect external functions&#39; returned pointers. This option is true by default,</span></div>
187
+ <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="comment"> * making it to be false will let saber analyze more slicing but cause performance downgrade.</span></div>
188
+ <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="comment"> *</span></div>
189
+ <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="comment"> */</span></div>
190
+ <div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberSVFGBuilder.html#a411e168e2a6c27e15186c609c5e216b3"> 122</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#a411e168e2a6c27e15186c609c5e216b3">SaberSVFGBuilder::CollectPtsChain</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* pta, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#a4cb1f607e33d106dfa178e822c5ab7e1">NodeToPTSSMap</a>&amp; cachedPtsMap)</div>
191
+ <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;{</div>
192
+ <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = svfg-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">getPAG</a>();</div>
193
+ <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
194
+ <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseId = pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(<span class="keywordtype">id</span>);</div>
195
+ <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; NodeToPTSSMap::iterator it = cachedPtsMap.find(baseId);</div>
196
+ <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">if</span>(it!=cachedPtsMap.end())</div>
197
+ <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; {</div>
198
+ <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div>
199
+ <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div>
200
+ <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">else</span></div>
201
+ <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; {</div>
202
+ <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = cachedPtsMap[baseId];</div>
203
+ <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="comment">// base object</span></div>
204
+ <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1Options.html#a9be31261a2f96c5733bd35a5da07eb76">Options::CollectExtRetGlobals</a>())</div>
205
+ <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div>
206
+ <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">if</span>(pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#af90d2ccb01402c5ca9d7a059f345c816">isFIObjNode</a>(baseId) &amp;&amp; pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(baseId)-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">hasValue</a>())</div>
207
+ <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; {</div>
208
+ <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* inst = SVFUtil::dyn_cast&lt;SVFCallInst&gt;(pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(baseId)-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ac2db6304ea5526fb446ae882983beeb0">getValue</a>());</div>
209
+ <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">if</span>(inst &amp;&amp; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVFUtil::isExtCall</a>(inst))</div>
210
+ <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div>
211
+ <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">return</span> pts;</div>
212
+ <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div>
213
+ <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; }</div>
214
+ <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div>
215
+ <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
216
+ <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; pts |= pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0">getFieldsAfterCollapse</a>(baseId);</div>
217
+ <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; </div>
218
+ <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div>
219
+ <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = pts.<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">end</a>(); it!=eit; ++it)</div>
220
+ <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(*it);</div>
221
+ <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; </div>
222
+ <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">while</span>(!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div>
223
+ <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div>
224
+ <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div>
225
+ <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; tmp = pta-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(nodeId);</div>
226
+ <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = tmp.<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>(), eit = tmp.<a class="code" href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">end</a>(); it!=eit; ++it)</div>
227
+ <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {</div>
228
+ <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; pts |= CollectPtsChain(pta,*it,cachedPtsMap);</div>
229
+ <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div>
230
+ <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div>
231
+ <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">return</span> pts;</div>
232
+ <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div>
233
+ <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;}</div>
234
+ <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; </div>
235
+ <div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberSVFGBuilder.html#a4bfa849a30d1982ae597d26b4a01dd0f"> 170</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#a4bfa849a30d1982ae597d26b4a01dd0f">SaberSVFGBuilder::accessGlobal</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* pta,<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode)</div>
236
+ <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;{</div>
237
+ <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; </div>
238
+ <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = pagNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div>
239
+ <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts = pta-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(<span class="keywordtype">id</span>);</div>
240
+ <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; pts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(<span class="keywordtype">id</span>);</div>
241
241
  <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; </div>
242
- <div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberSVFGBuilder.html#ad8f4f63d2071be4eb5f6fb2fdf29a10a"> 177</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#ad8f4f63d2071be4eb5f6fb2fdf29a10a">SaberSVFGBuilder::rmDerefDirSVFGEdges</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* pta)</div>
243
- <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;{</div>
242
+ <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">return</span> pts.<a class="code" href="classSVF_1_1PointsTo.html#ad78e4109c839914c4f7e37ca78046f1d">intersects</a>(globs);</div>
243
+ <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;}</div>
244
244
  <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; </div>
245
- <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFG::iterator</a> it = svfg-&gt;begin(), eit = svfg-&gt;end(); it!=eit; ++it)</div>
246
- <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div>
247
- <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = it-&gt;second;</div>
248
- <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; </div>
249
- <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* stmtNode = SVFUtil::dyn_cast&lt;StmtSVFGNode&gt;(node))</div>
250
- <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {</div>
251
- <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;StoreSVFGNode&gt;(stmtNode))</div>
252
- <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div>
253
- <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* def = svfg-&gt;getDefSVFGNode(stmtNode-&gt;getPAGDstNode());</div>
254
- <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = svfg-&gt;getIntraVFGEdge(def,stmtNode,<a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a08201e6cbff4817e44568747a966b71d">SVFGEdge::IntraDirectVF</a>))</div>
255
- <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; svfg-&gt;removeSVFGEdge(edge);</div>
256
- <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">else</span></div>
257
- <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; assert((svfg-&gt;getKind()==<a class="code" href="classSVF_1_1VFG.html#ac2e2f555975063da3fa1932ac35802c6aab1abd6be4a29fe8fb03a82f85e568a0">VFG::FULLSVFG_OPT</a> || svfg-&gt;getKind()==<a class="code" href="classSVF_1_1VFG.html#ac2e2f555975063da3fa1932ac35802c6a8ed0b9aea88fbbbe91f33301bea0c9dd">VFG::PTRONLYSVFG_OPT</a>) &amp;&amp; <span class="stringliteral">&quot;Edge not found!&quot;</span>);</div>
258
- <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; </div>
259
- <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">if</span>(accessGlobal(pta,stmtNode-&gt;getPAGDstNode()))</div>
260
- <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; {</div>
261
- <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; globSVFGNodes.insert(stmtNode);</div>
262
- <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div>
263
- <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; }</div>
264
- <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;LoadSVFGNode&gt;(stmtNode))</div>
265
- <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; {</div>
266
- <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* def = svfg-&gt;getDefSVFGNode(stmtNode-&gt;getPAGSrcNode());</div>
267
- <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = svfg-&gt;getIntraVFGEdge(def,stmtNode,<a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a08201e6cbff4817e44568747a966b71d">SVFGEdge::IntraDirectVF</a>))</div>
268
- <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; svfg-&gt;removeSVFGEdge(edge);</div>
269
- <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">else</span></div>
270
- <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; assert((svfg-&gt;getKind()==<a class="code" href="classSVF_1_1VFG.html#ac2e2f555975063da3fa1932ac35802c6aab1abd6be4a29fe8fb03a82f85e568a0">VFG::FULLSVFG_OPT</a> || svfg-&gt;getKind()==<a class="code" href="classSVF_1_1VFG.html#ac2e2f555975063da3fa1932ac35802c6a8ed0b9aea88fbbbe91f33301bea0c9dd">VFG::PTRONLYSVFG_OPT</a>) &amp;&amp; <span class="stringliteral">&quot;Edge not found!&quot;</span>);</div>
271
- <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; </div>
272
- <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">if</span>(accessGlobal(pta,stmtNode-&gt;getPAGSrcNode()))</div>
273
- <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; {</div>
274
- <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; globSVFGNodes.insert(stmtNode);</div>
275
- <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; }</div>
276
- <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div>
277
- <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; </div>
278
- <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div>
279
- <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div>
280
- <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;}</div>
281
- <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; </div>
282
- <div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberSVFGBuilder.html#a21c20865a0093192978cec09ce09f20b"> 221</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#a21c20865a0093192978cec09ce09f20b">SaberSVFGBuilder::isStrongUpdate</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>&amp; singleton, <a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* pta)</div>
283
- <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;{</div>
284
- <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordtype">bool</span> isSU = <span class="keyword">false</span>;</div>
285
- <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store = SVFUtil::dyn_cast&lt;StoreSVFGNode&gt;(node))</div>
286
- <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; {</div>
287
- <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; dstCPSet = pta-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(store-&gt;getPAGDstNodeID());</div>
288
- <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">if</span> (dstCPSet.<a class="code" href="classSVF_1_1PointsTo.html#aa0d4ee196b91fce626f3f15bcc5599e4">count</a>() == 1)</div>
289
- <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; {</div>
290
- <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = dstCPSet.<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>();</div>
291
- <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; singleton = *it;</div>
292
- <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; </div>
293
- <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="comment">// Strong update can be made if this points-to target is not heap, array or field-insensitive.</span></div>
294
- <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">if</span> (!pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(singleton) &amp;&amp; !pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a89dfeedf8e3e91603a1e9c73e3608a73">isArrayMemObj</a>(singleton)</div>
295
- <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; &amp;&amp; <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">getBaseObj</a>(singleton)-&gt;<a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>() == <span class="keyword">false</span></div>
296
- <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; &amp;&amp; !pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a108380f6f0b67654bb7c7676686096c8">isLocalVarInRecursiveFun</a>(singleton))</div>
297
- <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; {</div>
298
- <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; isSU = <span class="keyword">true</span>;</div>
299
- <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div>
300
- <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div>
301
- <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div>
302
- <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">return</span> isSU;</div>
303
- <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;}</div>
304
- <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; </div>
305
- <div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberSVFGBuilder.html#ae0a9c42c850bda29aeae2f47ad2b8f4a"> 255</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#ae0a9c42c850bda29aeae2f47ad2b8f4a">SaberSVFGBuilder::rmIncomingEdgeForSUStore</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* pta)</div>
306
- <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;{</div>
307
- <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; </div>
308
- <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFG::iterator</a> it = svfg-&gt;begin(), eit = svfg-&gt;end(); it!=eit; ++it)</div>
309
- <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div>
310
- <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = it-&gt;second;</div>
311
- <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; </div>
312
- <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* stmtNode = SVFUtil::dyn_cast&lt;StoreSVFGNode&gt;(node))</div>
313
- <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; {</div>
314
- <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;StoreStmt&gt;(stmtNode-&gt;getPAGEdge()))</div>
315
- <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; {</div>
316
- <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> singleton;</div>
317
- <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">if</span>(isStrongUpdate(node, singleton, pta))</div>
318
- <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; {</div>
319
- <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;SVFGEdge*&gt;</a> toRemove;</div>
320
- <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">SVFGNode::const_iterator</a> it2 = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(), eit2 = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>(); it2 != eit2; ++it2)</div>
321
- <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; {</div>
322
- <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">if</span> ((*it2)-&gt;isIndirectVFGEdge())</div>
323
- <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; {</div>
324
- <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; toRemove.insert(*it2);</div>
325
- <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div>
326
- <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div>
327
- <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge: toRemove)</div>
328
- <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div>
329
- <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; svfg-&gt;removeSVFGEdge(edge);</div>
330
- <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; }</div>
331
- <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; }</div>
332
- <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; }</div>
333
- <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div>
334
- <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }</div>
335
- <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;}</div>
336
- <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; </div>
337
- <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; </div>
338
- <div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberSVFGBuilder.html#ab6870d6f6f5abc5417dcea771eaa31f7"> 289</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#ab6870d6f6f5abc5417dcea771eaa31f7">SaberSVFGBuilder::AddExtActualParmSVFGNodes</a>(<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph)</div>
339
- <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;{</div>
340
- <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>();</div>
341
- <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">for</span>(SVFIR::CSToArgsListMap::iterator it = pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a346b9300ad16ef65e3ab4e11f88193a7">getCallSiteArgsMap</a>().begin(),</div>
342
- <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; eit = pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a346b9300ad16ef65e3ab4e11f88193a7">getCallSiteArgsMap</a>().end(); it!=eit; ++it)</div>
343
- <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; {</div>
344
- <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a> callees;</div>
345
- <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#a317e09edb29b110cf4273009551d31ec">getCallees</a>(it-&gt;first, callees);</div>
346
- <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">for</span> (PTACallGraph::FunctionSet::const_iterator cit = callees.begin(),</div>
347
- <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; ecit = callees.end(); cit != ecit; cit++)</div>
348
- <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; {</div>
349
- <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; </div>
350
- <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = *cit;</div>
351
- <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SaberCheckerAPI.html#acf41a2b6de063da9ed492ef0da129036">SaberCheckerAPI::getCheckerAPI</a>()-&gt;isMemDealloc(fun)</div>
352
- <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; || <a class="code" href="classSVF_1_1SaberCheckerAPI.html#acf41a2b6de063da9ed492ef0da129036">SaberCheckerAPI::getCheckerAPI</a>()-&gt;isFClose(fun))</div>
353
- <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div>
354
- <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVFIR::SVFVarList</a>&amp; arglist = it-&gt;second;</div>
355
- <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">for</span>(SVFIR::SVFVarList::const_iterator ait = arglist.begin(), aeit = arglist.end(); ait!=aeit; ++ait)</div>
356
- <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; {</div>
357
- <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *pagNode = *ait;</div>
358
- <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">if</span> (pagNode-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div>
359
- <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; {</div>
360
- <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; addActualParmVFGNode(pagNode, it-&gt;first);</div>
361
- <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; svfg-&gt;addIntraDirectVFEdge(svfg-&gt;getDefSVFGNode(pagNode)-&gt;getId(), svfg-&gt;getActualParmVFGNode(pagNode, it-&gt;first)-&gt;getId());</div>
362
- <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; }</div>
363
- <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div>
364
- <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div>
365
- <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; }</div>
366
- <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; }</div>
367
- <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;}</div>
245
+ <div class="line"><a name="l00180"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberSVFGBuilder.html#ad8f4f63d2071be4eb5f6fb2fdf29a10a"> 180</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#ad8f4f63d2071be4eb5f6fb2fdf29a10a">SaberSVFGBuilder::rmDerefDirSVFGEdges</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* pta)</div>
246
+ <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;{</div>
247
+ <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; </div>
248
+ <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFG::iterator</a> it = svfg-&gt;begin(), eit = svfg-&gt;end(); it!=eit; ++it)</div>
249
+ <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div>
250
+ <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = it-&gt;second;</div>
251
+ <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; </div>
252
+ <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* stmtNode = SVFUtil::dyn_cast&lt;StmtSVFGNode&gt;(node))</div>
253
+ <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div>
254
+ <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;StoreSVFGNode&gt;(stmtNode))</div>
255
+ <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {</div>
256
+ <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* def = svfg-&gt;getDefSVFGNode(stmtNode-&gt;getPAGDstNode());</div>
257
+ <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = svfg-&gt;getIntraVFGEdge(def,stmtNode,<a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a08201e6cbff4817e44568747a966b71d">SVFGEdge::IntraDirectVF</a>))</div>
258
+ <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; svfg-&gt;removeSVFGEdge(edge);</div>
259
+ <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">else</span></div>
260
+ <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; assert((svfg-&gt;getKind()==<a class="code" href="classSVF_1_1VFG.html#ac2e2f555975063da3fa1932ac35802c6aab1abd6be4a29fe8fb03a82f85e568a0">VFG::FULLSVFG_OPT</a> || svfg-&gt;getKind()==<a class="code" href="classSVF_1_1VFG.html#ac2e2f555975063da3fa1932ac35802c6a8ed0b9aea88fbbbe91f33301bea0c9dd">VFG::PTRONLYSVFG_OPT</a>) &amp;&amp; <span class="stringliteral">&quot;Edge not found!&quot;</span>);</div>
261
+ <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; </div>
262
+ <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">if</span>(accessGlobal(pta,stmtNode-&gt;getPAGDstNode()))</div>
263
+ <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; {</div>
264
+ <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; globSVFGNodes.insert(stmtNode);</div>
265
+ <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div>
266
+ <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; }</div>
267
+ <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;LoadSVFGNode&gt;(stmtNode))</div>
268
+ <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; {</div>
269
+ <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* def = svfg-&gt;getDefSVFGNode(stmtNode-&gt;getPAGSrcNode());</div>
270
+ <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = svfg-&gt;getIntraVFGEdge(def,stmtNode,<a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a08201e6cbff4817e44568747a966b71d">SVFGEdge::IntraDirectVF</a>))</div>
271
+ <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; svfg-&gt;removeSVFGEdge(edge);</div>
272
+ <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">else</span></div>
273
+ <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; assert((svfg-&gt;getKind()==<a class="code" href="classSVF_1_1VFG.html#ac2e2f555975063da3fa1932ac35802c6aab1abd6be4a29fe8fb03a82f85e568a0">VFG::FULLSVFG_OPT</a> || svfg-&gt;getKind()==<a class="code" href="classSVF_1_1VFG.html#ac2e2f555975063da3fa1932ac35802c6a8ed0b9aea88fbbbe91f33301bea0c9dd">VFG::PTRONLYSVFG_OPT</a>) &amp;&amp; <span class="stringliteral">&quot;Edge not found!&quot;</span>);</div>
274
+ <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; </div>
275
+ <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span>(accessGlobal(pta,stmtNode-&gt;getPAGSrcNode()))</div>
276
+ <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div>
277
+ <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; globSVFGNodes.insert(stmtNode);</div>
278
+ <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div>
279
+ <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div>
280
+ <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; </div>
281
+ <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div>
282
+ <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div>
283
+ <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;}</div>
284
+ <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; </div>
285
+ <div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberSVFGBuilder.html#a21c20865a0093192978cec09ce09f20b"> 224</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#a21c20865a0093192978cec09ce09f20b">SaberSVFGBuilder::isStrongUpdate</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>&amp; singleton, <a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* pta)</div>
286
+ <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;{</div>
287
+ <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordtype">bool</span> isSU = <span class="keyword">false</span>;</div>
288
+ <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store = SVFUtil::dyn_cast&lt;StoreSVFGNode&gt;(node))</div>
289
+ <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; {</div>
290
+ <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; dstCPSet = pta-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(store-&gt;getPAGDstNodeID());</div>
291
+ <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">if</span> (dstCPSet.<a class="code" href="classSVF_1_1PointsTo.html#aa0d4ee196b91fce626f3f15bcc5599e4">count</a>() == 1)</div>
292
+ <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; {</div>
293
+ <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = dstCPSet.<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>();</div>
294
+ <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; singleton = *it;</div>
295
+ <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; </div>
296
+ <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// Strong update can be made if this points-to target is not heap, array or field-insensitive.</span></div>
297
+ <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span> (!pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(singleton) &amp;&amp; !pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a89dfeedf8e3e91603a1e9c73e3608a73">isArrayMemObj</a>(singleton)</div>
298
+ <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; &amp;&amp; <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">getBaseObj</a>(singleton)-&gt;<a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>() == <span class="keyword">false</span></div>
299
+ <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; &amp;&amp; !pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a108380f6f0b67654bb7c7676686096c8">isLocalVarInRecursiveFun</a>(singleton))</div>
300
+ <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; {</div>
301
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; isSU = <span class="keyword">true</span>;</div>
302
+ <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div>
303
+ <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; }</div>
304
+ <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; }</div>
305
+ <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">return</span> isSU;</div>
306
+ <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;}</div>
307
+ <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; </div>
308
+ <div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberSVFGBuilder.html#ae0a9c42c850bda29aeae2f47ad2b8f4a"> 258</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#ae0a9c42c850bda29aeae2f47ad2b8f4a">SaberSVFGBuilder::rmIncomingEdgeForSUStore</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* pta)</div>
309
+ <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;{</div>
310
+ <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; </div>
311
+ <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFG::iterator</a> it = svfg-&gt;begin(), eit = svfg-&gt;end(); it!=eit; ++it)</div>
312
+ <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; {</div>
313
+ <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = it-&gt;second;</div>
314
+ <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
315
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* stmtNode = SVFUtil::dyn_cast&lt;StoreSVFGNode&gt;(node))</div>
316
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; {</div>
317
+ <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;StoreStmt&gt;(stmtNode-&gt;getPAGEdge()))</div>
318
+ <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; {</div>
319
+ <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> singleton;</div>
320
+ <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">if</span>(isStrongUpdate(node, singleton, pta))</div>
321
+ <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; {</div>
322
+ <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;SVFGEdge*&gt;</a> toRemove;</div>
323
+ <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">SVFGNode::const_iterator</a> it2 = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(), eit2 = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>(); it2 != eit2; ++it2)</div>
324
+ <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; {</div>
325
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">if</span> ((*it2)-&gt;isIndirectVFGEdge())</div>
326
+ <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div>
327
+ <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; toRemove.insert(*it2);</div>
328
+ <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div>
329
+ <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div>
330
+ <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge: toRemove)</div>
331
+ <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div>
332
+ <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">if</span> (isa&lt;StoreSVFGNode&gt;(edge-&gt;getSrcNode()))</div>
333
+ <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; saberCondAllocator-&gt;getRemovedSUVFEdges()[edge-&gt;getSrcNode()].insert(edge-&gt;getDstNode());</div>
334
+ <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; svfg-&gt;removeSVFGEdge(edge);</div>
335
+ <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; }</div>
336
+ <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div>
337
+ <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; }</div>
338
+ <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; }</div>
339
+ <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; }</div>
340
+ <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;}</div>
341
+ <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; </div>
342
+ <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; </div>
343
+ <div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberSVFGBuilder.html#ab6870d6f6f5abc5417dcea771eaa31f7"> 294</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberSVFGBuilder.html#ab6870d6f6f5abc5417dcea771eaa31f7">SaberSVFGBuilder::AddExtActualParmSVFGNodes</a>(<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph)</div>
344
+ <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;{</div>
345
+ <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>();</div>
346
+ <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">for</span>(SVFIR::CSToArgsListMap::iterator it = pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a346b9300ad16ef65e3ab4e11f88193a7">getCallSiteArgsMap</a>().begin(),</div>
347
+ <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; eit = pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a346b9300ad16ef65e3ab4e11f88193a7">getCallSiteArgsMap</a>().end(); it!=eit; ++it)</div>
348
+ <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; {</div>
349
+ <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a> callees;</div>
350
+ <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#a317e09edb29b110cf4273009551d31ec">getCallees</a>(it-&gt;first, callees);</div>
351
+ <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">for</span> (PTACallGraph::FunctionSet::const_iterator cit = callees.begin(),</div>
352
+ <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; ecit = callees.end(); cit != ecit; cit++)</div>
353
+ <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div>
354
+ <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; </div>
355
+ <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = *cit;</div>
356
+ <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SaberCheckerAPI.html#acf41a2b6de063da9ed492ef0da129036">SaberCheckerAPI::getCheckerAPI</a>()-&gt;isMemDealloc(fun)</div>
357
+ <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; || <a class="code" href="classSVF_1_1SaberCheckerAPI.html#acf41a2b6de063da9ed492ef0da129036">SaberCheckerAPI::getCheckerAPI</a>()-&gt;isFClose(fun))</div>
358
+ <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {</div>
359
+ <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVFIR::SVFVarList</a>&amp; arglist = it-&gt;second;</div>
360
+ <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">for</span>(SVFIR::SVFVarList::const_iterator ait = arglist.begin(), aeit = arglist.end(); ait!=aeit; ++ait)</div>
361
+ <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div>
362
+ <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *pagNode = *ait;</div>
363
+ <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">if</span> (pagNode-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div>
364
+ <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; {</div>
365
+ <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; addActualParmVFGNode(pagNode, it-&gt;first);</div>
366
+ <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; svfg-&gt;addIntraDirectVFEdge(svfg-&gt;getDefSVFGNode(pagNode)-&gt;getId(), svfg-&gt;getActualParmVFGNode(pagNode, it-&gt;first)-&gt;getId());</div>
367
+ <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div>
368
+ <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div>
369
+ <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; }</div>
370
+ <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; }</div>
371
+ <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div>
372
+ <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;}</div>
368
373
  </div><!-- fragment --></div><!-- contents -->
369
374
  <div class="ttc" id="aclassSVF_1_1FIFOWorkList_html_a0df409a67428e528321869d201f2a474"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">SVF::FIFOWorkList::push</a></div><div class="ttdeci">bool push(const Data &amp;data)</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00165">WorkList.h:165</a></div></div>
370
- <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_a4cb1f607e33d106dfa178e822c5ab7e1"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#a4cb1f607e33d106dfa178e822c5ab7e1">SVF::SaberSVFGBuilder::NodeToPTSSMap</a></div><div class="ttdeci">Map&lt; NodeID, PointsTo &gt; NodeToPTSSMap</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8h_source.html#l00045">SaberSVFGBuilder.h:45</a></div></div>
375
+ <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_a4cb1f607e33d106dfa178e822c5ab7e1"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#a4cb1f607e33d106dfa178e822c5ab7e1">SVF::SaberSVFGBuilder::NodeToPTSSMap</a></div><div class="ttdeci">Map&lt; NodeID, PointsTo &gt; NodeToPTSSMap</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8h_source.html#l00048">SaberSVFGBuilder.h:48</a></div></div>
371
376
  <div class="ttc" id="aclassSVF_1_1FIFOWorkList_html_a8fa72918fce7e9c0b2dc34b683a797c6"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">SVF::FIFOWorkList::pop</a></div><div class="ttdeci">Data pop()</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00200">WorkList.h:200</a></div></div>
372
377
  <div class="ttc" id="anamespaceSVF_html_a39d27055a14d9d6363c668ee215a4676"><div class="ttname"><a href="namespaceSVF.html#a39d27055a14d9d6363c668ee215a4676">SVF::NodeVector</a></div><div class="ttdeci">std::vector&lt; NodeID &gt; NodeVector</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00117">SVFType.h:117</a></div></div>
373
378
  <div class="ttc" id="aclassSVF_1_1PointsTo_1_1PointsToIterator_html"><div class="ttname"><a href="classSVF_1_1PointsTo_1_1PointsToIterator.html">SVF::PointsTo::PointsToIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00181">PointsTo.h:181</a></div></div>
@@ -389,7 +394,7 @@ $(function() {
389
394
  <div class="ttc" id="aSVFType_8h_html_a2c64190a065f342897573a3ef4973adb"><div class="ttname"><a href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a></div><div class="ttdeci">#define DGENERAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00582">SVFType.h:582</a></div></div>
390
395
  <div class="ttc" id="aclassSVF_1_1PointsTo_html_ad78e4109c839914c4f7e37ca78046f1d"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ad78e4109c839914c4f7e37ca78046f1d">SVF::PointsTo::intersects</a></div><div class="ttdeci">bool intersects(const PointsTo &amp;rhs) const</div><div class="ttdoc">Returns true if this set and rhs share any elements.</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00189">PointsTo.cpp:189</a></div></div>
391
396
  <div class="ttc" id="aclassSVF_1_1SVFVar_html_a3b61042079a6c9dc395f38925c6a1271"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">SVF::SVFVar::isPointer</a></div><div class="ttdeci">virtual bool isPointer() const</div><div class="ttdoc">Whether it is a pointer.</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00117">SVFVariables.h:117</a></div></div>
392
- <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_a21c20865a0093192978cec09ce09f20b"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#a21c20865a0093192978cec09ce09f20b">SVF::SaberSVFGBuilder::isStrongUpdate</a></div><div class="ttdeci">bool isStrongUpdate(const SVFGNode *node, NodeID &amp;singleton, BVDataPTAImpl *pta)</div><div class="ttdoc">Return TRUE if this is a strong update STORE statement.</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00221">SaberSVFGBuilder.cpp:221</a></div></div>
397
+ <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_a21c20865a0093192978cec09ce09f20b"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#a21c20865a0093192978cec09ce09f20b">SVF::SaberSVFGBuilder::isStrongUpdate</a></div><div class="ttdeci">bool isStrongUpdate(const SVFGNode *node, NodeID &amp;singleton, BVDataPTAImpl *pta)</div><div class="ttdoc">Return TRUE if this is a strong update STORE statement.</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00224">SaberSVFGBuilder.cpp:224</a></div></div>
393
398
  <div class="ttc" id="aclassSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID.</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00180">GenericGraph.h:180</a></div></div>
394
399
  <div class="ttc" id="aSaberCheckerAPI_8h_html"><div class="ttname"><a href="SaberCheckerAPI_8h.html">SaberCheckerAPI.h</a></div></div>
395
400
  <div class="ttc" id="aOptions_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
@@ -397,17 +402,17 @@ $(function() {
397
402
  <div class="ttc" id="aclassSVF_1_1SVFIR_html_a77a6bb9335aa12d29825af1b5ea07e08"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">SVF::SVFIR::getBaseObjVar</a></div><div class="ttdeci">NodeID getBaseObjVar(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00445">SVFIR.h:445</a></div></div>
398
403
  <div class="ttc" id="aclassSVF_1_1SVFValue_html"><div class="ttname"><a href="classSVF_1_1SVFValue.html">SVF::SVFValue</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00177">SVFValue.h:177</a></div></div>
399
404
  <div class="ttc" id="aclassSVF_1_1SVFIR_html_a37cfa2aa4e7b98ef9dc8179f581a2362"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVF::SVFIR::getPAG</a></div><div class="ttdeci">static SVFIR * getPAG(bool buildFromFile=false)</div><div class="ttdoc">Singleton design here to make sure we only have one instance during any analysis.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00114">SVFIR.h:114</a></div></div>
400
- <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_a4d70d1413f42f30437d8eb45ff00b6f6"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#a4d70d1413f42f30437d8eb45ff00b6f6">SVF::SaberSVFGBuilder::buildSVFG</a></div><div class="ttdeci">virtual void buildSVFG()</div><div class="ttdoc">Re-write create SVFG method.</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00039">SaberSVFGBuilder.cpp:39</a></div></div>
405
+ <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_a4d70d1413f42f30437d8eb45ff00b6f6"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#a4d70d1413f42f30437d8eb45ff00b6f6">SVF::SaberSVFGBuilder::buildSVFG</a></div><div class="ttdeci">virtual void buildSVFG()</div><div class="ttdoc">Re-write create SVFG method.</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00041">SaberSVFGBuilder.cpp:41</a></div></div>
401
406
  <div class="ttc" id="aclassSVF_1_1PTACallGraph_html_a5f5a5ec7e707a21994d301cc07d32a5a"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">SVF::PTACallGraph::FunctionSet</a></div><div class="ttdeci">Set&lt; const SVFFunction * &gt; FunctionSet</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00228">PTACallGraph.h:228</a></div></div>
402
- <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_ab6870d6f6f5abc5417dcea771eaa31f7"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#ab6870d6f6f5abc5417dcea771eaa31f7">SVF::SaberSVFGBuilder::AddExtActualParmSVFGNodes</a></div><div class="ttdeci">virtual void AddExtActualParmSVFGNodes(PTACallGraph *callgraph)</div><div class="ttdoc">Add actual parameter SVFGNode for 1st argument of a deallocation like external function.</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00289">SaberSVFGBuilder.cpp:289</a></div></div>
407
+ <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_ab6870d6f6f5abc5417dcea771eaa31f7"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#ab6870d6f6f5abc5417dcea771eaa31f7">SVF::SaberSVFGBuilder::AddExtActualParmSVFGNodes</a></div><div class="ttdeci">virtual void AddExtActualParmSVFGNodes(PTACallGraph *callgraph)</div><div class="ttdoc">Add actual parameter SVFGNode for 1st argument of a deallocation like external function.</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00294">SaberSVFGBuilder.cpp:294</a></div></div>
403
408
  <div class="ttc" id="aclassSVF_1_1BVDataPTAImpl_html"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html">SVF::BVDataPTAImpl</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00042">PointerAnalysisImpl.h:42</a></div></div>
404
409
  <div class="ttc" id="aclassSVF_1_1SVFIR_html_a346b9300ad16ef65e3ab4e11f88193a7"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a346b9300ad16ef65e3ab4e11f88193a7">SVF::SVFIR::getCallSiteArgsMap</a></div><div class="ttdeci">CSToArgsListMap &amp; getCallSiteArgsMap()</div><div class="ttdoc">Get callsite argument list.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00274">SVFIR.h:274</a></div></div>
405
410
  <div class="ttc" id="aclassSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00297">SVFValue.h:297</a></div></div>
406
- <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_a4bfa849a30d1982ae597d26b4a01dd0f"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#a4bfa849a30d1982ae597d26b4a01dd0f">SVF::SaberSVFGBuilder::accessGlobal</a></div><div class="ttdeci">bool accessGlobal(BVDataPTAImpl *pta, const PAGNode *pagNode)</div><div class="ttdoc">Whether points-to of a PAGNode points-to global variable.</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00167">SaberSVFGBuilder.cpp:167</a></div></div>
411
+ <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_a4bfa849a30d1982ae597d26b4a01dd0f"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#a4bfa849a30d1982ae597d26b4a01dd0f">SVF::SaberSVFGBuilder::accessGlobal</a></div><div class="ttdeci">bool accessGlobal(BVDataPTAImpl *pta, const PAGNode *pagNode)</div><div class="ttdoc">Whether points-to of a PAGNode points-to global variable.</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00170">SaberSVFGBuilder.cpp:170</a></div></div>
407
412
  <div class="ttc" id="aclassSVF_1_1GenericNode_html_ae5b113921530eee6afe58a65d8e5b3a7"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">SVF::GenericNode::InEdgeBegin</a></div><div class="ttdeci">iterator InEdgeBegin()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00225">GenericGraph.h:225</a></div></div>
408
413
  <div class="ttc" id="aclassSVF_1_1PointsTo_html_ab196d86cfb48d1c5d27a0c03c7497afa"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">SVF::PointsTo::set</a></div><div class="ttdeci">void set(u32_t n)</div><div class="ttdoc">Inserts n in the set.</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00157">PointsTo.cpp:157</a></div></div>
409
414
  <div class="ttc" id="aclassSVF_1_1VFG_html_ac2e2f555975063da3fa1932ac35802c6aab1abd6be4a29fe8fb03a82f85e568a0"><div class="ttname"><a href="classSVF_1_1VFG.html#ac2e2f555975063da3fa1932ac35802c6aab1abd6be4a29fe8fb03a82f85e568a0">SVF::VFG::FULLSVFG_OPT</a></div><div class="ttdeci">@ FULLSVFG_OPT</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00057">VFG.h:57</a></div></div>
410
- <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_a2d0492c50159a5f97a587874c6877286"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#a2d0492c50159a5f97a587874c6877286">SVF::SaberSVFGBuilder::collectGlobals</a></div><div class="ttdeci">void collectGlobals(BVDataPTAImpl *pta)</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00067">SaberSVFGBuilder.cpp:67</a></div></div>
415
+ <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_a2d0492c50159a5f97a587874c6877286"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#a2d0492c50159a5f97a587874c6877286">SVF::SaberSVFGBuilder::collectGlobals</a></div><div class="ttdeci">void collectGlobals(BVDataPTAImpl *pta)</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00070">SaberSVFGBuilder.cpp:70</a></div></div>
411
416
  <div class="ttc" id="aclassSVF_1_1VFG_html_ac2e2f555975063da3fa1932ac35802c6a8ed0b9aea88fbbbe91f33301bea0c9dd"><div class="ttname"><a href="classSVF_1_1VFG.html#ac2e2f555975063da3fa1932ac35802c6a8ed0b9aea88fbbbe91f33301bea0c9dd">SVF::VFG::PTRONLYSVFG_OPT</a></div><div class="ttdeci">@ PTRONLYSVFG_OPT</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00057">VFG.h:57</a></div></div>
412
417
  <div class="ttc" id="aclassSVF_1_1VFGNode_html"><div class="ttname"><a href="classSVF_1_1VFGNode.html">SVF::VFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00046">VFGNode.h:46</a></div></div>
413
418
  <div class="ttc" id="aclassSVF_1_1SVFVar_html"><div class="ttname"><a href="classSVF_1_1SVFVar.html">SVF::SVFVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00045">SVFVariables.h:45</a></div></div>
@@ -420,6 +425,7 @@ $(function() {
420
425
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00050">SVFUtil.h:50</a></div></div>
421
426
  <div class="ttc" id="aclassSVF_1_1MemSSA_html"><div class="ttname"><a href="classSVF_1_1MemSSA.html">SVF::MemSSA</a></div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00052">MemSSA.h:52</a></div></div>
422
427
  <div class="ttc" id="aclassSVF_1_1PointerAnalysis_html_ae6ea391ac44dffeb6899bb44323c5361"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">SVF::PointerAnalysis::isHeapMemObj</a></div><div class="ttdeci">bool isHeapMemObj(NodeID id) const</div><div class="ttdoc">Whether this object is heap or array.</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00312">PointerAnalysis.h:312</a></div></div>
428
+ <div class="ttc" id="aSaberCondAllocator_8h_html"><div class="ttname"><a href="SaberCondAllocator_8h.html">SaberCondAllocator.h</a></div></div>
423
429
  <div class="ttc" id="aclassSVF_1_1Options_html_a9be31261a2f96c5733bd35a5da07eb76"><div class="ttname"><a href="classSVF_1_1Options.html#a9be31261a2f96c5733bd35a5da07eb76">SVF::Options::CollectExtRetGlobals</a></div><div class="ttdeci">static const Option&lt; bool &gt; CollectExtRetGlobals</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00220">Options.h:220</a></div></div>
424
430
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a4550f2fb815882edfb666ac818792064"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">SVF::SVFUtil::pasMsg</a></div><div class="ttdeci">std::string pasMsg(const std::string &amp;msg)</div><div class="ttdoc">Print each pass/phase message by converting a string into blue string output.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00099">SVFUtil.cpp:99</a></div></div>
425
431
  <div class="ttc" id="aclassSVF_1_1MemSSA_html_ad40617a1907b9a6b8cc24888ce54a0ac"><div class="ttname"><a href="classSVF_1_1MemSSA.html#ad40617a1907b9a6b8cc24888ce54a0ac">SVF::MemSSA::getPTA</a></div><div class="ttdeci">BVDataPTAImpl * getPTA() const</div><div class="ttdoc">Return PTA.</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00308">MemSSA.h:308</a></div></div>
@@ -433,16 +439,16 @@ $(function() {
433
439
  <div class="ttc" id="aclassSVF_1_1SVFIR_html"><div class="ttname"><a href="classSVF_1_1SVFIR.html">SVF::SVFIR</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00043">SVFIR.h:43</a></div></div>
434
440
  <div class="ttc" id="aclassSVF_1_1SVFIR_html_a64939d7ecfd8e2cf862782954a56596b"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVF::SVFIR::SVFVarList</a></div><div class="ttdeci">std::vector&lt; const SVFVar * &gt; SVFVarList</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00059">SVFIR.h:59</a></div></div>
435
441
  <div class="ttc" id="aclassSVF_1_1StmtVFGNode_html"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html">SVF::StmtVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00116">VFGNode.h:116</a></div></div>
436
- <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_a411e168e2a6c27e15186c609c5e216b3"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#a411e168e2a6c27e15186c609c5e216b3">SVF::SaberSVFGBuilder::CollectPtsChain</a></div><div class="ttdeci">PointsTo &amp; CollectPtsChain(BVDataPTAImpl *pta, NodeID id, NodeToPTSSMap &amp;cachedPtsMap)</div><div class="ttdoc">Collect objects along points-to chains.</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00119">SaberSVFGBuilder.cpp:119</a></div></div>
442
+ <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_a411e168e2a6c27e15186c609c5e216b3"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#a411e168e2a6c27e15186c609c5e216b3">SVF::SaberSVFGBuilder::CollectPtsChain</a></div><div class="ttdeci">PointsTo &amp; CollectPtsChain(BVDataPTAImpl *pta, NodeID id, NodeToPTSSMap &amp;cachedPtsMap)</div><div class="ttdoc">Collect objects along points-to chains.</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00122">SaberSVFGBuilder.cpp:122</a></div></div>
437
443
  <div class="ttc" id="aclassSVF_1_1SVFVar_html_a1ace69053c2c4436fd78d5624bd0086a"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">SVF::SVFVar::hasValue</a></div><div class="ttdeci">bool hasValue() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00112">SVFVariables.h:112</a></div></div>
438
444
  <div class="ttc" id="anamespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
439
445
  <div class="ttc" id="aclassSVF_1_1SaberCheckerAPI_html_acf41a2b6de063da9ed492ef0da129036"><div class="ttname"><a href="classSVF_1_1SaberCheckerAPI.html#acf41a2b6de063da9ed492ef0da129036">SVF::SaberCheckerAPI::getCheckerAPI</a></div><div class="ttdeci">static SaberCheckerAPI * getCheckerAPI()</div><div class="ttdoc">Return a static reference.</div><div class="ttdef"><b>Definition:</b> <a href="SaberCheckerAPI_8h_source.html#l00089">SaberCheckerAPI.h:89</a></div></div>
440
446
  <div class="ttc" id="aclassSVF_1_1PointerAnalysis_html_a4880571f57542afc50da506dfe273183"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a4880571f57542afc50da506dfe273183">SVF::PointerAnalysis::printStat</a></div><div class="ttdeci">bool printStat()</div><div class="ttdoc">Whether print statistics.</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00362">PointerAnalysis.h:362</a></div></div>
441
447
  <div class="ttc" id="aclassSVF_1_1BVDataPTAImpl_html_ac9897a09cad8a99169f2da2116807b1b"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">const PointsTo &amp; getPts(NodeID id) override</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00088">PointerAnalysisImpl.h:88</a></div></div>
442
448
  <div class="ttc" id="aSVFType_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DBUG model of each pass.</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00576">SVFType.h:576</a></div></div>
443
- <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_ae0a9c42c850bda29aeae2f47ad2b8f4a"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#ae0a9c42c850bda29aeae2f47ad2b8f4a">SVF::SaberSVFGBuilder::rmIncomingEdgeForSUStore</a></div><div class="ttdeci">void rmIncomingEdgeForSUStore(BVDataPTAImpl *pta)</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00255">SaberSVFGBuilder.cpp:255</a></div></div>
449
+ <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_ae0a9c42c850bda29aeae2f47ad2b8f4a"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#ae0a9c42c850bda29aeae2f47ad2b8f4a">SVF::SaberSVFGBuilder::rmIncomingEdgeForSUStore</a></div><div class="ttdeci">virtual void rmIncomingEdgeForSUStore(BVDataPTAImpl *pta)</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00258">SaberSVFGBuilder.cpp:258</a></div></div>
444
450
  <div class="ttc" id="aclassSVF_1_1StoreVFGNode_html"><div class="ttname"><a href="classSVF_1_1StoreVFGNode.html">SVF::StoreVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00240">VFGNode.h:240</a></div></div>
445
- <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_ad8f4f63d2071be4eb5f6fb2fdf29a10a"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#ad8f4f63d2071be4eb5f6fb2fdf29a10a">SVF::SaberSVFGBuilder::rmDerefDirSVFGEdges</a></div><div class="ttdeci">void rmDerefDirSVFGEdges(BVDataPTAImpl *pta)</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00177">SaberSVFGBuilder.cpp:177</a></div></div>
451
+ <div class="ttc" id="aclassSVF_1_1SaberSVFGBuilder_html_ad8f4f63d2071be4eb5f6fb2fdf29a10a"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#ad8f4f63d2071be4eb5f6fb2fdf29a10a">SVF::SaberSVFGBuilder::rmDerefDirSVFGEdges</a></div><div class="ttdeci">void rmDerefDirSVFGEdges(BVDataPTAImpl *pta)</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00180">SaberSVFGBuilder.cpp:180</a></div></div>
446
452
  <div class="ttc" id="aclassSVF_1_1PointerAnalysis_html_af90d2ccb01402c5ca9d7a059f345c816"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#af90d2ccb01402c5ca9d7a059f345c816">SVF::PointerAnalysis::isFIObjNode</a></div><div class="ttdeci">bool isFIObjNode(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00329">PointerAnalysis.h:329</a></div></div>
447
453
  <div class="ttc" id="aclassSVF_1_1SVFIR_html_af76a55c3b8255a81a566bdce35ffc749"><div class="ttname"><a href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">SVF::SVFIR::getBaseObj</a></div><div class="ttdeci">const MemObj * getBaseObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00449">SVFIR.h:449</a></div></div>
448
454
  <div class="ttc" id="aclassSVF_1_1PointsTo_html"><div class="ttname"><a href="classSVF_1_1PointsTo.html">SVF::PointsTo</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00028">PointsTo.h:28</a></div></div>