svf-tools 1.0.913 → 1.0.915

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 (264) hide show
  1. package/SVF-doxygen/html/AbstractInterpretation_8cpp.html +7 -5
  2. package/SVF-doxygen/html/AbstractInterpretation_8cpp_source.html +1593 -1610
  3. package/SVF-doxygen/html/AbstractInterpretation_8h_source.html +157 -144
  4. package/SVF-doxygen/html/BufOverflowChecker_8cpp_source.html +797 -786
  5. package/SVF-doxygen/html/BufOverflowChecker_8h_source.html +7 -7
  6. package/SVF-doxygen/html/SVFIR2AbsState_8cpp_source.html +815 -826
  7. package/SVF-doxygen/html/SVFIR2AbsState_8h_source.html +153 -196
  8. package/SVF-doxygen/html/classSVF_1_1AEStat.html +116 -120
  9. package/SVF-doxygen/html/classSVF_1_1AbstractInterpretation-members.html +33 -33
  10. package/SVF-doxygen/html/classSVF_1_1AbstractInterpretation.html +1739 -1684
  11. package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker-members.html +33 -33
  12. package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker.html +471 -462
  13. package/SVF-doxygen/html/classSVF_1_1SVFIR2AbsState-members.html +35 -47
  14. package/SVF-doxygen/html/classSVF_1_1SVFIR2AbsState.html +1261 -1546
  15. package/SVF-doxygen/html/dir_9a8e7a56f4029a0d9f62b1c6d1f6e85b.html +0 -2
  16. package/SVF-doxygen/html/files.html +0 -1
  17. package/SVF-doxygen/html/functions.html +4 -7
  18. package/SVF-doxygen/html/functions_a.html +2 -2
  19. package/SVF-doxygen/html/functions_f.html +3 -3
  20. package/SVF-doxygen/html/functions_func.html +2 -2
  21. package/SVF-doxygen/html/functions_func_g.html +16 -16
  22. package/SVF-doxygen/html/functions_func_h.html +21 -57
  23. package/SVF-doxygen/html/functions_func_i.html +21 -12
  24. package/SVF-doxygen/html/functions_func_n.html +1 -1
  25. package/SVF-doxygen/html/functions_func_s.html +13 -19
  26. package/SVF-doxygen/html/functions_func_t.html +1 -1
  27. package/SVF-doxygen/html/functions_func_w.html +1 -1
  28. package/SVF-doxygen/html/functions_g.html +16 -16
  29. package/SVF-doxygen/html/functions_h.html +18 -54
  30. package/SVF-doxygen/html/functions_i.html +32 -23
  31. package/SVF-doxygen/html/functions_l.html +3 -3
  32. package/SVF-doxygen/html/functions_n.html +1 -1
  33. package/SVF-doxygen/html/functions_o.html +4 -4
  34. package/SVF-doxygen/html/functions_p.html +19 -17
  35. package/SVF-doxygen/html/functions_r.html +6 -6
  36. package/SVF-doxygen/html/functions_s.html +18 -26
  37. package/SVF-doxygen/html/functions_t.html +4 -4
  38. package/SVF-doxygen/html/functions_v.html +6 -6
  39. package/SVF-doxygen/html/functions_vars.html +4 -7
  40. package/SVF-doxygen/html/functions_w.html +1 -1
  41. package/SVF-doxygen/html/search/all_0.js +131 -132
  42. package/SVF-doxygen/html/search/all_1.js +504 -504
  43. package/SVF-doxygen/html/search/all_10.js +326 -326
  44. package/SVF-doxygen/html/search/all_11.js +227 -227
  45. package/SVF-doxygen/html/search/all_12.js +559 -562
  46. package/SVF-doxygen/html/search/all_13.js +186 -186
  47. package/SVF-doxygen/html/search/all_14.js +74 -74
  48. package/SVF-doxygen/html/search/all_15.js +175 -175
  49. package/SVF-doxygen/html/search/all_16.js +77 -77
  50. package/SVF-doxygen/html/search/all_17.js +1 -1
  51. package/SVF-doxygen/html/search/all_18.js +1 -1
  52. package/SVF-doxygen/html/search/all_19.js +27 -27
  53. package/SVF-doxygen/html/search/all_1a.js +174 -174
  54. package/SVF-doxygen/html/search/all_2.js +180 -180
  55. package/SVF-doxygen/html/search/all_3.js +635 -635
  56. package/SVF-doxygen/html/search/all_4.js +237 -237
  57. package/SVF-doxygen/html/search/all_5.js +120 -120
  58. package/SVF-doxygen/html/search/all_6.js +236 -236
  59. package/SVF-doxygen/html/search/all_7.js +1039 -1039
  60. package/SVF-doxygen/html/search/all_8.js +212 -224
  61. package/SVF-doxygen/html/search/all_9.js +630 -627
  62. package/SVF-doxygen/html/search/all_a.js +46 -46
  63. package/SVF-doxygen/html/search/all_b.js +24 -24
  64. package/SVF-doxygen/html/search/all_c.js +111 -111
  65. package/SVF-doxygen/html/search/all_d.js +204 -204
  66. package/SVF-doxygen/html/search/all_e.js +207 -207
  67. package/SVF-doxygen/html/search/all_f.js +122 -122
  68. package/SVF-doxygen/html/search/classes_0.js +29 -29
  69. package/SVF-doxygen/html/search/classes_1.js +11 -11
  70. package/SVF-doxygen/html/search/classes_10.js +71 -71
  71. package/SVF-doxygen/html/search/classes_11.js +14 -14
  72. package/SVF-doxygen/html/search/classes_12.js +2 -2
  73. package/SVF-doxygen/html/search/classes_13.js +10 -10
  74. package/SVF-doxygen/html/search/classes_14.js +19 -19
  75. package/SVF-doxygen/html/search/classes_15.js +1 -1
  76. package/SVF-doxygen/html/search/classes_2.js +72 -72
  77. package/SVF-doxygen/html/search/classes_3.js +35 -35
  78. package/SVF-doxygen/html/search/classes_4.js +7 -7
  79. package/SVF-doxygen/html/search/classes_5.js +28 -28
  80. package/SVF-doxygen/html/search/classes_6.js +98 -98
  81. package/SVF-doxygen/html/search/classes_7.js +33 -33
  82. package/SVF-doxygen/html/search/classes_8.js +57 -57
  83. package/SVF-doxygen/html/search/classes_9.js +1 -1
  84. package/SVF-doxygen/html/search/classes_a.js +12 -12
  85. package/SVF-doxygen/html/search/classes_b.js +29 -29
  86. package/SVF-doxygen/html/search/classes_c.js +6 -6
  87. package/SVF-doxygen/html/search/classes_d.js +19 -19
  88. package/SVF-doxygen/html/search/classes_e.js +36 -36
  89. package/SVF-doxygen/html/search/classes_f.js +25 -25
  90. package/SVF-doxygen/html/search/defines_0.js +3 -3
  91. package/SVF-doxygen/html/search/defines_1.js +3 -3
  92. package/SVF-doxygen/html/search/defines_10.js +2 -2
  93. package/SVF-doxygen/html/search/defines_2.js +30 -30
  94. package/SVF-doxygen/html/search/defines_3.js +20 -20
  95. package/SVF-doxygen/html/search/defines_4.js +3 -3
  96. package/SVF-doxygen/html/search/defines_5.js +4 -4
  97. package/SVF-doxygen/html/search/defines_6.js +2 -2
  98. package/SVF-doxygen/html/search/defines_7.js +5 -5
  99. package/SVF-doxygen/html/search/defines_8.js +11 -11
  100. package/SVF-doxygen/html/search/defines_9.js +9 -9
  101. package/SVF-doxygen/html/search/defines_a.js +2 -2
  102. package/SVF-doxygen/html/search/defines_b.js +1 -1
  103. package/SVF-doxygen/html/search/defines_c.js +3 -3
  104. package/SVF-doxygen/html/search/defines_d.js +2 -2
  105. package/SVF-doxygen/html/search/defines_e.js +8 -8
  106. package/SVF-doxygen/html/search/defines_f.js +4 -4
  107. package/SVF-doxygen/html/search/enums_0.js +3 -3
  108. package/SVF-doxygen/html/search/enums_1.js +2 -2
  109. package/SVF-doxygen/html/search/enums_10.js +1 -1
  110. package/SVF-doxygen/html/search/enums_11.js +1 -1
  111. package/SVF-doxygen/html/search/enums_2.js +9 -9
  112. package/SVF-doxygen/html/search/enums_3.js +2 -2
  113. package/SVF-doxygen/html/search/enums_4.js +3 -3
  114. package/SVF-doxygen/html/search/enums_5.js +1 -1
  115. package/SVF-doxygen/html/search/enums_6.js +2 -2
  116. package/SVF-doxygen/html/search/enums_7.js +2 -2
  117. package/SVF-doxygen/html/search/enums_8.js +4 -4
  118. package/SVF-doxygen/html/search/enums_9.js +1 -1
  119. package/SVF-doxygen/html/search/enums_a.js +1 -1
  120. package/SVF-doxygen/html/search/enums_b.js +7 -7
  121. package/SVF-doxygen/html/search/enums_c.js +1 -1
  122. package/SVF-doxygen/html/search/enums_d.js +4 -4
  123. package/SVF-doxygen/html/search/enums_e.js +2 -2
  124. package/SVF-doxygen/html/search/enums_f.js +4 -4
  125. package/SVF-doxygen/html/search/enumvalues_0.js +15 -15
  126. package/SVF-doxygen/html/search/enumvalues_1.js +16 -16
  127. package/SVF-doxygen/html/search/enumvalues_10.js +36 -36
  128. package/SVF-doxygen/html/search/enumvalues_11.js +6 -6
  129. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  130. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  131. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  132. package/SVF-doxygen/html/search/enumvalues_15.js +4 -4
  133. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  134. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  135. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  136. package/SVF-doxygen/html/search/enumvalues_5.js +50 -50
  137. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  138. package/SVF-doxygen/html/search/enumvalues_7.js +8 -8
  139. package/SVF-doxygen/html/search/enumvalues_8.js +24 -24
  140. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  141. package/SVF-doxygen/html/search/enumvalues_a.js +17 -17
  142. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  143. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  144. package/SVF-doxygen/html/search/enumvalues_d.js +19 -19
  145. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  146. package/SVF-doxygen/html/search/enumvalues_f.js +48 -48
  147. package/SVF-doxygen/html/search/files_0.js +18 -18
  148. package/SVF-doxygen/html/search/files_1.js +9 -9
  149. package/SVF-doxygen/html/search/files_10.js +8 -8
  150. package/SVF-doxygen/html/search/files_11.js +8 -8
  151. package/SVF-doxygen/html/search/files_12.js +2 -2
  152. package/SVF-doxygen/html/search/files_2.js +51 -51
  153. package/SVF-doxygen/html/search/files_3.js +14 -14
  154. package/SVF-doxygen/html/search/files_4.js +3 -3
  155. package/SVF-doxygen/html/search/files_5.js +13 -13
  156. package/SVF-doxygen/html/search/files_6.js +10 -10
  157. package/SVF-doxygen/html/search/files_7.js +15 -15
  158. package/SVF-doxygen/html/search/files_8.js +13 -13
  159. package/SVF-doxygen/html/search/files_9.js +18 -18
  160. package/SVF-doxygen/html/search/files_a.js +3 -3
  161. package/SVF-doxygen/html/search/files_b.js +4 -4
  162. package/SVF-doxygen/html/search/files_c.js +20 -20
  163. package/SVF-doxygen/html/search/files_d.js +4 -4
  164. package/SVF-doxygen/html/search/files_e.js +56 -57
  165. package/SVF-doxygen/html/search/files_f.js +8 -8
  166. package/SVF-doxygen/html/search/functions_0.js +13 -13
  167. package/SVF-doxygen/html/search/functions_1.js +366 -366
  168. package/SVF-doxygen/html/search/functions_10.js +140 -140
  169. package/SVF-doxygen/html/search/functions_11.js +140 -140
  170. package/SVF-doxygen/html/search/functions_12.js +291 -293
  171. package/SVF-doxygen/html/search/functions_13.js +52 -52
  172. package/SVF-doxygen/html/search/functions_14.js +41 -41
  173. package/SVF-doxygen/html/search/functions_15.js +70 -70
  174. package/SVF-doxygen/html/search/functions_16.js +38 -38
  175. package/SVF-doxygen/html/search/functions_17.js +3 -3
  176. package/SVF-doxygen/html/search/functions_18.js +174 -174
  177. package/SVF-doxygen/html/search/functions_2.js +92 -92
  178. package/SVF-doxygen/html/search/functions_3.js +257 -257
  179. package/SVF-doxygen/html/search/functions_4.js +85 -85
  180. package/SVF-doxygen/html/search/functions_5.js +54 -54
  181. package/SVF-doxygen/html/search/functions_6.js +65 -65
  182. package/SVF-doxygen/html/search/functions_7.js +857 -857
  183. package/SVF-doxygen/html/search/functions_8.js +164 -176
  184. package/SVF-doxygen/html/search/functions_9.js +439 -436
  185. package/SVF-doxygen/html/search/functions_a.js +30 -30
  186. package/SVF-doxygen/html/search/functions_b.js +2 -2
  187. package/SVF-doxygen/html/search/functions_c.js +22 -22
  188. package/SVF-doxygen/html/search/functions_d.js +81 -81
  189. package/SVF-doxygen/html/search/functions_e.js +34 -34
  190. package/SVF-doxygen/html/search/functions_f.js +58 -58
  191. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  192. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  193. package/SVF-doxygen/html/search/related_0.js +4 -4
  194. package/SVF-doxygen/html/search/related_1.js +2 -2
  195. package/SVF-doxygen/html/search/related_2.js +2 -2
  196. package/SVF-doxygen/html/search/related_3.js +2 -2
  197. package/SVF-doxygen/html/search/related_4.js +2 -2
  198. package/SVF-doxygen/html/search/related_5.js +1 -1
  199. package/SVF-doxygen/html/search/related_6.js +2 -2
  200. package/SVF-doxygen/html/search/related_7.js +5 -5
  201. package/SVF-doxygen/html/search/related_8.js +2 -2
  202. package/SVF-doxygen/html/search/related_9.js +4 -4
  203. package/SVF-doxygen/html/search/related_a.js +19 -19
  204. package/SVF-doxygen/html/search/related_b.js +4 -4
  205. package/SVF-doxygen/html/search/related_c.js +2 -2
  206. package/SVF-doxygen/html/search/related_d.js +11 -11
  207. package/SVF-doxygen/html/search/related_e.js +2 -2
  208. package/SVF-doxygen/html/search/related_f.js +2 -2
  209. package/SVF-doxygen/html/search/typedefs_0.js +20 -20
  210. package/SVF-doxygen/html/search/typedefs_1.js +27 -27
  211. package/SVF-doxygen/html/search/typedefs_10.js +65 -65
  212. package/SVF-doxygen/html/search/typedefs_11.js +12 -12
  213. package/SVF-doxygen/html/search/typedefs_12.js +13 -13
  214. package/SVF-doxygen/html/search/typedefs_13.js +40 -40
  215. package/SVF-doxygen/html/search/typedefs_14.js +11 -11
  216. package/SVF-doxygen/html/search/typedefs_2.js +125 -125
  217. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  218. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  219. package/SVF-doxygen/html/search/typedefs_5.js +42 -42
  220. package/SVF-doxygen/html/search/typedefs_6.js +54 -54
  221. package/SVF-doxygen/html/search/typedefs_7.js +47 -47
  222. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  223. package/SVF-doxygen/html/search/typedefs_9.js +4 -4
  224. package/SVF-doxygen/html/search/typedefs_a.js +28 -28
  225. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  226. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  227. package/SVF-doxygen/html/search/typedefs_d.js +15 -15
  228. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  229. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  230. package/SVF-doxygen/html/search/variables_0.js +169 -170
  231. package/SVF-doxygen/html/search/variables_1.js +78 -78
  232. package/SVF-doxygen/html/search/variables_10.js +98 -98
  233. package/SVF-doxygen/html/search/variables_11.js +47 -47
  234. package/SVF-doxygen/html/search/variables_12.js +93 -93
  235. package/SVF-doxygen/html/search/variables_13.js +76 -76
  236. package/SVF-doxygen/html/search/variables_14.js +14 -14
  237. package/SVF-doxygen/html/search/variables_15.js +49 -49
  238. package/SVF-doxygen/html/search/variables_16.js +11 -11
  239. package/SVF-doxygen/html/search/variables_17.js +1 -1
  240. package/SVF-doxygen/html/search/variables_18.js +17 -17
  241. package/SVF-doxygen/html/search/variables_2.js +40 -40
  242. package/SVF-doxygen/html/search/variables_3.js +143 -143
  243. package/SVF-doxygen/html/search/variables_4.js +51 -51
  244. package/SVF-doxygen/html/search/variables_5.js +39 -39
  245. package/SVF-doxygen/html/search/variables_6.js +66 -66
  246. package/SVF-doxygen/html/search/variables_7.js +32 -32
  247. package/SVF-doxygen/html/search/variables_8.js +8 -8
  248. package/SVF-doxygen/html/search/variables_9.js +80 -80
  249. package/SVF-doxygen/html/search/variables_a.js +4 -4
  250. package/SVF-doxygen/html/search/variables_b.js +10 -10
  251. package/SVF-doxygen/html/search/variables_c.js +44 -44
  252. package/SVF-doxygen/html/search/variables_d.js +58 -58
  253. package/SVF-doxygen/html/search/variables_e.js +123 -123
  254. package/SVF-doxygen/html/search/variables_f.js +31 -31
  255. package/SVF-doxygen/html/svf-ex_8cpp.html +199 -197
  256. package/SVF-doxygen/html/svf-ex_8cpp_source.html +204 -202
  257. package/package.json +1 -1
  258. package/svf/include/AE/Svfexe/AbstractInterpretation.h +28 -21
  259. package/svf/include/AE/Svfexe/SVFIR2AbsState.h +37 -67
  260. package/svf/lib/AE/Svfexe/AbstractInterpretation.cpp +153 -169
  261. package/svf/lib/AE/Svfexe/BufOverflowChecker.cpp +64 -54
  262. package/svf/lib/AE/Svfexe/SVFIR2AbsState.cpp +134 -146
  263. package/svf-llvm/tools/Example/svf-ex.cpp +13 -12
  264. package/svf/lib/AE/Core/SVFIR2Relation.cpp +0 -193
