svf-tools 1.0.853 → 1.0.855

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/SVF-doxygen/html/AE_2CMakeLists_8txt.html +106 -0
  2. package/SVF-doxygen/html/AndersenStat_8cpp_source.html +19 -12
  3. package/SVF-doxygen/html/Andersen_8cpp_source.html +3 -3
  4. package/SVF-doxygen/html/Andersen_8h_source.html +4 -4
  5. package/SVF-doxygen/html/CFLStat_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/CMakeLists_8txt.html +5 -5
  7. package/SVF-doxygen/html/CSC_8cpp_source.html +2 -2
  8. package/SVF-doxygen/html/ConsGNode_8h_source.html +4 -4
  9. package/SVF-doxygen/html/ConsG_8cpp_source.html +663 -644
  10. package/SVF-doxygen/html/ConsG_8h_source.html +335 -332
  11. package/SVF-doxygen/html/DDAClient_8cpp_source.html +4 -4
  12. package/SVF-doxygen/html/DDAStat_8cpp_source.html +249 -252
  13. package/SVF-doxygen/html/DDAStat_8h_source.html +70 -93
  14. package/SVF-doxygen/html/FlowSensitiveStat_8cpp_source.html +1 -1
  15. package/SVF-doxygen/html/PTAStat_8cpp_source.html +107 -83
  16. package/SVF-doxygen/html/PTAStat_8h_source.html +38 -13
  17. package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +1 -1
  18. package/SVF-doxygen/html/Steensgaard_8h_source.html +1 -1
  19. package/SVF-doxygen/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/WPAStat_8h_source.html +1 -1
  21. package/SVF-doxygen/html/ae_8cpp.html +179 -0
  22. package/SVF-doxygen/html/ae_8cpp_source.html +738 -0
  23. package/SVF-doxygen/html/annotated.html +1 -0
  24. package/SVF-doxygen/html/classSVF_1_1AddrCGEdge.html +11 -11
  25. package/SVF-doxygen/html/classSVF_1_1Andersen.html +20 -20
  26. package/SVF-doxygen/html/classSVF_1_1AndersenBase.html +10 -10
  27. package/SVF-doxygen/html/classSVF_1_1AndersenSCD.html +1 -1
  28. package/SVF-doxygen/html/classSVF_1_1AndersenSFR.html +3 -3
  29. package/SVF-doxygen/html/classSVF_1_1AndersenStat-members.html +8 -2
  30. package/SVF-doxygen/html/classSVF_1_1AndersenStat.html +34 -12
  31. package/SVF-doxygen/html/classSVF_1_1AndersenWaveDiff.html +1 -1
  32. package/SVF-doxygen/html/classSVF_1_1CFLStat-members.html +8 -2
  33. package/SVF-doxygen/html/classSVF_1_1CFLStat.html +16 -1
  34. package/SVF-doxygen/html/classSVF_1_1CSC.html +5 -5
  35. package/SVF-doxygen/html/classSVF_1_1ConstraintGraph-members.html +81 -80
  36. package/SVF-doxygen/html/classSVF_1_1ConstraintGraph.html +672 -623
  37. package/SVF-doxygen/html/classSVF_1_1ConstraintNode.html +28 -28
  38. package/SVF-doxygen/html/classSVF_1_1DDAClient.html +4 -4
  39. package/SVF-doxygen/html/classSVF_1_1DDAStat-members.html +7 -7
  40. package/SVF-doxygen/html/classSVF_1_1DDAStat.html +283 -463
  41. package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat-members.html +9 -3
  42. package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat.html +17 -2
  43. package/SVF-doxygen/html/classSVF_1_1ICFGStat-members.html +9 -3
  44. package/SVF-doxygen/html/classSVF_1_1ICFGStat.html +15 -0
  45. package/SVF-doxygen/html/classSVF_1_1MTAStat-members.html +7 -1
  46. package/SVF-doxygen/html/classSVF_1_1MTAStat.html +15 -0
  47. package/SVF-doxygen/html/classSVF_1_1MemSSAStat-members.html +9 -3
  48. package/SVF-doxygen/html/classSVF_1_1MemSSAStat.html +15 -0
  49. package/SVF-doxygen/html/classSVF_1_1PTAStat-members.html +7 -1
  50. package/SVF-doxygen/html/classSVF_1_1PTAStat.html +300 -84
  51. package/SVF-doxygen/html/classSVF_1_1PointerAnalysis.html +1 -1
  52. package/SVF-doxygen/html/classSVF_1_1SVFGStat-members.html +7 -1
  53. package/SVF-doxygen/html/classSVF_1_1SVFGStat.html +15 -0
  54. package/SVF-doxygen/html/classSVF_1_1Steensgaard.html +3 -3
  55. package/SVF-doxygen/html/classSVF_1_1TypeAnalysis.html +1 -1
  56. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitiveStat-members.html +9 -3
  57. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitiveStat.html +17 -2
  58. package/SVF-doxygen/html/classSymblicAbstractionTest-members.html +99 -0
  59. package/SVF-doxygen/html/classSymblicAbstractionTest.html +1282 -0
  60. package/SVF-doxygen/html/classes.html +56 -55
  61. package/SVF-doxygen/html/dir_454f632bef84d62ecd1cf13bd508acc9.html +86 -0
  62. package/SVF-doxygen/html/dir_e5d21102e3a998263c6c7812ac857e9d.html +2 -0
  63. package/SVF-doxygen/html/files.html +22 -20
  64. package/SVF-doxygen/html/functions.html +4 -4
  65. package/SVF-doxygen/html/functions_b.html +16 -10
  66. package/SVF-doxygen/html/functions_c.html +27 -24
  67. package/SVF-doxygen/html/functions_f.html +3 -3
  68. package/SVF-doxygen/html/functions_func_b.html +9 -3
  69. package/SVF-doxygen/html/functions_func_c.html +22 -19
  70. package/SVF-doxygen/html/functions_func_g.html +17 -16
  71. package/SVF-doxygen/html/functions_func_n.html +1 -1
  72. package/SVF-doxygen/html/functions_func_r.html +5 -2
  73. package/SVF-doxygen/html/functions_func_s.html +18 -15
  74. package/SVF-doxygen/html/functions_func_t.html +41 -1
  75. package/SVF-doxygen/html/functions_func_~.html +3 -0
  76. package/SVF-doxygen/html/functions_g.html +16 -15
  77. package/SVF-doxygen/html/functions_i.html +3 -3
  78. package/SVF-doxygen/html/functions_l.html +3 -3
  79. package/SVF-doxygen/html/functions_n.html +6 -6
  80. package/SVF-doxygen/html/functions_o.html +3 -3
  81. package/SVF-doxygen/html/functions_p.html +12 -12
  82. package/SVF-doxygen/html/functions_r.html +9 -6
  83. package/SVF-doxygen/html/functions_s.html +22 -19
  84. package/SVF-doxygen/html/functions_t.html +47 -7
  85. package/SVF-doxygen/html/functions_v.html +3 -3
  86. package/SVF-doxygen/html/functions_vars.html +4 -4
  87. package/SVF-doxygen/html/functions_w.html +9 -7
  88. package/SVF-doxygen/html/functions_~.html +3 -0
  89. package/SVF-doxygen/html/globals_a.html +2 -2
  90. package/SVF-doxygen/html/globals_func_a.html +2 -2
  91. package/SVF-doxygen/html/globals_func_m.html +5 -4
  92. package/SVF-doxygen/html/globals_m.html +5 -4
  93. package/SVF-doxygen/html/globals_s.html +3 -0
  94. package/SVF-doxygen/html/globals_vars.html +3 -0
  95. package/SVF-doxygen/html/hierarchy.html +40 -39
  96. package/SVF-doxygen/html/search/all_0.js +4 -4
  97. package/SVF-doxygen/html/search/all_1.js +133 -132
  98. package/SVF-doxygen/html/search/all_10.js +325 -325
  99. package/SVF-doxygen/html/search/all_11.js +225 -224
  100. package/SVF-doxygen/html/search/all_12.js +554 -552
  101. package/SVF-doxygen/html/search/all_13.js +203 -190
  102. package/SVF-doxygen/html/search/all_14.js +67 -67
  103. package/SVF-doxygen/html/search/all_15.js +168 -168
  104. package/SVF-doxygen/html/search/all_16.js +63 -63
  105. package/SVF-doxygen/html/search/all_17.js +1 -1
  106. package/SVF-doxygen/html/search/all_18.js +1 -1
  107. package/SVF-doxygen/html/search/all_19.js +11 -11
  108. package/SVF-doxygen/html/search/all_1a.js +175 -174
  109. package/SVF-doxygen/html/search/all_2.js +173 -171
  110. package/SVF-doxygen/html/search/all_3.js +649 -648
  111. package/SVF-doxygen/html/search/all_4.js +230 -230
  112. package/SVF-doxygen/html/search/all_5.js +119 -119
  113. package/SVF-doxygen/html/search/all_6.js +226 -226
  114. package/SVF-doxygen/html/search/all_7.js +1048 -1048
  115. package/SVF-doxygen/html/search/all_8.js +196 -196
  116. package/SVF-doxygen/html/search/all_9.js +605 -605
  117. package/SVF-doxygen/html/search/all_a.js +46 -46
  118. package/SVF-doxygen/html/search/all_b.js +26 -26
  119. package/SVF-doxygen/html/search/all_c.js +115 -115
  120. package/SVF-doxygen/html/search/all_d.js +197 -197
  121. package/SVF-doxygen/html/search/all_e.js +207 -207
  122. package/SVF-doxygen/html/search/all_f.js +116 -116
  123. package/SVF-doxygen/html/search/classes_0.js +26 -26
  124. package/SVF-doxygen/html/search/classes_1.js +9 -9
  125. package/SVF-doxygen/html/search/classes_10.js +74 -73
  126. package/SVF-doxygen/html/search/classes_11.js +15 -15
  127. package/SVF-doxygen/html/search/classes_12.js +2 -2
  128. package/SVF-doxygen/html/search/classes_13.js +10 -10
  129. package/SVF-doxygen/html/search/classes_14.js +14 -14
  130. package/SVF-doxygen/html/search/classes_15.js +1 -1
  131. package/SVF-doxygen/html/search/classes_2.js +81 -81
  132. package/SVF-doxygen/html/search/classes_3.js +37 -37
  133. package/SVF-doxygen/html/search/classes_4.js +9 -9
  134. package/SVF-doxygen/html/search/classes_5.js +28 -28
  135. package/SVF-doxygen/html/search/classes_6.js +104 -104
  136. package/SVF-doxygen/html/search/classes_7.js +34 -34
  137. package/SVF-doxygen/html/search/classes_8.js +57 -57
  138. package/SVF-doxygen/html/search/classes_9.js +1 -1
  139. package/SVF-doxygen/html/search/classes_a.js +12 -12
  140. package/SVF-doxygen/html/search/classes_b.js +29 -29
  141. package/SVF-doxygen/html/search/classes_c.js +6 -6
  142. package/SVF-doxygen/html/search/classes_d.js +18 -18
  143. package/SVF-doxygen/html/search/classes_e.js +36 -36
  144. package/SVF-doxygen/html/search/classes_f.js +25 -25
  145. package/SVF-doxygen/html/search/defines_0.js +3 -3
  146. package/SVF-doxygen/html/search/defines_1.js +2 -2
  147. package/SVF-doxygen/html/search/defines_2.js +30 -30
  148. package/SVF-doxygen/html/search/defines_3.js +20 -20
  149. package/SVF-doxygen/html/search/defines_4.js +2 -2
  150. package/SVF-doxygen/html/search/defines_5.js +4 -4
  151. package/SVF-doxygen/html/search/defines_6.js +2 -2
  152. package/SVF-doxygen/html/search/defines_7.js +5 -5
  153. package/SVF-doxygen/html/search/defines_8.js +11 -11
  154. package/SVF-doxygen/html/search/defines_9.js +9 -9
  155. package/SVF-doxygen/html/search/defines_a.js +2 -2
  156. package/SVF-doxygen/html/search/defines_b.js +1 -1
  157. package/SVF-doxygen/html/search/defines_c.js +3 -3
  158. package/SVF-doxygen/html/search/defines_d.js +2 -2
  159. package/SVF-doxygen/html/search/defines_e.js +7 -7
  160. package/SVF-doxygen/html/search/defines_f.js +3 -3
  161. package/SVF-doxygen/html/search/enums_0.js +3 -3
  162. package/SVF-doxygen/html/search/enums_1.js +2 -2
  163. package/SVF-doxygen/html/search/enums_10.js +1 -1
  164. package/SVF-doxygen/html/search/enums_11.js +1 -1
  165. package/SVF-doxygen/html/search/enums_2.js +8 -8
  166. package/SVF-doxygen/html/search/enums_3.js +1 -1
  167. package/SVF-doxygen/html/search/enums_4.js +3 -3
  168. package/SVF-doxygen/html/search/enums_5.js +1 -1
  169. package/SVF-doxygen/html/search/enums_6.js +2 -2
  170. package/SVF-doxygen/html/search/enums_7.js +2 -2
  171. package/SVF-doxygen/html/search/enums_8.js +4 -4
  172. package/SVF-doxygen/html/search/enums_9.js +1 -1
  173. package/SVF-doxygen/html/search/enums_a.js +1 -1
  174. package/SVF-doxygen/html/search/enums_b.js +7 -7
  175. package/SVF-doxygen/html/search/enums_c.js +1 -1
  176. package/SVF-doxygen/html/search/enums_d.js +4 -4
  177. package/SVF-doxygen/html/search/enums_e.js +2 -2
  178. package/SVF-doxygen/html/search/enums_f.js +4 -4
  179. package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
  180. package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
  181. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  182. package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
  183. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  184. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  185. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  186. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  187. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  188. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  189. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  190. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  191. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  192. package/SVF-doxygen/html/search/enumvalues_7.js +8 -8
  193. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  194. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  195. package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
  196. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  197. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  198. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  199. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  200. package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
  201. package/SVF-doxygen/html/search/files_0.js +14 -13
  202. package/SVF-doxygen/html/search/files_1.js +7 -7
  203. package/SVF-doxygen/html/search/files_10.js +8 -8
  204. package/SVF-doxygen/html/search/files_11.js +8 -8
  205. package/SVF-doxygen/html/search/files_12.js +2 -2
  206. package/SVF-doxygen/html/search/files_2.js +57 -57
  207. package/SVF-doxygen/html/search/files_3.js +14 -14
  208. package/SVF-doxygen/html/search/files_4.js +5 -5
  209. package/SVF-doxygen/html/search/files_5.js +13 -13
  210. package/SVF-doxygen/html/search/files_6.js +9 -9
  211. package/SVF-doxygen/html/search/files_7.js +14 -14
  212. package/SVF-doxygen/html/search/files_8.js +13 -13
  213. package/SVF-doxygen/html/search/files_9.js +18 -18
  214. package/SVF-doxygen/html/search/files_a.js +3 -3
  215. package/SVF-doxygen/html/search/files_b.js +2 -2
  216. package/SVF-doxygen/html/search/files_c.js +20 -20
  217. package/SVF-doxygen/html/search/files_d.js +4 -4
  218. package/SVF-doxygen/html/search/files_e.js +62 -62
  219. package/SVF-doxygen/html/search/files_f.js +8 -8
  220. package/SVF-doxygen/html/search/functions_0.js +13 -13
  221. package/SVF-doxygen/html/search/functions_1.js +364 -364
  222. package/SVF-doxygen/html/search/functions_10.js +140 -140
  223. package/SVF-doxygen/html/search/functions_11.js +140 -139
  224. package/SVF-doxygen/html/search/functions_12.js +289 -288
  225. package/SVF-doxygen/html/search/functions_13.js +72 -59
  226. package/SVF-doxygen/html/search/functions_14.js +39 -39
  227. package/SVF-doxygen/html/search/functions_15.js +71 -71
  228. package/SVF-doxygen/html/search/functions_16.js +32 -32
  229. package/SVF-doxygen/html/search/functions_17.js +3 -3
  230. package/SVF-doxygen/html/search/functions_18.js +175 -174
  231. package/SVF-doxygen/html/search/functions_2.js +91 -89
  232. package/SVF-doxygen/html/search/functions_3.js +262 -261
  233. package/SVF-doxygen/html/search/functions_4.js +78 -78
  234. package/SVF-doxygen/html/search/functions_5.js +53 -53
  235. package/SVF-doxygen/html/search/functions_6.js +60 -60
  236. package/SVF-doxygen/html/search/functions_7.js +857 -857
  237. package/SVF-doxygen/html/search/functions_8.js +148 -148
  238. package/SVF-doxygen/html/search/functions_9.js +421 -421
  239. package/SVF-doxygen/html/search/functions_a.js +30 -30
  240. package/SVF-doxygen/html/search/functions_b.js +2 -2
  241. package/SVF-doxygen/html/search/functions_c.js +25 -25
  242. package/SVF-doxygen/html/search/functions_d.js +79 -79
  243. package/SVF-doxygen/html/search/functions_e.js +35 -35
  244. package/SVF-doxygen/html/search/functions_f.js +56 -56
  245. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  246. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  247. package/SVF-doxygen/html/search/related_0.js +2 -2
  248. package/SVF-doxygen/html/search/related_1.js +2 -2
  249. package/SVF-doxygen/html/search/related_2.js +3 -3
  250. package/SVF-doxygen/html/search/related_3.js +2 -2
  251. package/SVF-doxygen/html/search/related_4.js +2 -2
  252. package/SVF-doxygen/html/search/related_5.js +1 -1
  253. package/SVF-doxygen/html/search/related_6.js +2 -2
  254. package/SVF-doxygen/html/search/related_7.js +4 -4
  255. package/SVF-doxygen/html/search/related_8.js +2 -2
  256. package/SVF-doxygen/html/search/related_9.js +4 -4
  257. package/SVF-doxygen/html/search/related_a.js +19 -19
  258. package/SVF-doxygen/html/search/related_b.js +4 -4
  259. package/SVF-doxygen/html/search/related_c.js +2 -2
  260. package/SVF-doxygen/html/search/related_d.js +12 -12
  261. package/SVF-doxygen/html/search/related_e.js +2 -2
  262. package/SVF-doxygen/html/search/related_f.js +2 -2
  263. package/SVF-doxygen/html/search/typedefs_0.js +19 -19
  264. package/SVF-doxygen/html/search/typedefs_1.js +26 -26
  265. package/SVF-doxygen/html/search/typedefs_10.js +62 -62
  266. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  267. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  268. package/SVF-doxygen/html/search/typedefs_13.js +33 -33
  269. package/SVF-doxygen/html/search/typedefs_14.js +8 -8
  270. package/SVF-doxygen/html/search/typedefs_2.js +129 -129
  271. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  272. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  273. package/SVF-doxygen/html/search/typedefs_5.js +41 -41
  274. package/SVF-doxygen/html/search/typedefs_6.js +56 -56
  275. package/SVF-doxygen/html/search/typedefs_7.js +44 -44
  276. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  277. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  278. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  279. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  280. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  281. package/SVF-doxygen/html/search/typedefs_d.js +14 -14
  282. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  283. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  284. package/SVF-doxygen/html/search/variables_0.js +151 -151
  285. package/SVF-doxygen/html/search/variables_1.js +76 -76
  286. package/SVF-doxygen/html/search/variables_10.js +98 -98
  287. package/SVF-doxygen/html/search/variables_11.js +45 -45
  288. package/SVF-doxygen/html/search/variables_12.js +91 -90
  289. package/SVF-doxygen/html/search/variables_13.js +74 -74
  290. package/SVF-doxygen/html/search/variables_14.js +14 -14
  291. package/SVF-doxygen/html/search/variables_15.js +49 -49
  292. package/SVF-doxygen/html/search/variables_16.js +9 -9
  293. package/SVF-doxygen/html/search/variables_17.js +1 -1
  294. package/SVF-doxygen/html/search/variables_18.js +2 -2
  295. package/SVF-doxygen/html/search/variables_2.js +38 -38
  296. package/SVF-doxygen/html/search/variables_3.js +142 -142
  297. package/SVF-doxygen/html/search/variables_4.js +50 -50
  298. package/SVF-doxygen/html/search/variables_5.js +37 -37
  299. package/SVF-doxygen/html/search/variables_6.js +66 -66
  300. package/SVF-doxygen/html/search/variables_7.js +34 -34
  301. package/SVF-doxygen/html/search/variables_8.js +7 -7
  302. package/SVF-doxygen/html/search/variables_9.js +78 -78
  303. package/SVF-doxygen/html/search/variables_a.js +4 -4
  304. package/SVF-doxygen/html/search/variables_b.js +10 -10
  305. package/SVF-doxygen/html/search/variables_c.js +45 -45
  306. package/SVF-doxygen/html/search/variables_d.js +55 -55
  307. package/SVF-doxygen/html/search/variables_e.js +123 -123
  308. package/SVF-doxygen/html/search/variables_f.js +30 -30
  309. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +118 -118
  310. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01Inverse_3_01SVF_1_1ConstraintNode_01_5_01_4_01_4.html +1 -1
  311. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1ConstraintGraph_01_5_01_4.html +2 -2
  312. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1ConstraintNode_01_5_01_4.html +1 -1
  313. package/build.sh +1 -1
  314. package/package.json +1 -1
  315. package/svf/include/DDA/DDAStat.h +0 -17
  316. package/svf/include/Graphs/ConsG.h +2 -0
  317. package/svf/include/Util/PTAStat.h +19 -1
  318. package/svf/lib/DDA/DDAStat.cpp +0 -3
  319. package/svf/lib/Graphs/ConsG.cpp +20 -0
  320. package/svf/lib/Util/PTAStat.cpp +17 -1
  321. package/svf/lib/WPA/Andersen.cpp +2 -2
  322. package/svf/lib/WPA/AndersenStat.cpp +3 -0
  323. package/svf-llvm/tools/AE/CMakeLists.txt +2 -0
  324. package/svf-llvm/tools/AE/ae.cpp +607 -0
  325. package/svf-llvm/tools/CMakeLists.txt +3 -2