@@ -77,32 +77,33 @@ std::string printPts(PointerAnalysis* pta, const SVFValue* svfval)
77
77
  */
78
78
  void traverseOnSVFStmt(const ICFGNode* node)
79
79
  {
80
- SVFIR2AbsState* svfir2ExeState = new SVFIR2AbsState(SVFIR::getPAG());
80
+ AbstractState es;
81
+ SVFIR2AbsState* svfir2AbsState = new SVFIR2AbsState(SVFIR::getPAG());
81
82
  for (const SVFStmt* stmt: node->getSVFStmts())
82
83
  {
83
84
  if (const AddrStmt *addr = SVFUtil::dyn_cast<AddrStmt>(stmt))
84
85
  {
85
- svfir2ExeState->handleAddr(addr);
86
+ svfir2AbsState->handleAddr(es, addr);
86
87
  }
87
88
  else if (const BinaryOPStmt *binary = SVFUtil::dyn_cast<BinaryOPStmt>(stmt))
88
89
  {
89
- svfir2ExeState->handleBinary(binary);
90
+ svfir2AbsState->handleBinary(es, binary);
90
91
  }
91
92
  else if (const CmpStmt *cmp = SVFUtil::dyn_cast<CmpStmt>(stmt))
92
93
  {
93
- svfir2ExeState->handleCmp(cmp);
94
+ svfir2AbsState->handleCmp(es, cmp);
94
95
  }
95
96
  else if (const LoadStmt *load = SVFUtil::dyn_cast<LoadStmt>(stmt))
96
97
  {
97
- svfir2ExeState->handleLoad(load);
98
+ svfir2AbsState->handleLoad(es, load);
98
99
  }
99
100
  else if (const StoreStmt *store = SVFUtil::dyn_cast<StoreStmt>(stmt))
100
101
  {
101
- svfir2ExeState->handleStore(store);
102
+ svfir2AbsState->handleStore(es, store);
102
103
  }
103
104
  else if (const CopyStmt *copy = SVFUtil::dyn_cast<CopyStmt>(stmt))
104
105
  {
105
- svfir2ExeState->handleCopy(copy);
106
+ svfir2AbsState->handleCopy(es, copy);
106
107
  }
107
108
  else if (const GepStmt *gep = SVFUtil::dyn_cast<GepStmt>(stmt))
108
109
  {
@@ -111,24 +112,24 @@ void traverseOnSVFStmt(const ICFGNode* node)
111
112
  gep->accumulateConstantByteOffset();
112
113
  gep->accumulateConstantOffset();
113
114
  }
114
- svfir2ExeState->handleGep(gep);
115
+ svfir2AbsState->handleGep(es, gep);
115
116
  }
116
117
  else if (const SelectStmt *select = SVFUtil::dyn_cast<SelectStmt>(stmt))
117
118
  {
118
- svfir2ExeState->handleSelect(select);
119
+ svfir2AbsState->handleSelect(es, select);
119
120
  }
120
121
  else if (const PhiStmt *phi = SVFUtil::dyn_cast<PhiStmt>(stmt))
121
122
  {
122
- svfir2ExeState->handlePhi(phi);
123
+ svfir2AbsState->handlePhi(es, phi);
123
124
  }
124
125
  else if (const CallPE *callPE = SVFUtil::dyn_cast<CallPE>(stmt))
125
126
  {
126
127
  // To handle Call Edge
127
- svfir2ExeState->handleCall(callPE);
128
+ svfir2AbsState->handleCall(es, callPE);
128
129
  }
129
130
  else if (const RetPE *retPE = SVFUtil::dyn_cast<RetPE>(stmt))
130
131
  {
131
- svfir2ExeState->handleRet(retPE);
132
+ svfir2AbsState->handleRet(es, retPE);
132
133
  }
133
134
  else
134
135
  assert(false && "implement this part");
@@ -1,193 +0,0 @@
1
- //
2
- // Created by Xiao on 2022/8/18.
3
- //
4
-
5
- #include "AE/Svfexe/SVFIR2AbsState.h"
6
-
7
- using namespace SVF;
8
- using namespace SVFUtil;
9
-
10
- void SVFIR2AbsState::handleBinaryRel(const BinaryOPStmt *binary)
11
- {
12
- NodeID op0 = binary->getOpVarID(0);
13
- NodeID op1 = binary->getOpVarID(1);
14
- NodeID res = binary->getResID();
15
- Z3Expr &rel_res = _relEs[res];
16
- const Z3Expr &rel_value0 = _relEs.toZ3Expr(op0);
17
- const Z3Expr &rel_value1 = _relEs.toZ3Expr(op1);
18
- switch (binary->getOpcode())
19
- {
20
- case BinaryOPStmt::Add:
21
- {
22
- rel_res = rel_value0 + rel_value1;
23
- break;
24
- }
25
- case BinaryOPStmt::Sub:
26
- {
27
- rel_res = rel_value0 - rel_value1;
28
- break;
29
- }
30
- case BinaryOPStmt::Mul:
31
- {
32
- rel_res = rel_value0 * rel_value1;
33
- break;
34
- }
35
- case BinaryOPStmt::SDiv:
36
- {
37
- rel_res = rel_value0 / rel_value1;
38
- break;
39
- }
40
- case BinaryOPStmt::SRem:
41
- break;
42
- case BinaryOPStmt::Xor:
43
- break;
44
- case BinaryOPStmt::And:
45
- break;
46
- case BinaryOPStmt::Or:
47
- break;
48
- case BinaryOPStmt::AShr:
49
- break;
50
- case BinaryOPStmt::Shl:
51
- break;
52
- default:
53
- {
54
- assert(false && "implement this part");
55
- abort();
56
- }
57
- }
58
- }
59
-
60
- void SVFIR2AbsState::handleCmpRel(const CmpStmt *cmp)
61
- {
62
- NodeID op0 = cmp->getOpVarID(0);
63
- NodeID op1 = cmp->getOpVarID(1);
64
- NodeID res_id = cmp->getResID();
65
- u32_t predicate = cmp->getPredicate();
66
- Z3Expr &rel_res = _relEs[res_id];
67
- const Z3Expr &rel_value0 = _relEs.toZ3Expr(op0);
68
- const Z3Expr &rel_value1 = _relEs.toZ3Expr(op1);
69
- switch (predicate)
70
- {
71
- case CmpStmt::ICMP_EQ:
72
- {
73
- rel_res = ite(rel_value0 == rel_value1, 1, 0);
74
- break;
75
- }
76
- case CmpStmt::ICMP_NE:
77
- {
78
- rel_res = ite(rel_value0 != rel_value1, 1, 0);
79
- break;
80
- }
81
- case CmpStmt::ICMP_UGT:
82
- case CmpStmt::ICMP_SGT:
83
- {
84
- rel_res = ite(rel_value0 > rel_value1, 1, 0);
85
- break;
86
- }
87
- case CmpStmt::ICMP_UGE:
88
- case CmpStmt::ICMP_SGE:
89
- {
90
- rel_res = ite(rel_value0 >= rel_value1, 1, 0);
91
- break;
92
- }
93
- case CmpStmt::ICMP_ULT:
94
- case CmpStmt::ICMP_SLT:
95
- {
96
- rel_res = ite(rel_value0 < rel_value1, 1, 0);
97
- break;
98
- }
99
- case CmpStmt::ICMP_ULE:
100
- case CmpStmt::ICMP_SLE:
101
- {
102
- rel_res = ite(rel_value0 <= rel_value1, 1, 0);
103
- break;
104
- }
105
- default:
106
- assert(false && "implement this part");
107
- abort();
108
- }
109
- }
110
-
111
- void SVFIR2AbsState::handleLoadRel(const LoadStmt *load)
112
- {
113
- u32_t rhs = load->getRHSVarID();
114
- u32_t lhs = load->getLHSVarID();
115
- _relEs[lhs] = _relEs.load(Z3Expr((int) _es[rhs].getInterval().lb().getNumeral()));
116
- }
117
-
118
- void SVFIR2AbsState::handleStoreRel(const StoreStmt *store)
119
- {
120
- u32_t rhs = store->getRHSVarID();
121
- u32_t lhs = store->getLHSVarID();
122
- assert(_es[lhs].getInterval().is_numeral() && "loc not numeral?");
123
- _relEs.store(Z3Expr((int) _es[lhs].getInterval().lb().getNumeral()), _relEs.toZ3Expr(rhs));
124
-
125
- }
126
-
127
- void SVFIR2AbsState::handleCopyRel(const CopyStmt *copy)
128
- {
129
- u32_t rhs = copy->getRHSVarID();
130
- u32_t lhs = copy->getLHSVarID();
131
- _relEs[lhs] = _relEs.toZ3Expr(rhs);
132
- }
133
-
134
- void SVFIR2AbsState::handleSelectRel(const SelectStmt *select)
135
- {
136
- u32_t res = select->getResID();
137
- u32_t tval = select->getTrueValue()->getId();
138
- u32_t fval = select->getFalseValue()->getId();
139
- u32_t cond = select->getCondition()->getId();
140
- IntervalValue& condVal = _es[cond].getInterval();
141
- if (condVal.is_numeral())
142
- {
143
- _relEs[res] = condVal.is_zero() ? _relEs.toZ3Expr(fval) : _relEs.toZ3Expr(tval);
144
- }
145
- else
146
- {
147
-
148
- }
149
- }
150
-
151
- void SVFIR2AbsState::handlePhiRel(const PhiStmt *phi, const ICFGNode *srcNode,
152
- const std::vector<const ICFGEdge *> &path)
153
- {
154
- u32_t res = phi->getResID();
155
- std::unordered_map<const ICFGNode *, NodeID> candidate_ids;
156
- for (u32_t i = 0; i < phi->getOpVarNum(); i++)
157
- {
158
- candidate_ids[phi->getOpICFGNode(i)] = phi->getOpVarID(i);
159
- }
160
- for (auto it = path.end() - 1; it != path.begin(); --it)
161
- {
162
- auto cur_node = (*it)->getDstNode();
163
- if (candidate_ids.find(cur_node) != candidate_ids.end())
164
- {
165
- if (_es.getVarToVal().find(res) == _es.getVarToVal().end())
166
- {
167
- _relEs[res] = _relEs.toZ3Expr(candidate_ids[cur_node]);
168
- }
169
- else
170
- {
171
-
172
- }
173
- return;
174
- }
175
- }
176
- assert(false && "predecessor ICFGNode of this PhiStmt not found?");
177
- }
178
-
179
- void SVFIR2AbsState::handleCallRel(const CallPE *callPE)
180
- {
181
- u32_t rhs = callPE->getRHSVarID();
182
- u32_t lhs = callPE->getLHSVarID();
183
- _relEs[lhs] = _relEs.toZ3Expr(rhs);
184
- }
185
-
186
- void SVFIR2AbsState::handleRetRel(const RetPE *retPE)
187
- {
188
- u32_t lhs = retPE->getLHSVarID();
189
- u32_t rhs = retPE->getRHSVarID();
190
- _relEs[lhs] = _relEs.toZ3Expr(rhs);
191
- }
192
-
193
-