@@ -0,0 +1,738 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.17"/>
7
+ <meta name="viewport" content="width=device-width, initial-scale=1"/>
8
+ <title>Static Value-Flow Analysis: /home/runner/work/SVF/SVF/svf-llvm/tools/AE/ae.cpp Source File</title>
9
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
10
+ <script type="text/javascript" src="jquery.js"></script>
11
+ <script type="text/javascript" src="dynsections.js"></script>
12
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
13
+ <script type="text/javascript" src="search/searchdata.js"></script>
14
+ <script type="text/javascript" src="search/search.js"></script>
15
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
16
+ </head>
17
+ <body>
18
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
19
+ <div id="titlearea">
20
+ <table cellspacing="0" cellpadding="0">
21
+ <tbody>
22
+ <tr style="height: 56px;">
23
+ <td id="projectalign" style="padding-left: 0.5em;">
24
+ <div id="projectname">Static Value-Flow Analysis
25
+ </div>
26
+ </td>
27
+ </tr>
28
+ </tbody>
29
+ </table>
30
+ </div>
31
+ <!-- end header part -->
32
+ <!-- Generated by Doxygen 1.8.17 -->
33
+ <script type="text/javascript">
34
+ /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
35
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
36
+ /* @license-end */
37
+ </script>
38
+ <script type="text/javascript" src="menudata.js"></script>
39
+ <script type="text/javascript" src="menu.js"></script>
40
+ <script type="text/javascript">
41
+ /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
42
+ $(function() {
43
+ initMenu('',true,false,'search.php','Search');
44
+ $(document).ready(function() { init_search(); });
45
+ });
46
+ /* @license-end */</script>
47
+ <div id="main-nav"></div>
48
+ <!-- window showing the filter options -->
49
+ <div id="MSearchSelectWindow"
50
+ onmouseover="return searchBox.OnSearchSelectShow()"
51
+ onmouseout="return searchBox.OnSearchSelectHide()"
52
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
53
+ </div>
54
+
55
+ <!-- iframe showing the search results (closed by default) -->
56
+ <div id="MSearchResultsWindow">
57
+ <iframe src="javascript:void(0)" frameborder="0"
58
+ name="MSearchResults" id="MSearchResults">
59
+ </iframe>
60
+ </div>
61
+
62
+ <div id="nav-path" class="navpath">
63
+ <ul>
64
+ <li class="navelem"><a class="el" href="dir_138019085cb31ab29ffbd100a29df36f.html">svf-llvm</a></li><li class="navelem"><a class="el" href="dir_e5d21102e3a998263c6c7812ac857e9d.html">tools</a></li><li class="navelem"><a class="el" href="dir_454f632bef84d62ecd1cf13bd508acc9.html">AE</a></li> </ul>
65
+ </div>
66
+ </div><!-- top -->
67
+ <div class="header">
68
+ <div class="headertitle">
69
+ <div class="title">ae.cpp</div> </div>
70
+ </div><!--header-->
71
+ <div class="contents">
72
+ <a href="ae_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//</span></div>
73
+ <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// Created by Jiawei Ren on 11/28/23.</span></div>
74
+ <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">//</span></div>
75
+ <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="IntervalExeState_8h.html">AbstractExecution/IntervalExeState.h</a>&quot;</span></div>
76
+ <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="RelExeState_8h.html">AbstractExecution/RelExeState.h</a>&quot;</span></div>
77
+ <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="RelationSolver_8h.html">AbstractExecution/RelationSolver.h</a>&quot;</span></div>
78
+ <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="LLVMUtil_8h.html">SVF-LLVM/LLVMUtil.h</a>&quot;</span></div>
79
+ <div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Z3Expr_8h.html">Util/Z3Expr.h</a>&quot;</span></div>
80
+ <div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div>
81
+ <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></div>
82
+ <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
83
+ <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div>
84
+ <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div>
85
+ <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
86
+ <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="keyword">static</span> <a class="code" href="classOption.html">Option&lt;bool&gt;</a> <a class="code" href="ae_8cpp.html#acf883aea11ed083025935a7257b5967d">SYMABS</a>(</div>
87
+ <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="stringliteral">&quot;symabs&quot;</span>,</div>
88
+ <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="stringliteral">&quot;symbolic abstraction test&quot;</span>,</div>
89
+ <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">false</span></div>
90
+ <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;);</div>
91
+ <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
92
+ <div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html"> 21</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSymblicAbstractionTest.html">SymblicAbstractionTest</a></div>
93
+ <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
94
+ <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">public</span>:</div>
95
+ <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <a class="code" href="classSymblicAbstractionTest.html">SymblicAbstractionTest</a>() = <span class="keywordflow">default</span>;</div>
96
+ <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
97
+ <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; ~<a class="code" href="classSymblicAbstractionTest.html">SymblicAbstractionTest</a>() = <span class="keywordflow">default</span>;</div>
98
+ <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
99
+ <div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html#ab41926db0c2711a98319c8d544c7c7e2"> 28</a></span>&#160; <span class="keyword">static</span> z3::context&amp; <a class="code" href="classSymblicAbstractionTest.html#ab41926db0c2711a98319c8d544c7c7e2">getContext</a>()</div>
100
+ <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; {</div>
101
+ <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>();</div>
102
+ <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; }</div>
103
+ <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
104
+ <div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html#a99d94e268fb6e622a85a9acae737fd6f"> 33</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSymblicAbstractionTest.html#a99d94e268fb6e622a85a9acae737fd6f">test_print</a>()</div>
105
+ <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div>
106
+ <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;hello print\n&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"><a class="line" href="classSymblicAbstractionTest.html#abaa1ae92b79979cfabee1a2b8a284f80"> 38</a></span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> <a class="code" href="classSymblicAbstractionTest.html#abaa1ae92b79979cfabee1a2b8a284f80">RSY_time</a>(<a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; inv, <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi,</div>
110
+ <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="classSVF_1_1RelationSolver.html">RelationSolver</a>&amp; rs)</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; <span class="keyword">auto</span> start_time = std::chrono::high_resolution_clock::now();</div>
113
+ <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resRSY = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a657af041f883e7b1a3f9892453a2c4cf">RSY</a>(inv, phi);</div>
114
+ <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">auto</span> end_time = std::chrono::high_resolution_clock::now();</div>
115
+ <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">auto</span> duration = std::chrono::duration_cast&lt;std::chrono::microseconds&gt;(</div>
116
+ <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; end_time - start_time);</div>
117
+ <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;running time of RSY : &quot;</span> &lt;&lt; duration.count()</div>
118
+ <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; &lt;&lt; <span class="stringliteral">&quot; microseconds\n&quot;</span>;</div>
119
+ <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">return</span> resRSY;</div>
120
+ <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div>
121
+ <div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html#ad6525df45acfeb1c9c31fc54219a4217"> 50</a></span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> <a class="code" href="classSymblicAbstractionTest.html#ad6525df45acfeb1c9c31fc54219a4217">Bilateral_time</a>(<a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; inv, <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi,</div>
122
+ <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="classSVF_1_1RelationSolver.html">RelationSolver</a>&amp; rs)</div>
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; <span class="keyword">auto</span> start_time = std::chrono::high_resolution_clock::now();</div>
125
+ <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBilateral = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a0df88638c5e3f8cd56d34088b96199f1">bilateral</a>(inv, phi);</div>
126
+ <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">auto</span> end_time = std::chrono::high_resolution_clock::now();</div>
127
+ <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">auto</span> duration = std::chrono::duration_cast&lt;std::chrono::microseconds&gt;(</div>
128
+ <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; end_time - start_time);</div>
129
+ <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;running time of Bilateral: &quot;</span> &lt;&lt; duration.count()</div>
130
+ <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; &lt;&lt; <span class="stringliteral">&quot; microseconds\n&quot;</span>;</div>
131
+ <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">return</span> resBilateral;</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"><a class="line" href="classSymblicAbstractionTest.html#a61df4b66ebc9b3eb38d773aa375ee759"> 62</a></span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> <a class="code" href="classSymblicAbstractionTest.html#a61df4b66ebc9b3eb38d773aa375ee759">BS_time</a>(<a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; inv, <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi,</div>
134
+ <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="classSVF_1_1RelationSolver.html">RelationSolver</a>&amp; rs)</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; <span class="keyword">auto</span> start_time = std::chrono::high_resolution_clock::now();</div>
137
+ <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBS = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a7e827609a1d69c6517f1a3eee0326fc3">BS</a>(inv, phi);</div>
138
+ <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">auto</span> end_time = std::chrono::high_resolution_clock::now();</div>
139
+ <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">auto</span> duration = std::chrono::duration_cast&lt;std::chrono::microseconds&gt;(</div>
140
+ <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; end_time - start_time);</div>
141
+ <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;running time of BS : &quot;</span> &lt;&lt; duration.count()</div>
142
+ <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; &lt;&lt; <span class="stringliteral">&quot; microseconds\n&quot;</span>;</div>
143
+ <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">return</span> resBS;</div>
144
+ <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
145
+ <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
146
+ <div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html#acc4852ec2f03ec67e39c67629275cdf5"> 75</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSymblicAbstractionTest.html#acc4852ec2f03ec67e39c67629275cdf5">testRelExeState1_1</a>()</div>
147
+ <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div>
148
+ <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a05dc00b2bd9a8176aae31b6cfffe725d">sucMsg</a>(<span class="stringliteral">&quot;\t SUCCESS :&quot;</span>) &lt;&lt; <span class="stringliteral">&quot;test1_1 start\n&quot;</span>;</div>
149
+ <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> itv;</div>
150
+ <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="classSVF_1_1RelExeState.html">RelExeState</a> relation;</div>
151
+ <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="comment">// var0 := [0, 1];</span></div>
152
+ <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; itv[0] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 1);</div>
153
+ <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; relation[0] = getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
154
+ <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="comment">// var1 := var0 + 1;</span></div>
155
+ <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; relation[1] =</div>
156
+ <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) == getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>) + 1;</div>
157
+ <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; itv[1] = itv[0] + <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1);</div>
158
+ <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="comment">// Test extract sub vars</span></div>
159
+ <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a> res;</div>
160
+ <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; relation.<a class="code" href="classSVF_1_1RelExeState.html#a3393f160508c33e68ebedd042d1d296f">extractSubVars</a>(relation[1], res);</div>
161
+ <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; assert(res == <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a>({0, 1}) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
162
+ <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> inv = itv.<a class="code" href="classSVF_1_1IntervalESBase.html#a2c15de9b10a74fbcb171ff2f328ce7f2">sliceState</a>(res);</div>
163
+ <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="classSVF_1_1RelationSolver.html">RelationSolver</a> rs;</div>
164
+ <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; relExpr = relation[1];</div>
165
+ <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; initExpr = rs.<a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">gamma_hat</a>(inv);</div>
166
+ <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi = (relExpr &amp;&amp; initExpr).simplify();</div>
167
+ <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resRSY = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a657af041f883e7b1a3f9892453a2c4cf">RSY</a>(inv, phi);</div>
168
+ <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBilateral = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a0df88638c5e3f8cd56d34088b96199f1">bilateral</a>(inv, phi);</div>
169
+ <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBS = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a7e827609a1d69c6517f1a3eee0326fc3">BS</a>(inv, phi);</div>
170
+ <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">// 0:[0,1] 1:[1,2]</span></div>
171
+ <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; assert(resRSY == resBS &amp;&amp; resBS == resBilateral &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
172
+ <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> r : resRSY.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
173
+ <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {</div>
174
+ <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; r.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; r.second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
175
+ <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div>
176
+ <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html#a02e3d5f7074c4f77338edc9a7add95d8">IntervalESBase::VarToValMap</a> intendedRes = {{0, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 1)}, {1, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 2)}};</div>
177
+ <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; assert(<a class="code" href="classSVF_1_1IntervalESBase.html#a5fbb3e0a06cb36f020a6de20ebd04ad1">IntervalESBase::eqVarToValMap</a>(resBS.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>(), intendedRes) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
178
+ <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div>
179
+ <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
180
+ <div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html#a0316fb86d1751ecacf5845ca07764f40"> 109</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSymblicAbstractionTest.html#a0316fb86d1751ecacf5845ca07764f40">testRelExeState1_2</a>()</div>
181
+ <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div>
182
+ <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;test1_2 start\n&quot;</span>;</div>
183
+ <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> itv;</div>
184
+ <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="classSVF_1_1RelExeState.html">RelExeState</a> relation;</div>
185
+ <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">// var0 := [0, 1];</span></div>
186
+ <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; relation[0] = getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
187
+ <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; itv[0] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 1);</div>
188
+ <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="comment">// var1 := var0 + 1;</span></div>
189
+ <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; relation[1] =</div>
190
+ <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) == getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>) * 2;</div>
191
+ <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; itv[1] = itv[0] * <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(2);</div>
192
+ <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; </div>
193
+ <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="comment">// Test extract sub vars</span></div>
194
+ <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a> res;</div>
195
+ <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; relation.<a class="code" href="classSVF_1_1RelExeState.html#a3393f160508c33e68ebedd042d1d296f">extractSubVars</a>(relation[1], res);</div>
196
+ <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; assert(res == <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a>({0, 1}) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
197
+ <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> inv = itv.<a class="code" href="classSVF_1_1IntervalESBase.html#a2c15de9b10a74fbcb171ff2f328ce7f2">sliceState</a>(res);</div>
198
+ <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="classSVF_1_1RelationSolver.html">RelationSolver</a> rs;</div>
199
+ <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; relExpr = relation[1];</div>
200
+ <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; initExpr = rs.<a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">gamma_hat</a>(inv);</div>
201
+ <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi = (relExpr &amp;&amp; initExpr).simplify();</div>
202
+ <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resRSY = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a657af041f883e7b1a3f9892453a2c4cf">RSY</a>(inv, phi);</div>
203
+ <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBilateral = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a0df88638c5e3f8cd56d34088b96199f1">bilateral</a>(inv, phi);</div>
204
+ <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBS = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a7e827609a1d69c6517f1a3eee0326fc3">BS</a>(inv, phi);</div>
205
+ <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="comment">// 0:[0,1] 1:[0,2]</span></div>
206
+ <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; assert(resRSY == resBS &amp;&amp; resBS == resBilateral &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
207
+ <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> r : resRSY.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
208
+ <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div>
209
+ <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; r.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; r.second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
210
+ <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div>
211
+ <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html#a02e3d5f7074c4f77338edc9a7add95d8">IntervalESBase::VarToValMap</a> intendedRes = {{0, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 1)}, {1, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 2)}};</div>
212
+ <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; assert(<a class="code" href="classSVF_1_1IntervalESBase.html#a5fbb3e0a06cb36f020a6de20ebd04ad1">IntervalESBase::eqVarToValMap</a>(resBS.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>(), intendedRes) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
213
+ <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div>
214
+ <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; </div>
215
+ <div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html#a32fbde1fbb997be55abfdc308de68fc1"> 144</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSymblicAbstractionTest.html#a32fbde1fbb997be55abfdc308de68fc1">testRelExeState2_1</a>()</div>
216
+ <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; {</div>
217
+ <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;test2_1 start\n&quot;</span>;</div>
218
+ <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> itv;</div>
219
+ <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="classSVF_1_1RelExeState.html">RelExeState</a> relation;</div>
220
+ <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// var0 := [0, 10];</span></div>
221
+ <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; relation[0] = getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
222
+ <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; itv[0] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 10);</div>
223
+ <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// var1 := var0;</span></div>
224
+ <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; relation[1] =</div>
225
+ <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) == getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
226
+ <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; itv[1] = itv[0];</div>
227
+ <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="comment">// var2 := var1 - var0;</span></div>
228
+ <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; relation[2] = getContext().int_const(<span class="stringliteral">&quot;2&quot;</span>) ==</div>
229
+ <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) - getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
230
+ <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; itv[2] = itv[1] - itv[0];</div>
231
+ <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="comment">// Test extract sub vars</span></div>
232
+ <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a> res;</div>
233
+ <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; relation.<a class="code" href="classSVF_1_1RelExeState.html#a3393f160508c33e68ebedd042d1d296f">extractSubVars</a>(relation[2], res);</div>
234
+ <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; assert(res == <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a>({0, 1, 2}) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
235
+ <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> inv = itv.<a class="code" href="classSVF_1_1IntervalESBase.html#a2c15de9b10a74fbcb171ff2f328ce7f2">sliceState</a>(res);</div>
236
+ <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="classSVF_1_1RelationSolver.html">RelationSolver</a> rs;</div>
237
+ <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; relExpr = relation[2] &amp;&amp; relation[1];</div>
238
+ <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; initExpr = rs.<a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">gamma_hat</a>(inv);</div>
239
+ <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi = (relExpr &amp;&amp; initExpr).simplify();</div>
240
+ <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resRSY = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a657af041f883e7b1a3f9892453a2c4cf">RSY</a>(inv, phi);</div>
241
+ <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBilateral = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a0df88638c5e3f8cd56d34088b96199f1">bilateral</a>(inv, phi);</div>
242
+ <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBS = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a7e827609a1d69c6517f1a3eee0326fc3">BS</a>(inv, phi);</div>
243
+ <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="comment">// 0:[0,10] 1:[0,10] 2:[0,0]</span></div>
244
+ <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; assert(resRSY == resBS &amp;&amp; resBS == resBilateral &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
245
+ <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> r : resRSY.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
246
+ <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {</div>
247
+ <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; r.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; r.second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
248
+ <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div>
249
+ <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="comment">// ground truth</span></div>
250
+ <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html#a02e3d5f7074c4f77338edc9a7add95d8">IntervalESBase::VarToValMap</a> intendedRes = {{0, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 10)},</div>
251
+ <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; {1, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 10)},</div>
252
+ <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {2, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 0)}</div>
253
+ <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; };</div>
254
+ <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; assert(<a class="code" href="classSVF_1_1IntervalESBase.html#a5fbb3e0a06cb36f020a6de20ebd04ad1">IntervalESBase::eqVarToValMap</a>(resBS.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>(), intendedRes) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
255
+ <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; }</div>
256
+ <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; </div>
257
+ <div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html#a40b9879a5465f960bbd4fad6654304aa"> 186</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSymblicAbstractionTest.html#a40b9879a5465f960bbd4fad6654304aa">testRelExeState2_2</a>()</div>
258
+ <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div>
259
+ <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;test2_2 start\n&quot;</span>;</div>
260
+ <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> itv;</div>
261
+ <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="classSVF_1_1RelExeState.html">RelExeState</a> relation;</div>
262
+ <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="comment">// var0 := [0, 100];</span></div>
263
+ <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; relation[0] = getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
264
+ <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; itv[0] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 100);</div>
265
+ <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="comment">// var1 := var0;</span></div>
266
+ <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; relation[1] =</div>
267
+ <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) == getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
268
+ <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; itv[1] = itv[0];</div>
269
+ <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="comment">// var2 := var1 - var0;</span></div>
270
+ <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; relation[2] = getContext().int_const(<span class="stringliteral">&quot;2&quot;</span>) ==</div>
271
+ <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) - getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
272
+ <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; itv[2] = itv[1] - itv[0];</div>
273
+ <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; </div>
274
+ <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="comment">// Test extract sub vars</span></div>
275
+ <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a> res;</div>
276
+ <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; relation.<a class="code" href="classSVF_1_1RelExeState.html#a3393f160508c33e68ebedd042d1d296f">extractSubVars</a>(relation[2], res);</div>
277
+ <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; assert(res == <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a>({0, 1, 2}) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
278
+ <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> inv = itv.<a class="code" href="classSVF_1_1IntervalESBase.html#a2c15de9b10a74fbcb171ff2f328ce7f2">sliceState</a>(res);</div>
279
+ <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <a class="code" href="classSVF_1_1RelationSolver.html">RelationSolver</a> rs;</div>
280
+ <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; relExpr = relation[2] &amp;&amp; relation[1];</div>
281
+ <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; initExpr = rs.<a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">gamma_hat</a>(inv);</div>
282
+ <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi = (relExpr &amp;&amp; initExpr).simplify();</div>
283
+ <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resRSY = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a657af041f883e7b1a3f9892453a2c4cf">RSY</a>(inv, phi);</div>
284
+ <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBilateral = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a0df88638c5e3f8cd56d34088b96199f1">bilateral</a>(inv, phi);</div>
285
+ <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBS = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a7e827609a1d69c6517f1a3eee0326fc3">BS</a>(inv, phi);</div>
286
+ <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="comment">// 0:[0,100] 1:[0,100] 2:[0,0]</span></div>
287
+ <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; assert(resRSY == resBS &amp;&amp; resBS == resBilateral &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
288
+ <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> r : resRSY.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
289
+ <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; {</div>
290
+ <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; r.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; r.second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
291
+ <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; }</div>
292
+ <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="comment">// ground truth</span></div>
293
+ <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html#a02e3d5f7074c4f77338edc9a7add95d8">IntervalESBase::VarToValMap</a> intendedRes = {{0, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 100)},</div>
294
+ <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; {1, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 100)},</div>
295
+ <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; {2, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 0)}</div>
296
+ <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; };</div>
297
+ <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; assert(<a class="code" href="classSVF_1_1IntervalESBase.html#a5fbb3e0a06cb36f020a6de20ebd04ad1">IntervalESBase::eqVarToValMap</a>(resBS.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>(), intendedRes) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
298
+ <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; }</div>
299
+ <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; </div>
300
+ <div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html#a7c319b15dd3bd82a7c805ba6dd60beab"> 229</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSymblicAbstractionTest.html#a7c319b15dd3bd82a7c805ba6dd60beab">testRelExeState2_3</a>()</div>
301
+ <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; {</div>
302
+ <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;test2_3 start\n&quot;</span>;</div>
303
+ <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> itv;</div>
304
+ <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="classSVF_1_1RelExeState.html">RelExeState</a> relation;</div>
305
+ <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="comment">// var0 := [0, 1000];</span></div>
306
+ <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; relation[0] = getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
307
+ <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; itv[0] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 1000);</div>
308
+ <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="comment">// var1 := var0;</span></div>
309
+ <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; relation[1] =</div>
310
+ <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) == getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
311
+ <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; itv[1] = itv[0];</div>
312
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// var2 := var1 - var0;</span></div>
313
+ <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; relation[2] = getContext().int_const(<span class="stringliteral">&quot;2&quot;</span>) ==</div>
314
+ <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) - getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
315
+ <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; itv[2] = itv[1] - itv[0];</div>
316
+ <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; </div>
317
+ <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="comment">// Test extract sub vars</span></div>
318
+ <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a> res;</div>
319
+ <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; relation.<a class="code" href="classSVF_1_1RelExeState.html#a3393f160508c33e68ebedd042d1d296f">extractSubVars</a>(relation[2], res);</div>
320
+ <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; assert(res == <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a>({0, 1, 2}) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
321
+ <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> inv = itv.<a class="code" href="classSVF_1_1IntervalESBase.html#a2c15de9b10a74fbcb171ff2f328ce7f2">sliceState</a>(res);</div>
322
+ <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <a class="code" href="classSVF_1_1RelationSolver.html">RelationSolver</a> rs;</div>
323
+ <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; relExpr = relation[2] &amp;&amp; relation[1];</div>
324
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; initExpr = rs.<a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">gamma_hat</a>(inv);</div>
325
+ <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi = (relExpr &amp;&amp; initExpr).simplify();</div>
326
+ <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resRSY = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a657af041f883e7b1a3f9892453a2c4cf">RSY</a>(inv, phi);</div>
327
+ <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBilateral = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a0df88638c5e3f8cd56d34088b96199f1">bilateral</a>(inv, phi);</div>
328
+ <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBS = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a7e827609a1d69c6517f1a3eee0326fc3">BS</a>(inv, phi);</div>
329
+ <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// 0:[0,1000] 1:[0,1000] 2:[0,0]</span></div>
330
+ <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; assert(resRSY == resBS &amp;&amp; resBS == resBilateral &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
331
+ <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> r : resRSY.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
332
+ <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; {</div>
333
+ <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; r.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; r.second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
334
+ <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; }</div>
335
+ <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="comment">// ground truth</span></div>
336
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// ground truth</span></div>
337
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html#a02e3d5f7074c4f77338edc9a7add95d8">IntervalESBase::VarToValMap</a> intendedRes = {{0, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 1000)},</div>
338
+ <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; {1, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 1000)},</div>
339
+ <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; {2, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 0)}</div>
340
+ <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; };</div>
341
+ <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; assert(<a class="code" href="classSVF_1_1IntervalESBase.html#a5fbb3e0a06cb36f020a6de20ebd04ad1">IntervalESBase::eqVarToValMap</a>(resBS.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>(), intendedRes) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
342
+ <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; }</div>
343
+ <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; </div>
344
+ <div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html#a2e3d2a2d9a78fffa641523a2e4809c02"> 273</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSymblicAbstractionTest.html#a2e3d2a2d9a78fffa641523a2e4809c02">testRelExeState2_4</a>()</div>
345
+ <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; {</div>
346
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;test2_4 start\n&quot;</span>;</div>
347
+ <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> itv;</div>
348
+ <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <a class="code" href="classSVF_1_1RelExeState.html">RelExeState</a> relation;</div>
349
+ <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="comment">// var0 := [0, 10000];</span></div>
350
+ <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; relation[0] = getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
351
+ <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; itv[0] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 10000);</div>
352
+ <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="comment">// var1 := var0;</span></div>
353
+ <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; relation[1] =</div>
354
+ <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) == getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
355
+ <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; itv[1] = itv[0];</div>
356
+ <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="comment">// var2 := var1 - var0;</span></div>
357
+ <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; relation[2] = getContext().int_const(<span class="stringliteral">&quot;2&quot;</span>) ==</div>
358
+ <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) - getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
359
+ <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; itv[2] = itv[1] - itv[0];</div>
360
+ <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; </div>
361
+ <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="comment">// Test extract sub vars</span></div>
362
+ <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a> res;</div>
363
+ <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; relation.<a class="code" href="classSVF_1_1RelExeState.html#a3393f160508c33e68ebedd042d1d296f">extractSubVars</a>(relation[2], res);</div>
364
+ <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; assert(res == <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a>({0, 1, 2}) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
365
+ <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> inv = itv.<a class="code" href="classSVF_1_1IntervalESBase.html#a2c15de9b10a74fbcb171ff2f328ce7f2">sliceState</a>(res);</div>
366
+ <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <a class="code" href="classSVF_1_1RelationSolver.html">RelationSolver</a> rs;</div>
367
+ <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; relExpr = relation[2] &amp;&amp; relation[1];</div>
368
+ <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; initExpr = rs.<a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">gamma_hat</a>(inv);</div>
369
+ <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi = (relExpr &amp;&amp; initExpr).simplify();</div>
370
+ <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resRSY = RSY_time(inv, phi, rs);</div>
371
+ <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBilateral = Bilateral_time(inv, phi, rs);</div>
372
+ <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBS = BS_time(inv, phi, rs);</div>
373
+ <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="comment">// 0:[0,10000] 1:[0,10000] 2:[0,0]</span></div>
374
+ <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; assert(resRSY == resBS &amp;&amp; resBS == resBilateral &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
375
+ <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> r : resRSY.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
376
+ <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; {</div>
377
+ <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; r.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; r.second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
378
+ <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div>
379
+ <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="comment">// ground truth</span></div>
380
+ <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="comment">// ground truth</span></div>
381
+ <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html#a02e3d5f7074c4f77338edc9a7add95d8">IntervalESBase::VarToValMap</a> intendedRes = {{0, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 10000)},</div>
382
+ <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; {1, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 10000)},</div>
383
+ <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {2, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 0)}</div>
384
+ <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; };</div>
385
+ <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; assert(<a class="code" href="classSVF_1_1IntervalESBase.html#a5fbb3e0a06cb36f020a6de20ebd04ad1">IntervalESBase::eqVarToValMap</a>(resBS.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>(), intendedRes) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
386
+ <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div>
387
+ <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; </div>
388
+ <div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html#aaba97f696f9518c31af8ace984b39bcf"> 317</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSymblicAbstractionTest.html#aaba97f696f9518c31af8ace984b39bcf">testRelExeState2_5</a>()</div>
389
+ <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; {</div>
390
+ <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;test2_5 start\n&quot;</span>;</div>
391
+ <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> itv;</div>
392
+ <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <a class="code" href="classSVF_1_1RelExeState.html">RelExeState</a> relation;</div>
393
+ <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="comment">// var0 := [0, 100000];</span></div>
394
+ <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; relation[0] = getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
395
+ <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; itv[0] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 100000);</div>
396
+ <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="comment">// var1 := var0;</span></div>
397
+ <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; relation[1] =</div>
398
+ <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) == getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
399
+ <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; itv[1] = itv[0];</div>
400
+ <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="comment">// var2 := var1 - var0;</span></div>
401
+ <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; relation[2] = getContext().int_const(<span class="stringliteral">&quot;2&quot;</span>) ==</div>
402
+ <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) - getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
403
+ <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; itv[2] = itv[1] - itv[0];</div>
404
+ <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; </div>
405
+ <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="comment">// Test extract sub vars</span></div>
406
+ <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a> res;</div>
407
+ <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; relation.<a class="code" href="classSVF_1_1RelExeState.html#a3393f160508c33e68ebedd042d1d296f">extractSubVars</a>(relation[2], res);</div>
408
+ <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; assert(res == <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a>({0, 1, 2}) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
409
+ <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> inv = itv.<a class="code" href="classSVF_1_1IntervalESBase.html#a2c15de9b10a74fbcb171ff2f328ce7f2">sliceState</a>(res);</div>
410
+ <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <a class="code" href="classSVF_1_1RelationSolver.html">RelationSolver</a> rs;</div>
411
+ <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; relExpr = relation[2] &amp;&amp; relation[1];</div>
412
+ <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; initExpr = rs.<a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">gamma_hat</a>(inv);</div>
413
+ <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi = (relExpr &amp;&amp; initExpr).simplify();</div>
414
+ <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resRSY = RSY_time(inv, phi, rs);</div>
415
+ <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBilateral = Bilateral_time(inv, phi, rs);</div>
416
+ <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBS = BS_time(inv, phi, rs);</div>
417
+ <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="comment">// 0:[0,100000] 1:[0,100000] 2:[0,0]</span></div>
418
+ <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; assert(resRSY == resBS &amp;&amp; resBS == resBilateral &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
419
+ <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> r : resRSY.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
420
+ <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; {</div>
421
+ <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; r.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; r.second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
422
+ <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; }</div>
423
+ <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="comment">// ground truth</span></div>
424
+ <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="comment">// ground truth</span></div>
425
+ <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html#a02e3d5f7074c4f77338edc9a7add95d8">IntervalESBase::VarToValMap</a> intendedRes = {{0, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 100000)},</div>
426
+ <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; {1, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 100000)},</div>
427
+ <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; {2, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 0)}</div>
428
+ <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; };</div>
429
+ <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; assert(<a class="code" href="classSVF_1_1IntervalESBase.html#a5fbb3e0a06cb36f020a6de20ebd04ad1">IntervalESBase::eqVarToValMap</a>(resBS.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>(), intendedRes) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
430
+ <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; }</div>
431
+ <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; </div>
432
+ <div class="line"><a name="l00361"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html#ac3016e7a57f46af01d20de7e785a4cce"> 361</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSymblicAbstractionTest.html#ac3016e7a57f46af01d20de7e785a4cce">testRelExeState3_1</a>()</div>
433
+ <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; {</div>
434
+ <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;test3_1 start\n&quot;</span>;</div>
435
+ <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> itv;</div>
436
+ <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="classSVF_1_1RelExeState.html">RelExeState</a> relation;</div>
437
+ <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="comment">// var0 := [1, 10];</span></div>
438
+ <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; relation[0] = getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
439
+ <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; itv[0] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 10);</div>
440
+ <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="comment">// var1 := var0;</span></div>
441
+ <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; relation[1] =</div>
442
+ <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) == getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
443
+ <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; itv[1] = itv[0];</div>
444
+ <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="comment">// var2 := var1 / var0;</span></div>
445
+ <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; relation[2] = getContext().int_const(<span class="stringliteral">&quot;2&quot;</span>) ==</div>
446
+ <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) / getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
447
+ <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; itv[2] = itv[1] / itv[0];</div>
448
+ <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="comment">// Test extract sub vars</span></div>
449
+ <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a> res;</div>
450
+ <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; relation.<a class="code" href="classSVF_1_1RelExeState.html#a3393f160508c33e68ebedd042d1d296f">extractSubVars</a>(relation[2], res);</div>
451
+ <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; assert(res == <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a>({0, 1, 2}) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
452
+ <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> inv = itv.<a class="code" href="classSVF_1_1IntervalESBase.html#a2c15de9b10a74fbcb171ff2f328ce7f2">sliceState</a>(res);</div>
453
+ <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <a class="code" href="classSVF_1_1RelationSolver.html">RelationSolver</a> rs;</div>
454
+ <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; relExpr = relation[2] &amp;&amp; relation[1];</div>
455
+ <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; initExpr = rs.<a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">gamma_hat</a>(inv);</div>
456
+ <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi = (relExpr &amp;&amp; initExpr).simplify();</div>
457
+ <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resRSY = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a657af041f883e7b1a3f9892453a2c4cf">RSY</a>(inv, phi);</div>
458
+ <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBilateral = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a0df88638c5e3f8cd56d34088b96199f1">bilateral</a>(inv, phi);</div>
459
+ <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBS = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a7e827609a1d69c6517f1a3eee0326fc3">BS</a>(inv, phi);</div>
460
+ <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="comment">// 0:[1,10] 1:[1,10] 2:[1,1]</span></div>
461
+ <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; assert(resRSY == resBS &amp;&amp; resBS == resBilateral &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
462
+ <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> r : resRSY.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
463
+ <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; {</div>
464
+ <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; r.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; r.second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
465
+ <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; }</div>
466
+ <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="comment">// ground truth</span></div>
467
+ <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html#a02e3d5f7074c4f77338edc9a7add95d8">IntervalESBase::VarToValMap</a> intendedRes = {{0, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 10)},</div>
468
+ <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; {1, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 10)},</div>
469
+ <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; {2, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 1)}</div>
470
+ <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; };</div>
471
+ <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; assert(<a class="code" href="classSVF_1_1IntervalESBase.html#a5fbb3e0a06cb36f020a6de20ebd04ad1">IntervalESBase::eqVarToValMap</a>(resBS.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>(), intendedRes) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
472
+ <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; }</div>
473
+ <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; </div>
474
+ <div class="line"><a name="l00403"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html#a56541a5e9bc61f092ee3c48700f00bf7"> 403</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSymblicAbstractionTest.html#a56541a5e9bc61f092ee3c48700f00bf7">testRelExeState3_2</a>()</div>
475
+ <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; {</div>
476
+ <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;test3_2 start\n&quot;</span>;</div>
477
+ <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> itv;</div>
478
+ <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="classSVF_1_1RelExeState.html">RelExeState</a> relation;</div>
479
+ <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="comment">// var0 := [1, 1000];</span></div>
480
+ <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; relation[0] = getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
481
+ <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; itv[0] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 1000);</div>
482
+ <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="comment">// var1 := var0;</span></div>
483
+ <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; relation[1] =</div>
484
+ <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) == getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
485
+ <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; itv[1] = itv[0];</div>
486
+ <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="comment">// var2 := var1 / var0;</span></div>
487
+ <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; relation[2] = getContext().int_const(<span class="stringliteral">&quot;2&quot;</span>) ==</div>
488
+ <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) / getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
489
+ <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; itv[2] = itv[1] / itv[0];</div>
490
+ <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="comment">// Test extract sub vars</span></div>
491
+ <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a> res;</div>
492
+ <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; relation.<a class="code" href="classSVF_1_1RelExeState.html#a3393f160508c33e68ebedd042d1d296f">extractSubVars</a>(relation[2], res);</div>
493
+ <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; assert(res == <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a>({0, 1, 2}) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
494
+ <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> inv = itv.<a class="code" href="classSVF_1_1IntervalESBase.html#a2c15de9b10a74fbcb171ff2f328ce7f2">sliceState</a>(res);</div>
495
+ <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="classSVF_1_1RelationSolver.html">RelationSolver</a> rs;</div>
496
+ <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; relExpr = relation[2] &amp;&amp; relation[1];</div>
497
+ <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; initExpr = rs.<a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">gamma_hat</a>(inv);</div>
498
+ <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi = (relExpr &amp;&amp; initExpr).simplify();</div>
499
+ <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resRSY = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a657af041f883e7b1a3f9892453a2c4cf">RSY</a>(inv, phi);</div>
500
+ <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBilateral = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a0df88638c5e3f8cd56d34088b96199f1">bilateral</a>(inv, phi);</div>
501
+ <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBS = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a7e827609a1d69c6517f1a3eee0326fc3">BS</a>(inv, phi);</div>
502
+ <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="comment">// 0:[1,1000] 1:[1,1000] 2:[1,1]</span></div>
503
+ <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; assert(resRSY == resBS &amp;&amp; resBS == resBilateral &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
504
+ <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> r : resRSY.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
505
+ <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; {</div>
506
+ <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; r.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; r.second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
507
+ <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; }</div>
508
+ <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="comment">// ground truth</span></div>
509
+ <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html#a02e3d5f7074c4f77338edc9a7add95d8">IntervalESBase::VarToValMap</a> intendedRes = {{0, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 1000)},</div>
510
+ <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; {1, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 1000)},</div>
511
+ <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; {2, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 1)}</div>
512
+ <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; };</div>
513
+ <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; assert(<a class="code" href="classSVF_1_1IntervalESBase.html#a5fbb3e0a06cb36f020a6de20ebd04ad1">IntervalESBase::eqVarToValMap</a>(resBS.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>(), intendedRes) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
514
+ <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; }</div>
515
+ <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; </div>
516
+ <div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html#a7c87dfedc9c7b32df42f14334bc732b0"> 445</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSymblicAbstractionTest.html#a7c87dfedc9c7b32df42f14334bc732b0">testRelExeState3_3</a>()</div>
517
+ <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; {</div>
518
+ <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;test3_3 start\n&quot;</span>;</div>
519
+ <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> itv;</div>
520
+ <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <a class="code" href="classSVF_1_1RelExeState.html">RelExeState</a> relation;</div>
521
+ <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="comment">// var0 := [1, 10000];</span></div>
522
+ <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; relation[0] = getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
523
+ <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; itv[0] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 10000);</div>
524
+ <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="comment">// var1 := var0;</span></div>
525
+ <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; relation[1] =</div>
526
+ <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) == getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
527
+ <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; itv[1] = itv[0];</div>
528
+ <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="comment">// var2 := var1 / var0;</span></div>
529
+ <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; relation[2] = getContext().int_const(<span class="stringliteral">&quot;2&quot;</span>) ==</div>
530
+ <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) / getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
531
+ <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; itv[2] = itv[1] / itv[0];</div>
532
+ <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="comment">// Test extract sub vars</span></div>
533
+ <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a> res;</div>
534
+ <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; relation.<a class="code" href="classSVF_1_1RelExeState.html#a3393f160508c33e68ebedd042d1d296f">extractSubVars</a>(relation[2], res);</div>
535
+ <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; assert(res == <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a>({0, 1, 2}) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
536
+ <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> inv = itv.<a class="code" href="classSVF_1_1IntervalESBase.html#a2c15de9b10a74fbcb171ff2f328ce7f2">sliceState</a>(res);</div>
537
+ <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <a class="code" href="classSVF_1_1RelationSolver.html">RelationSolver</a> rs;</div>
538
+ <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; relExpr = relation[2] &amp;&amp; relation[1];</div>
539
+ <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; initExpr = rs.<a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">gamma_hat</a>(inv);</div>
540
+ <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi = (relExpr &amp;&amp; initExpr).simplify();</div>
541
+ <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resRSY = RSY_time(inv, phi, rs);</div>
542
+ <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBilateral = Bilateral_time(inv, phi, rs);</div>
543
+ <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBS = BS_time(inv, phi, rs);</div>
544
+ <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="comment">// 0:[1,10000] 1:[1,10000] 2:[1,1]</span></div>
545
+ <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; assert(resRSY == resBS &amp;&amp; resBS == resBilateral &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
546
+ <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> r : resRSY.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
547
+ <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; {</div>
548
+ <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; r.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; r.second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
549
+ <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</div>
550
+ <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="comment">// ground truth</span></div>
551
+ <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html#a02e3d5f7074c4f77338edc9a7add95d8">IntervalESBase::VarToValMap</a> intendedRes =</div>
552
+ <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, IntervalValue&gt;</a>({{0, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 10000)},</div>
553
+ <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; {1, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 10000)},</div>
554
+ <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; {2, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 1)}});</div>
555
+ <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; }</div>
556
+ <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; </div>
557
+ <div class="line"><a name="l00486"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html#ae7b7853f6a6a3cbc2c04d3dfea83ad43"> 486</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSymblicAbstractionTest.html#ae7b7853f6a6a3cbc2c04d3dfea83ad43">testRelExeState3_4</a>()</div>
558
+ <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; {</div>
559
+ <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;test3_4 start\n&quot;</span>;</div>
560
+ <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> itv;</div>
561
+ <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <a class="code" href="classSVF_1_1RelExeState.html">RelExeState</a> relation;</div>
562
+ <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="comment">// var0 := [1, 100000];</span></div>
563
+ <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; relation[0] = getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
564
+ <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; itv[0] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 100000);</div>
565
+ <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="comment">// var1 := var0;</span></div>
566
+ <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; relation[1] =</div>
567
+ <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) == getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
568
+ <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; itv[1] = itv[0];</div>
569
+ <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="comment">// var2 := var1 / var0;</span></div>
570
+ <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; relation[2] = getContext().int_const(<span class="stringliteral">&quot;2&quot;</span>) ==</div>
571
+ <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) / getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
572
+ <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; itv[2] = itv[1] / itv[0];</div>
573
+ <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="comment">// Test extract sub vars</span></div>
574
+ <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a> res;</div>
575
+ <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; relation.<a class="code" href="classSVF_1_1RelExeState.html#a3393f160508c33e68ebedd042d1d296f">extractSubVars</a>(relation[2], res);</div>
576
+ <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; assert(res == <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a>({0, 1, 2}) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
577
+ <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> inv = itv.<a class="code" href="classSVF_1_1IntervalESBase.html#a2c15de9b10a74fbcb171ff2f328ce7f2">sliceState</a>(res);</div>
578
+ <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <a class="code" href="classSVF_1_1RelationSolver.html">RelationSolver</a> rs;</div>
579
+ <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; relExpr = relation[2] &amp;&amp; relation[1];</div>
580
+ <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; initExpr = rs.<a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">gamma_hat</a>(inv);</div>
581
+ <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi = (relExpr &amp;&amp; initExpr).simplify();</div>
582
+ <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resRSY = RSY_time(inv, phi, rs);</div>
583
+ <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBilateral = Bilateral_time(inv, phi, rs);</div>
584
+ <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBS = BS_time(inv, phi, rs);</div>
585
+ <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="comment">// 0:[1,100000] 1:[1,100000] 2:[1,1]</span></div>
586
+ <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; assert(resRSY == resBS &amp;&amp; resBS == resBilateral &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
587
+ <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> r : resRSY.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
588
+ <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; {</div>
589
+ <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; r.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; r.second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
590
+ <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div>
591
+ <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="comment">// ground truth</span></div>
592
+ <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html#a02e3d5f7074c4f77338edc9a7add95d8">IntervalESBase::VarToValMap</a> intendedRes = {{0, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 100000)},</div>
593
+ <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; {1, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 100000)},</div>
594
+ <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; {2, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1, 1)}</div>
595
+ <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; };</div>
596
+ <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; assert(<a class="code" href="classSVF_1_1IntervalESBase.html#a5fbb3e0a06cb36f020a6de20ebd04ad1">IntervalESBase::eqVarToValMap</a>(resBS.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>(), intendedRes) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
597
+ <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; }</div>
598
+ <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; </div>
599
+ <div class="line"><a name="l00528"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html#a986b2278abd2ee64507fa769a66c999c"> 528</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSymblicAbstractionTest.html#a986b2278abd2ee64507fa769a66c999c">testRelExeState4_1</a>()</div>
600
+ <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; {</div>
601
+ <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;test4_1 start\n&quot;</span>;</div>
602
+ <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> itv;</div>
603
+ <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <a class="code" href="classSVF_1_1RelExeState.html">RelExeState</a> relation;</div>
604
+ <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="comment">// var0 := [0, 10];</span></div>
605
+ <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; relation[0] = getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
606
+ <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; itv[0] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 10);</div>
607
+ <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="comment">// var1 := var0;</span></div>
608
+ <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; relation[1] =</div>
609
+ <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) == getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
610
+ <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; itv[1] = itv[0];</div>
611
+ <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="comment">// var2 := var1 / var0;</span></div>
612
+ <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; relation[2] = getContext().int_const(<span class="stringliteral">&quot;2&quot;</span>) ==</div>
613
+ <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; getContext().int_const(<span class="stringliteral">&quot;1&quot;</span>) / getContext().int_const(<span class="stringliteral">&quot;0&quot;</span>);</div>
614
+ <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; itv[2] = itv[1] / itv[0];</div>
615
+ <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="comment">// Test extract sub vars</span></div>
616
+ <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a> res;</div>
617
+ <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; relation.<a class="code" href="classSVF_1_1RelExeState.html#a3393f160508c33e68ebedd042d1d296f">extractSubVars</a>(relation[2], res);</div>
618
+ <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; assert(res == <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;u32_t&gt;</a>({0, 1, 2}) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
619
+ <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> inv = itv.<a class="code" href="classSVF_1_1IntervalESBase.html#a2c15de9b10a74fbcb171ff2f328ce7f2">sliceState</a>(res);</div>
620
+ <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <a class="code" href="classSVF_1_1RelationSolver.html">RelationSolver</a> rs;</div>
621
+ <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; relExpr = relation[2] &amp;&amp; relation[1];</div>
622
+ <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; initExpr = rs.<a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">gamma_hat</a>(inv);</div>
623
+ <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi = (relExpr &amp;&amp; initExpr).simplify();</div>
624
+ <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="comment">// IntervalExeState resRSY = rs.RSY(inv, phi);</span></div>
625
+ <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;rsy done\n&quot;</span>;</div>
626
+ <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="comment">// IntervalExeState resBilateral = rs.bilateral(inv, phi);</span></div>
627
+ <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;bilateral done\n&quot;</span>;</div>
628
+ <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> resBS = rs.<a class="code" href="classSVF_1_1RelationSolver.html#a7e827609a1d69c6517f1a3eee0326fc3">BS</a>(inv, phi);</div>
629
+ <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;bs done\n&quot;</span>;</div>
630
+ <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="comment">// 0:[0,10] 1:[0,10] 2:[-00,+00]</span></div>
631
+ <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="comment">// assert(resRSY == resBS &amp;&amp; resBS == resBilateral);</span></div>
632
+ <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> r : resBS.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
633
+ <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; {</div>
634
+ <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; r.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; r.second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
635
+ <div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; }</div>
636
+ <div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="comment">// ground truth</span></div>
637
+ <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html#a02e3d5f7074c4f77338edc9a7add95d8">IntervalESBase::VarToValMap</a> intendedRes = {{0, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 10)},</div>
638
+ <div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; {1, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 10)},</div>
639
+ <div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; {2, <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(<a class="code" href="classSVF_1_1IntervalValue.html#a43f48c744f7bda0dc689b8f186449371">IntervalValue::minus_infinity</a>(), <a class="code" href="classSVF_1_1IntervalValue.html#a739ab04e16ec1156be71b29d49998a4f">IntervalValue::plus_infinity</a>())}</div>
640
+ <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; };</div>
641
+ <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; assert(<a class="code" href="classSVF_1_1IntervalESBase.html#a5fbb3e0a06cb36f020a6de20ebd04ad1">IntervalESBase::eqVarToValMap</a>(resBS.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>(), intendedRes) &amp;&amp; <span class="stringliteral">&quot;inconsistency occurs&quot;</span>);</div>
642
+ <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; }</div>
643
+ <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; </div>
644
+ <div class="line"><a name="l00573"></a><span class="lineno"><a class="line" href="classSymblicAbstractionTest.html#a66155c2b52131a7782382d8e5da560fc"> 573</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSymblicAbstractionTest.html#a66155c2b52131a7782382d8e5da560fc">testsValidation</a>()</div>
645
+ <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; {</div>
646
+ <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <a class="code" href="classSymblicAbstractionTest.html">SymblicAbstractionTest</a> saTest;</div>
647
+ <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; saTest.<a class="code" href="classSymblicAbstractionTest.html#acc4852ec2f03ec67e39c67629275cdf5">testRelExeState1_1</a>();</div>
648
+ <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; saTest.<a class="code" href="classSymblicAbstractionTest.html#a0316fb86d1751ecacf5845ca07764f40">testRelExeState1_2</a>();</div>
649
+ <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; </div>
650
+ <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; saTest.<a class="code" href="classSymblicAbstractionTest.html#a32fbde1fbb997be55abfdc308de68fc1">testRelExeState2_1</a>();</div>
651
+ <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; saTest.<a class="code" href="classSymblicAbstractionTest.html#a40b9879a5465f960bbd4fad6654304aa">testRelExeState2_2</a>();</div>
652
+ <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; saTest.<a class="code" href="classSymblicAbstractionTest.html#a7c319b15dd3bd82a7c805ba6dd60beab">testRelExeState2_3</a>();</div>
653
+ <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;<span class="comment">// saTest.testRelExeState2_4(); /// 10000</span></div>
654
+ <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;<span class="comment">// saTest.testRelExeState2_5(); /// 100000</span></div>
655
+ <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; </div>
656
+ <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; saTest.<a class="code" href="classSymblicAbstractionTest.html#ac3016e7a57f46af01d20de7e785a4cce">testRelExeState3_1</a>();</div>
657
+ <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; saTest.<a class="code" href="classSymblicAbstractionTest.html#a56541a5e9bc61f092ee3c48700f00bf7">testRelExeState3_2</a>();</div>
658
+ <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;<span class="comment">// saTest.testRelExeState3_3(); /// 10000</span></div>
659
+ <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;<span class="comment">// saTest.testRelExeState3_4(); /// 100000</span></div>
660
+ <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; </div>
661
+ <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;start top\n&quot;</span>;</div>
662
+ <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; saTest.<a class="code" href="classSymblicAbstractionTest.html#a986b2278abd2ee64507fa769a66c999c">testRelExeState4_1</a>(); </div>
663
+ <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; }</div>
664
+ <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;};</div>
665
+ <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; </div>
666
+ <div class="line"><a name="l00595"></a><span class="lineno"><a class="line" href="ae_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627"> 595</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="ae_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>** argv)</div>
667
+ <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;{</div>
668
+ <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; std::vector&lt;std::string&gt; moduleNameVec;</div>
669
+ <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; moduleNameVec = <a class="code" href="classOptionBase.html#a4fb6c6e4a1754d702c6c1730f54457e5">OptionBase::parseOptions</a>(</div>
670
+ <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; argc, argv, <span class="stringliteral">&quot;Source-Sink Bug Detector&quot;</span>, <span class="stringliteral">&quot;[options] &lt;input-bitcode...&gt;&quot;</span></div>
671
+ <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; );</div>
672
+ <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="ae_8cpp.html#acf883aea11ed083025935a7257b5967d">SYMABS</a>())</div>
673
+ <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; {</div>
674
+ <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <a class="code" href="classSymblicAbstractionTest.html">SymblicAbstractionTest</a> saTest;</div>
675
+ <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; saTest.<a class="code" href="classSymblicAbstractionTest.html#a66155c2b52131a7782382d8e5da560fc">testsValidation</a>();</div>
676
+ <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; }</div>
677
+ <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">return</span> 0;</div>
678
+ <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;}</div>
679
+ </div><!-- fragment --></div><!-- contents -->
680
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_a40b9879a5465f960bbd4fad6654304aa"><div class="ttname"><a href="classSymblicAbstractionTest.html#a40b9879a5465f960bbd4fad6654304aa">SymblicAbstractionTest::testRelExeState2_2</a></div><div class="ttdeci">void testRelExeState2_2()</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00186">ae.cpp:186</a></div></div>
681
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_a56541a5e9bc61f092ee3c48700f00bf7"><div class="ttname"><a href="classSymblicAbstractionTest.html#a56541a5e9bc61f092ee3c48700f00bf7">SymblicAbstractionTest::testRelExeState3_2</a></div><div class="ttdeci">void testRelExeState3_2()</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00403">ae.cpp:403</a></div></div>
682
+ <div class="ttc" id="aclassSVF_1_1IntervalValue_html_a739ab04e16ec1156be71b29d49998a4f"><div class="ttname"><a href="classSVF_1_1IntervalValue.html#a739ab04e16ec1156be71b29d49998a4f">SVF::IntervalValue::plus_infinity</a></div><div class="ttdeci">static NumericLiteral plus_infinity()</div><div class="ttdoc">Get plus infinity +oo.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00072">IntervalValue.h:72</a></div></div>
683
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_acc4852ec2f03ec67e39c67629275cdf5"><div class="ttname"><a href="classSymblicAbstractionTest.html#acc4852ec2f03ec67e39c67629275cdf5">SymblicAbstractionTest::testRelExeState1_1</a></div><div class="ttdeci">void testRelExeState1_1()</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00075">ae.cpp:75</a></div></div>
684
+ <div class="ttc" id="aRelExeState_8h_html"><div class="ttname"><a href="RelExeState_8h.html">RelExeState.h</a></div></div>
685
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_ab41926db0c2711a98319c8d544c7c7e2"><div class="ttname"><a href="classSymblicAbstractionTest.html#ab41926db0c2711a98319c8d544c7c7e2">SymblicAbstractionTest::getContext</a></div><div class="ttdeci">static z3::context &amp; getContext()</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00028">ae.cpp:28</a></div></div>
686
+ <div class="ttc" id="aclassSVF_1_1RelationSolver_html_a0df88638c5e3f8cd56d34088b96199f1"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#a0df88638c5e3f8cd56d34088b96199f1">SVF::RelationSolver::bilateral</a></div><div class="ttdeci">IntervalESBase bilateral(const IntervalESBase &amp;domain, const Z3Expr &amp;phi, u32_t descend_check=0)</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00033">RelationSolver.cpp:33</a></div></div>
687
+ <div class="ttc" id="aclassSymblicAbstractionTest_html"><div class="ttname"><a href="classSymblicAbstractionTest.html">SymblicAbstractionTest</a></div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00021">ae.cpp:21</a></div></div>
688
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_a0316fb86d1751ecacf5845ca07764f40"><div class="ttname"><a href="classSymblicAbstractionTest.html#a0316fb86d1751ecacf5845ca07764f40">SymblicAbstractionTest::testRelExeState1_2</a></div><div class="ttdeci">void testRelExeState1_2()</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00109">ae.cpp:109</a></div></div>
689
+ <div class="ttc" id="aLLVMUtil_8h_html"><div class="ttname"><a href="LLVMUtil_8h.html">LLVMUtil.h</a></div></div>
690
+ <div class="ttc" id="anamespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set&lt; Key, Hash, KeyEqual, Allocator &gt; Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00097">SVFType.h:97</a></div></div>
691
+ <div class="ttc" id="anamespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00065">BasicTypes.h:65</a></div></div>
692
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_a2e3d2a2d9a78fffa641523a2e4809c02"><div class="ttname"><a href="classSymblicAbstractionTest.html#a2e3d2a2d9a78fffa641523a2e4809c02">SymblicAbstractionTest::testRelExeState2_4</a></div><div class="ttdeci">void testRelExeState2_4()</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00273">ae.cpp:273</a></div></div>
693
+ <div class="ttc" id="aclassSVF_1_1RelationSolver_html_a7e827609a1d69c6517f1a3eee0326fc3"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#a7e827609a1d69c6517f1a3eee0326fc3">SVF::RelationSolver::BS</a></div><div class="ttdeci">IntervalESBase BS(const IntervalESBase &amp;domain, const Z3Expr &amp;phi)</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00266">RelationSolver.cpp:266</a></div></div>
694
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_ac3016e7a57f46af01d20de7e785a4cce"><div class="ttname"><a href="classSymblicAbstractionTest.html#ac3016e7a57f46af01d20de7e785a4cce">SymblicAbstractionTest::testRelExeState3_1</a></div><div class="ttdeci">void testRelExeState3_1()</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00361">ae.cpp:361</a></div></div>
695
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_aaba97f696f9518c31af8ace984b39bcf"><div class="ttname"><a href="classSymblicAbstractionTest.html#aaba97f696f9518c31af8ace984b39bcf">SymblicAbstractionTest::testRelExeState2_5</a></div><div class="ttdeci">void testRelExeState2_5()</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00317">ae.cpp:317</a></div></div>
696
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_a7c87dfedc9c7b32df42f14334bc732b0"><div class="ttname"><a href="classSymblicAbstractionTest.html#a7c87dfedc9c7b32df42f14334bc732b0">SymblicAbstractionTest::testRelExeState3_3</a></div><div class="ttdeci">void testRelExeState3_3()</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00445">ae.cpp:445</a></div></div>
697
+ <div class="ttc" id="aclassSVF_1_1Z3Expr_html_acfdff582a0188678c10939165a40df30"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">SVF::Z3Expr::getContext</a></div><div class="ttdeci">static z3::context &amp; getContext()</div><div class="ttdoc">Get z3 context, singleton design here to make sure we only have one context.</div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8cpp_source.html#l00066">Z3Expr.cpp:66</a></div></div>
698
+ <div class="ttc" id="aclassSVF_1_1IntervalValue_html_a43f48c744f7bda0dc689b8f186449371"><div class="ttname"><a href="classSVF_1_1IntervalValue.html#a43f48c744f7bda0dc689b8f186449371">SVF::IntervalValue::minus_infinity</a></div><div class="ttdeci">static NumericLiteral minus_infinity()</div><div class="ttdoc">Get minus infinity -oo.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00066">IntervalValue.h:66</a></div></div>
699
+ <div class="ttc" id="aae_8cpp_html_acf883aea11ed083025935a7257b5967d"><div class="ttname"><a href="ae_8cpp.html#acf883aea11ed083025935a7257b5967d">SYMABS</a></div><div class="ttdeci">static Option&lt; bool &gt; SYMABS(&quot;symabs&quot;, &quot;symbolic abstraction test&quot;, false)</div></div>
700
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_a99d94e268fb6e622a85a9acae737fd6f"><div class="ttname"><a href="classSymblicAbstractionTest.html#a99d94e268fb6e622a85a9acae737fd6f">SymblicAbstractionTest::test_print</a></div><div class="ttdeci">void test_print()</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00033">ae.cpp:33</a></div></div>
701
+ <div class="ttc" id="aclassSVF_1_1Z3Expr_html"><div class="ttname"><a href="classSVF_1_1Z3Expr.html">SVF::Z3Expr</a></div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00038">Z3Expr.h:38</a></div></div>
702
+ <div class="ttc" id="aOptions_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
703
+ <div class="ttc" id="aclassOptionBase_html_a4fb6c6e4a1754d702c6c1730f54457e5"><div class="ttname"><a href="classOptionBase.html#a4fb6c6e4a1754d702c6c1730f54457e5">OptionBase::parseOptions</a></div><div class="ttdeci">static std::vector&lt; std::string &gt; parseOptions(int argc, char *argv[], std::string description, std::string callFormat)</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00075">CommandLine.h:75</a></div></div>
704
+ <div class="ttc" id="aclassSVF_1_1IntervalESBase_html"><div class="ttname"><a href="classSVF_1_1IntervalESBase.html">SVF::IntervalESBase</a></div><div class="ttdef"><b>Definition:</b> <a href="IntervalExeState_8h_source.html#l00054">IntervalExeState.h:54</a></div></div>
705
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_a32fbde1fbb997be55abfdc308de68fc1"><div class="ttname"><a href="classSymblicAbstractionTest.html#a32fbde1fbb997be55abfdc308de68fc1">SymblicAbstractionTest::testRelExeState2_1</a></div><div class="ttdeci">void testRelExeState2_1()</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00144">ae.cpp:144</a></div></div>
706
+ <div class="ttc" id="aRelationSolver_8h_html"><div class="ttname"><a href="RelationSolver_8h.html">RelationSolver.h</a></div></div>
707
+ <div class="ttc" id="aclassSVF_1_1RelationSolver_html_af860063ccaeca043bac84eb9eb2cf80a"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">SVF::RelationSolver::gamma_hat</a></div><div class="ttdeci">Z3Expr gamma_hat(const IntervalESBase &amp;exeState) const</div><div class="ttdoc">Return Z3Expr according to valToValMap.</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00196">RelationSolver.cpp:196</a></div></div>
708
+ <div class="ttc" id="aclassSVF_1_1IntervalESBase_html_a02e3d5f7074c4f77338edc9a7add95d8"><div class="ttname"><a href="classSVF_1_1IntervalESBase.html#a02e3d5f7074c4f77338edc9a7add95d8">SVF::IntervalESBase::VarToValMap</a></div><div class="ttdeci">Map&lt; u32_t, IntervalValue &gt; VarToValMap</div><div class="ttdef"><b>Definition:</b> <a href="IntervalExeState_8h_source.html#l00059">IntervalExeState.h:59</a></div></div>
709
+ <div class="ttc" id="aclassSVF_1_1IntervalESBase_html_a2c15de9b10a74fbcb171ff2f328ce7f2"><div class="ttname"><a href="classSVF_1_1IntervalESBase.html#a2c15de9b10a74fbcb171ff2f328ce7f2">SVF::IntervalESBase::sliceState</a></div><div class="ttdeci">IntervalESBase sliceState(Set&lt; u32_t &gt; &amp;sl)</div><div class="ttdoc">Copy some values and return a new IntervalExeState.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalExeState_8h_source.html#l00135">IntervalExeState.h:135</a></div></div>
710
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_a66155c2b52131a7782382d8e5da560fc"><div class="ttname"><a href="classSymblicAbstractionTest.html#a66155c2b52131a7782382d8e5da560fc">SymblicAbstractionTest::testsValidation</a></div><div class="ttdeci">void testsValidation()</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00573">ae.cpp:573</a></div></div>
711
+ <div class="ttc" id="aclassSVF_1_1IntervalValue_html"><div class="ttname"><a href="classSVF_1_1IntervalValue.html">SVF::IntervalValue</a></div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00043">IntervalValue.h:43</a></div></div>
712
+ <div class="ttc" id="aclassSVF_1_1RelationSolver_html_a657af041f883e7b1a3f9892453a2c4cf"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#a657af041f883e7b1a3f9892453a2c4cf">SVF::RelationSolver::RSY</a></div><div class="ttdeci">IntervalESBase RSY(const IntervalESBase &amp;domain, const Z3Expr &amp;phi)</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00111">RelationSolver.cpp:111</a></div></div>
713
+ <div class="ttc" id="aclassSVF_1_1RelationSolver_html"><div class="ttname"><a href="classSVF_1_1RelationSolver.html">SVF::RelationSolver</a></div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8h_source.html#l00038">RelationSolver.h:38</a></div></div>
714
+ <div class="ttc" id="aae_8cpp_html_a3c04138a5bfe5d72780bb7e82a18e627"><div class="ttname"><a href="ae_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a></div><div class="ttdeci">int main(int argc, char **argv)</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00595">ae.cpp:595</a></div></div>
715
+ <div class="ttc" id="aclassSVF_1_1RelExeState_html_a3393f160508c33e68ebedd042d1d296f"><div class="ttname"><a href="classSVF_1_1RelExeState.html#a3393f160508c33e68ebedd042d1d296f">SVF::RelExeState::extractSubVars</a></div><div class="ttdeci">void extractSubVars(const Z3Expr &amp;expr, Set&lt; u32_t &gt; &amp;res)</div><div class="ttdoc">Extract sub SVFVar IDs of a Z3Expr.</div><div class="ttdef"><b>Definition:</b> <a href="RelExeState_8cpp_source.html#l00044">RelExeState.cpp:44</a></div></div>
716
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_abaa1ae92b79979cfabee1a2b8a284f80"><div class="ttname"><a href="classSymblicAbstractionTest.html#abaa1ae92b79979cfabee1a2b8a284f80">SymblicAbstractionTest::RSY_time</a></div><div class="ttdeci">IntervalESBase RSY_time(IntervalESBase &amp;inv, const Z3Expr &amp;phi, RelationSolver &amp;rs)</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00038">ae.cpp:38</a></div></div>
717
+ <div class="ttc" id="aclassOption_html"><div class="ttname"><a href="classOption.html">Option&lt; bool &gt;</a></div></div>
718
+ <div class="ttc" id="aclassSVF_1_1IntervalESBase_html_a5fbb3e0a06cb36f020a6de20ebd04ad1"><div class="ttname"><a href="classSVF_1_1IntervalESBase.html#a5fbb3e0a06cb36f020a6de20ebd04ad1">SVF::IntervalESBase::eqVarToValMap</a></div><div class="ttdeci">static bool eqVarToValMap(const VarToValMap &amp;lhs, const VarToValMap &amp;rhs)</div><div class="ttdef"><b>Definition:</b> <a href="IntervalExeState_8h_source.html#l00324">IntervalExeState.h:324</a></div></div>
719
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_ae7b7853f6a6a3cbc2c04d3dfea83ad43"><div class="ttname"><a href="classSymblicAbstractionTest.html#ae7b7853f6a6a3cbc2c04d3dfea83ad43">SymblicAbstractionTest::testRelExeState3_4</a></div><div class="ttdeci">void testRelExeState3_4()</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00486">ae.cpp:486</a></div></div>
720
+ <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>
721
+ <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a05dc00b2bd9a8176aae31b6cfffe725d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a05dc00b2bd9a8176aae31b6cfffe725d">SVF::SVFUtil::sucMsg</a></div><div class="ttdeci">std::string sucMsg(const std::string &amp;msg)</div><div class="ttdoc">Returns successful message by converting a string into green string output.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00053">SVFUtil.cpp:53</a></div></div>
722
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_ad6525df45acfeb1c9c31fc54219a4217"><div class="ttname"><a href="classSymblicAbstractionTest.html#ad6525df45acfeb1c9c31fc54219a4217">SymblicAbstractionTest::Bilateral_time</a></div><div class="ttdeci">IntervalESBase Bilateral_time(IntervalESBase &amp;inv, const Z3Expr &amp;phi, RelationSolver &amp;rs)</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00050">ae.cpp:50</a></div></div>
723
+ <div class="ttc" id="aclassSVF_1_1RelExeState_html"><div class="ttname"><a href="classSVF_1_1RelExeState.html">SVF::RelExeState</a></div><div class="ttdef"><b>Definition:</b> <a href="RelExeState_8h_source.html#l00039">RelExeState.h:39</a></div></div>
724
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_a61df4b66ebc9b3eb38d773aa375ee759"><div class="ttname"><a href="classSymblicAbstractionTest.html#a61df4b66ebc9b3eb38d773aa375ee759">SymblicAbstractionTest::BS_time</a></div><div class="ttdeci">IntervalESBase BS_time(IntervalESBase &amp;inv, const Z3Expr &amp;phi, RelationSolver &amp;rs)</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00062">ae.cpp:62</a></div></div>
725
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_a986b2278abd2ee64507fa769a66c999c"><div class="ttname"><a href="classSymblicAbstractionTest.html#a986b2278abd2ee64507fa769a66c999c">SymblicAbstractionTest::testRelExeState4_1</a></div><div class="ttdeci">void testRelExeState4_1()</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00528">ae.cpp:528</a></div></div>
726
+ <div class="ttc" id="aclassSVF_1_1IntervalESBase_html_a903797577ba99ef57879774a3849bbfe"><div class="ttname"><a href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">SVF::IntervalESBase::getVarToVal</a></div><div class="ttdeci">const VarToValMap &amp; getVarToVal() const</div><div class="ttdoc">get var2val map</div><div class="ttdef"><b>Definition:</b> <a href="IntervalExeState_8h_source.html#l00189">IntervalExeState.h:189</a></div></div>
727
+ <div class="ttc" id="anamespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00102">SVFType.h:102</a></div></div>
728
+ <div class="ttc" id="aIntervalExeState_8h_html"><div class="ttname"><a href="IntervalExeState_8h.html">IntervalExeState.h</a></div></div>
729
+ <div class="ttc" id="aZ3Expr_8h_html"><div class="ttname"><a href="Z3Expr_8h.html">Z3Expr.h</a></div></div>
730
+ <div class="ttc" id="aclassSymblicAbstractionTest_html_a7c319b15dd3bd82a7c805ba6dd60beab"><div class="ttname"><a href="classSymblicAbstractionTest.html#a7c319b15dd3bd82a7c805ba6dd60beab">SymblicAbstractionTest::testRelExeState2_3</a></div><div class="ttdeci">void testRelExeState2_3()</div><div class="ttdef"><b>Definition:</b> <a href="ae_8cpp_source.html#l00229">ae.cpp:229</a></div></div>
731
+ <!-- start footer part -->
732
+ <hr class="footer"/><address class="footer"><small>
733
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
734
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
735
+ </a> 1.8.17
736
+ </small></address>
737
+ </body>
738
+ </html>