svf-tools 1.0.770 → 1.0.772

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 (313) hide show
  1. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/html/BasicTypes_8h.html +4 -0
  3. package/SVF-doxygen/html/html/BasicTypes_8h_source.html +120 -114
  4. package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +1 -1
  5. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
  7. package/SVF-doxygen/html/html/CxtStmt_8h_source.html +1 -1
  8. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +10 -10
  9. package/SVF-doxygen/html/html/DCHG_8h_source.html +5 -5
  10. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +1 -1
  12. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +3 -3
  13. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +68 -29
  14. package/SVF-doxygen/html/html/LLVMUtil_8h.html +4 -0
  15. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +16 -5
  16. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
  17. package/SVF-doxygen/html/html/MHP_8cpp_source.html +1 -1
  18. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
  21. package/SVF-doxygen/html/html/SVFIR2ConsExeState_8cpp_source.html +1 -1
  22. package/SVF-doxygen/html/html/SVFIR2ItvExeState_8cpp_source.html +793 -771
  23. package/SVF-doxygen/html/html/SVFIR2ItvExeState_8h_source.html +25 -25
  24. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +361 -356
  25. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +10 -10
  26. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
  27. package/SVF-doxygen/html/html/SVFValue_8h_source.html +1 -1
  28. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
  29. package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -1
  30. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
  31. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  32. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  33. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
  34. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +1 -1
  35. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -1
  36. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
  37. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  38. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +1 -1
  39. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +1 -1
  40. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +1 -1
  41. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +1 -1
  42. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  43. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
  44. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
  45. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
  46. package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
  47. package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
  48. package/SVF-doxygen/html/html/classSVF_1_1CxtThreadStmt.html +1 -1
  49. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +10 -10
  50. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +1 -1
  51. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
  52. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +1 -1
  53. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +1 -1
  54. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
  55. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +1 -1
  56. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +1 -1
  57. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  58. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  59. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +1 -1
  60. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +1 -1
  61. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  62. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +3 -3
  63. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +1 -1
  64. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
  65. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
  66. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +1 -1
  67. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +1 -1
  68. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +1 -1
  69. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +1 -1
  70. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +1 -1
  71. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
  72. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
  73. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
  74. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +1 -1
  75. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +1 -1
  76. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  77. package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ItvExeState-members.html +5 -5
  78. package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ItvExeState.html +797 -775
  79. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +342 -338
  80. package/SVF-doxygen/html/html/classSVF_1_1SVFValue.html +23 -23
  81. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
  82. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +1 -1
  83. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
  84. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +1 -1
  85. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  86. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  87. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
  88. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  89. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
  90. package/SVF-doxygen/html/html/functions_func_g.html +5 -5
  91. package/SVF-doxygen/html/html/functions_g.html +5 -5
  92. package/SVF-doxygen/html/html/namespaceSVF.html +59 -23
  93. package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +106 -2
  94. package/SVF-doxygen/html/html/namespacemembers_func_g.html +9 -3
  95. package/SVF-doxygen/html/html/namespacemembers_g.html +11 -5
  96. package/SVF-doxygen/html/html/namespacemembers_s.html +6 -0
  97. package/SVF-doxygen/html/html/namespacemembers_type_s.html +6 -0
  98. package/SVF-doxygen/html/html/search/all_10.js +324 -324
  99. package/SVF-doxygen/html/html/search/all_11.js +213 -213
  100. package/SVF-doxygen/html/html/search/all_12.js +541 -539
  101. package/SVF-doxygen/html/html/search/all_13.js +190 -190
  102. package/SVF-doxygen/html/html/search/all_14.js +66 -66
  103. package/SVF-doxygen/html/html/search/all_15.js +170 -170
  104. package/SVF-doxygen/html/html/search/all_16.js +60 -60
  105. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  106. package/SVF-doxygen/html/html/search/all_18.js +1 -1
  107. package/SVF-doxygen/html/html/search/all_19.js +11 -11
  108. package/SVF-doxygen/html/html/search/all_1a.js +169 -169
  109. package/SVF-doxygen/html/html/search/all_7.js +747 -745
  110. package/SVF-doxygen/html/html/search/all_8.js +191 -191
  111. package/SVF-doxygen/html/html/search/all_9.js +602 -602
  112. package/SVF-doxygen/html/html/search/all_a.js +46 -46
  113. package/SVF-doxygen/html/html/search/all_b.js +26 -26
  114. package/SVF-doxygen/html/html/search/all_c.js +116 -116
  115. package/SVF-doxygen/html/html/search/all_d.js +196 -196
  116. package/SVF-doxygen/html/html/search/all_e.js +206 -206
  117. package/SVF-doxygen/html/html/search/all_f.js +116 -116
  118. package/SVF-doxygen/html/html/search/classes_0.js +26 -26
  119. package/SVF-doxygen/html/html/search/classes_1.js +9 -9
  120. package/SVF-doxygen/html/html/search/classes_10.js +73 -73
  121. package/SVF-doxygen/html/html/search/classes_11.js +15 -15
  122. package/SVF-doxygen/html/html/search/classes_12.js +2 -2
  123. package/SVF-doxygen/html/html/search/classes_13.js +10 -10
  124. package/SVF-doxygen/html/html/search/classes_14.js +14 -14
  125. package/SVF-doxygen/html/html/search/classes_15.js +1 -1
  126. package/SVF-doxygen/html/html/search/classes_2.js +76 -76
  127. package/SVF-doxygen/html/html/search/classes_3.js +35 -35
  128. package/SVF-doxygen/html/html/search/classes_4.js +8 -8
  129. package/SVF-doxygen/html/html/search/classes_5.js +28 -28
  130. package/SVF-doxygen/html/html/search/classes_6.js +98 -98
  131. package/SVF-doxygen/html/html/search/classes_7.js +33 -33
  132. package/SVF-doxygen/html/html/search/classes_8.js +56 -56
  133. package/SVF-doxygen/html/html/search/classes_9.js +1 -1
  134. package/SVF-doxygen/html/html/search/classes_a.js +12 -12
  135. package/SVF-doxygen/html/html/search/classes_b.js +29 -29
  136. package/SVF-doxygen/html/html/search/classes_c.js +6 -6
  137. package/SVF-doxygen/html/html/search/classes_d.js +18 -18
  138. package/SVF-doxygen/html/html/search/classes_e.js +36 -36
  139. package/SVF-doxygen/html/html/search/classes_f.js +25 -25
  140. package/SVF-doxygen/html/html/search/defines_0.js +3 -3
  141. package/SVF-doxygen/html/html/search/defines_1.js +2 -2
  142. package/SVF-doxygen/html/html/search/defines_2.js +30 -30
  143. package/SVF-doxygen/html/html/search/defines_3.js +20 -20
  144. package/SVF-doxygen/html/html/search/defines_4.js +3 -3
  145. package/SVF-doxygen/html/html/search/defines_5.js +4 -4
  146. package/SVF-doxygen/html/html/search/defines_6.js +2 -2
  147. package/SVF-doxygen/html/html/search/defines_7.js +5 -5
  148. package/SVF-doxygen/html/html/search/defines_8.js +11 -11
  149. package/SVF-doxygen/html/html/search/defines_9.js +9 -9
  150. package/SVF-doxygen/html/html/search/defines_a.js +2 -2
  151. package/SVF-doxygen/html/html/search/defines_b.js +1 -1
  152. package/SVF-doxygen/html/html/search/defines_c.js +3 -3
  153. package/SVF-doxygen/html/html/search/defines_d.js +2 -2
  154. package/SVF-doxygen/html/html/search/defines_e.js +7 -7
  155. package/SVF-doxygen/html/html/search/defines_f.js +3 -3
  156. package/SVF-doxygen/html/html/search/enums_0.js +3 -3
  157. package/SVF-doxygen/html/html/search/enums_1.js +2 -2
  158. package/SVF-doxygen/html/html/search/enums_10.js +1 -1
  159. package/SVF-doxygen/html/html/search/enums_11.js +1 -1
  160. package/SVF-doxygen/html/html/search/enums_2.js +8 -8
  161. package/SVF-doxygen/html/html/search/enums_3.js +1 -1
  162. package/SVF-doxygen/html/html/search/enums_4.js +3 -3
  163. package/SVF-doxygen/html/html/search/enums_5.js +1 -1
  164. package/SVF-doxygen/html/html/search/enums_6.js +2 -2
  165. package/SVF-doxygen/html/html/search/enums_7.js +2 -2
  166. package/SVF-doxygen/html/html/search/enums_8.js +4 -4
  167. package/SVF-doxygen/html/html/search/enums_9.js +1 -1
  168. package/SVF-doxygen/html/html/search/enums_a.js +1 -1
  169. package/SVF-doxygen/html/html/search/enums_b.js +7 -7
  170. package/SVF-doxygen/html/html/search/enums_c.js +1 -1
  171. package/SVF-doxygen/html/html/search/enums_d.js +4 -4
  172. package/SVF-doxygen/html/html/search/enums_e.js +2 -2
  173. package/SVF-doxygen/html/html/search/enums_f.js +4 -4
  174. package/SVF-doxygen/html/html/search/enumvalues_0.js +14 -14
  175. package/SVF-doxygen/html/html/search/enumvalues_1.js +14 -14
  176. package/SVF-doxygen/html/html/search/enumvalues_10.js +35 -35
  177. package/SVF-doxygen/html/html/search/enumvalues_11.js +3 -3
  178. package/SVF-doxygen/html/html/search/enumvalues_12.js +10 -10
  179. package/SVF-doxygen/html/html/search/enumvalues_13.js +1 -1
  180. package/SVF-doxygen/html/html/search/enumvalues_14.js +1 -1
  181. package/SVF-doxygen/html/html/search/enumvalues_15.js +3 -3
  182. package/SVF-doxygen/html/html/search/enumvalues_2.js +36 -36
  183. package/SVF-doxygen/html/html/search/enumvalues_3.js +13 -13
  184. package/SVF-doxygen/html/html/search/enumvalues_4.js +2 -2
  185. package/SVF-doxygen/html/html/search/enumvalues_5.js +47 -47
  186. package/SVF-doxygen/html/html/search/enumvalues_6.js +6 -6
  187. package/SVF-doxygen/html/html/search/enumvalues_7.js +9 -9
  188. package/SVF-doxygen/html/html/search/enumvalues_8.js +23 -23
  189. package/SVF-doxygen/html/html/search/enumvalues_9.js +6 -6
  190. package/SVF-doxygen/html/html/search/enumvalues_a.js +15 -15
  191. package/SVF-doxygen/html/html/search/enumvalues_b.js +11 -11
  192. package/SVF-doxygen/html/html/search/enumvalues_c.js +5 -5
  193. package/SVF-doxygen/html/html/search/enumvalues_d.js +18 -18
  194. package/SVF-doxygen/html/html/search/enumvalues_e.js +9 -9
  195. package/SVF-doxygen/html/html/search/enumvalues_f.js +45 -45
  196. package/SVF-doxygen/html/html/search/files_0.js +13 -13
  197. package/SVF-doxygen/html/html/search/files_1.js +7 -7
  198. package/SVF-doxygen/html/html/search/files_10.js +8 -8
  199. package/SVF-doxygen/html/html/search/files_11.js +8 -8
  200. package/SVF-doxygen/html/html/search/files_12.js +2 -2
  201. package/SVF-doxygen/html/html/search/files_2.js +49 -49
  202. package/SVF-doxygen/html/html/search/files_3.js +14 -14
  203. package/SVF-doxygen/html/html/search/files_4.js +5 -5
  204. package/SVF-doxygen/html/html/search/files_5.js +13 -13
  205. package/SVF-doxygen/html/html/search/files_6.js +9 -9
  206. package/SVF-doxygen/html/html/search/files_7.js +14 -14
  207. package/SVF-doxygen/html/html/search/files_8.js +13 -13
  208. package/SVF-doxygen/html/html/search/files_9.js +18 -18
  209. package/SVF-doxygen/html/html/search/files_a.js +3 -3
  210. package/SVF-doxygen/html/html/search/files_b.js +2 -2
  211. package/SVF-doxygen/html/html/search/files_c.js +20 -20
  212. package/SVF-doxygen/html/html/search/files_d.js +4 -4
  213. package/SVF-doxygen/html/html/search/files_e.js +62 -62
  214. package/SVF-doxygen/html/html/search/files_f.js +8 -8
  215. package/SVF-doxygen/html/html/search/functions_0.js +12 -12
  216. package/SVF-doxygen/html/html/search/functions_1.js +350 -350
  217. package/SVF-doxygen/html/html/search/functions_10.js +140 -140
  218. package/SVF-doxygen/html/html/search/functions_11.js +127 -127
  219. package/SVF-doxygen/html/html/search/functions_12.js +275 -275
  220. package/SVF-doxygen/html/html/search/functions_13.js +58 -58
  221. package/SVF-doxygen/html/html/search/functions_14.js +38 -38
  222. package/SVF-doxygen/html/html/search/functions_15.js +71 -71
  223. package/SVF-doxygen/html/html/search/functions_16.js +29 -29
  224. package/SVF-doxygen/html/html/search/functions_17.js +3 -3
  225. package/SVF-doxygen/html/html/search/functions_18.js +169 -169
  226. package/SVF-doxygen/html/html/search/functions_2.js +84 -84
  227. package/SVF-doxygen/html/html/search/functions_3.js +253 -253
  228. package/SVF-doxygen/html/html/search/functions_4.js +74 -74
  229. package/SVF-doxygen/html/html/search/functions_5.js +51 -51
  230. package/SVF-doxygen/html/html/search/functions_6.js +58 -58
  231. package/SVF-doxygen/html/html/search/functions_7.js +842 -840
  232. package/SVF-doxygen/html/html/search/functions_8.js +143 -143
  233. package/SVF-doxygen/html/html/search/functions_9.js +422 -422
  234. package/SVF-doxygen/html/html/search/functions_a.js +30 -30
  235. package/SVF-doxygen/html/html/search/functions_b.js +2 -2
  236. package/SVF-doxygen/html/html/search/functions_c.js +26 -26
  237. package/SVF-doxygen/html/html/search/functions_d.js +77 -77
  238. package/SVF-doxygen/html/html/search/functions_e.js +35 -35
  239. package/SVF-doxygen/html/html/search/functions_f.js +56 -56
  240. package/SVF-doxygen/html/html/search/namespaces_0.js +1 -1
  241. package/SVF-doxygen/html/html/search/namespaces_1.js +7 -7
  242. package/SVF-doxygen/html/html/search/related_0.js +2 -2
  243. package/SVF-doxygen/html/html/search/related_1.js +1 -1
  244. package/SVF-doxygen/html/html/search/related_2.js +2 -2
  245. package/SVF-doxygen/html/html/search/related_3.js +2 -2
  246. package/SVF-doxygen/html/html/search/related_4.js +2 -2
  247. package/SVF-doxygen/html/html/search/related_5.js +1 -1
  248. package/SVF-doxygen/html/html/search/related_6.js +2 -2
  249. package/SVF-doxygen/html/html/search/related_7.js +4 -4
  250. package/SVF-doxygen/html/html/search/related_8.js +2 -2
  251. package/SVF-doxygen/html/html/search/related_9.js +4 -4
  252. package/SVF-doxygen/html/html/search/related_a.js +19 -19
  253. package/SVF-doxygen/html/html/search/related_b.js +4 -4
  254. package/SVF-doxygen/html/html/search/related_c.js +1 -1
  255. package/SVF-doxygen/html/html/search/related_d.js +11 -11
  256. package/SVF-doxygen/html/html/search/related_e.js +2 -2
  257. package/SVF-doxygen/html/html/search/related_f.js +2 -2
  258. package/SVF-doxygen/html/html/search/typedefs_0.js +18 -18
  259. package/SVF-doxygen/html/html/search/typedefs_1.js +25 -25
  260. package/SVF-doxygen/html/html/search/typedefs_10.js +62 -60
  261. package/SVF-doxygen/html/html/search/typedefs_11.js +13 -13
  262. package/SVF-doxygen/html/html/search/typedefs_12.js +11 -11
  263. package/SVF-doxygen/html/html/search/typedefs_13.js +35 -35
  264. package/SVF-doxygen/html/html/search/typedefs_14.js +8 -8
  265. package/SVF-doxygen/html/html/search/typedefs_2.js +126 -126
  266. package/SVF-doxygen/html/html/search/typedefs_3.js +39 -39
  267. package/SVF-doxygen/html/html/search/typedefs_4.js +16 -16
  268. package/SVF-doxygen/html/html/search/typedefs_5.js +41 -41
  269. package/SVF-doxygen/html/html/search/typedefs_6.js +52 -52
  270. package/SVF-doxygen/html/html/search/typedefs_7.js +40 -40
  271. package/SVF-doxygen/html/html/search/typedefs_8.js +1 -1
  272. package/SVF-doxygen/html/html/search/typedefs_9.js +6 -6
  273. package/SVF-doxygen/html/html/search/typedefs_a.js +29 -29
  274. package/SVF-doxygen/html/html/search/typedefs_b.js +29 -29
  275. package/SVF-doxygen/html/html/search/typedefs_c.js +40 -40
  276. package/SVF-doxygen/html/html/search/typedefs_d.js +15 -15
  277. package/SVF-doxygen/html/html/search/typedefs_e.js +52 -52
  278. package/SVF-doxygen/html/html/search/typedefs_f.js +14 -14
  279. package/SVF-doxygen/html/html/search/variables_0.js +147 -147
  280. package/SVF-doxygen/html/html/search/variables_1.js +75 -75
  281. package/SVF-doxygen/html/html/search/variables_10.js +97 -97
  282. package/SVF-doxygen/html/html/search/variables_11.js +46 -46
  283. package/SVF-doxygen/html/html/search/variables_12.js +92 -92
  284. package/SVF-doxygen/html/html/search/variables_13.js +75 -75
  285. package/SVF-doxygen/html/html/search/variables_14.js +14 -14
  286. package/SVF-doxygen/html/html/search/variables_15.js +48 -48
  287. package/SVF-doxygen/html/html/search/variables_16.js +9 -9
  288. package/SVF-doxygen/html/html/search/variables_17.js +1 -1
  289. package/SVF-doxygen/html/html/search/variables_18.js +2 -2
  290. package/SVF-doxygen/html/html/search/variables_2.js +34 -34
  291. package/SVF-doxygen/html/html/search/variables_3.js +141 -141
  292. package/SVF-doxygen/html/html/search/variables_4.js +55 -55
  293. package/SVF-doxygen/html/html/search/variables_5.js +38 -38
  294. package/SVF-doxygen/html/html/search/variables_6.js +66 -66
  295. package/SVF-doxygen/html/html/search/variables_7.js +33 -33
  296. package/SVF-doxygen/html/html/search/variables_8.js +7 -7
  297. package/SVF-doxygen/html/html/search/variables_9.js +77 -77
  298. package/SVF-doxygen/html/html/search/variables_a.js +4 -4
  299. package/SVF-doxygen/html/html/search/variables_b.js +10 -10
  300. package/SVF-doxygen/html/html/search/variables_c.js +45 -45
  301. package/SVF-doxygen/html/html/search/variables_d.js +56 -56
  302. package/SVF-doxygen/html/html/search/variables_e.js +123 -123
  303. package/SVF-doxygen/html/html/search/variables_f.js +30 -30
  304. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  305. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  306. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  307. package/package.json +1 -1
  308. package/svf/include/AbstractExecution/SVFIR2ItvExeState.h +5 -5
  309. package/svf/lib/AbstractExecution/SVFIR2ItvExeState.cpp +77 -57
  310. package/svf-llvm/include/SVF-LLVM/BasicTypes.h +4 -0
  311. package/svf-llvm/include/SVF-LLVM/LLVMUtil.h +49 -0
  312. package/svf-llvm/lib/LLVMUtil.cpp +37 -0
  313. package/svf-llvm/lib/SVFIRBuilder.cpp +10 -9
@@ -152,7 +152,7 @@ void SVFIR2ItvExeState::narrowVAddrs(IntervalExeState &lhs, const IntervalExeSta
152
152
  }
153
153
  }
154
154
 
155
- SVFIR2ItvExeState::VAddrs SVFIR2ItvExeState::getGepObjAddress(u32_t pointer, s32_t offset)
155
+ SVFIR2ItvExeState::VAddrs SVFIR2ItvExeState::getGepObjAddress(u32_t pointer, APOffset offset)
156
156
  {
157
157
  assert(!getVAddrs(pointer).empty());
158
158
  VAddrs &addrs = getVAddrs(pointer);
@@ -173,37 +173,53 @@ SVFIR2ItvExeState::VAddrs SVFIR2ItvExeState::getGepObjAddress(u32_t pointer, s32
173
173
  return ret;
174
174
  }
175
175
 
176
- std::pair<s32_t, s32_t> SVFIR2ItvExeState::getBytefromGepTypePair(const AccessPath::VarAndGepTypePair& gep_pair, const GepStmt *gep, s32_t elemBytesize)
176
+ std::pair<APOffset, APOffset> SVFIR2ItvExeState::getBytefromGepTypePair(const AccessPath::VarAndGepTypePair& gep_pair, const GepStmt *gep, APOffset elemBytesize)
177
177
  {
178
178
  const SVFValue *value = gep_pair.first->getValue();
179
179
  const SVFType *type = gep_pair.second;
180
180
  const SVFConstantInt *op = SVFUtil::dyn_cast<SVFConstantInt>(value);
181
- s32_t offsetLb = 0;
182
- s32_t offsetUb = 0;
181
+ APOffset offsetLb = 0;
182
+ APOffset offsetUb = 0;
183
183
  /// set largest byte offset is 0xFFFFFF in case of int32 overflow
184
- s32_t maxFieldLimit = 0xFFFFFF;
184
+ APOffset maxByteLimit = 99999;
185
+ APOffset minByteLimit = -99999;
186
+ auto valueReshape = [&](s64_t offset)
187
+ {
188
+ if (offset < (s64_t)minByteLimit)
189
+ {
190
+ return minByteLimit;
191
+ }
192
+ else if (offset > (s64_t)maxByteLimit)
193
+ {
194
+ return maxByteLimit;
195
+ }
196
+ else
197
+ {
198
+ return offset;
199
+ }
200
+ };
185
201
  /// offset is constant but stored in variable
186
202
  if (op)
187
203
  {
188
- offsetLb = offsetUb = op->getSExtValue() >
189
- maxFieldLimit? maxFieldLimit: op->getSExtValue();
204
+ offsetLb = offsetUb = op->getSExtValue() > maxByteLimit
205
+ ? maxByteLimit
206
+ : op->getSExtValue();
190
207
  }
191
208
  else
192
209
  {
193
210
  u32_t idx = _svfir->getValueNode(value);
194
211
  IntervalValue &idxVal = _es[idx];
195
212
  if (idxVal.isBottom() || idxVal.isTop())
196
- return std::make_pair(0, maxFieldLimit);
213
+ return std::make_pair(0, maxByteLimit);
197
214
  // if idxVal is a concrete value
198
215
  if (idxVal.is_numeral())
199
216
  {
200
- offsetLb = offsetUb = idxVal.lb().getNumeral()>
201
- maxFieldLimit? maxFieldLimit: idxVal.lb().getNumeral();
217
+ offsetLb = offsetUb = valueReshape(idxVal.lb().getNumeral());
202
218
  }
203
219
  else
204
220
  {
205
- offsetLb = idxVal.lb().getNumeral()> maxFieldLimit? maxFieldLimit:idxVal.lb().getNumeral() * elemBytesize ;
206
- offsetUb = idxVal.ub().getNumeral() > maxFieldLimit? maxFieldLimit:idxVal.ub().getNumeral() * elemBytesize;
221
+ offsetLb = valueReshape(idxVal.lb().getNumeral());
222
+ offsetUb = valueReshape(idxVal.ub().getNumeral());
207
223
  }
208
224
  }
209
225
 
@@ -224,19 +240,34 @@ std::pair<s32_t, s32_t> SVFIR2ItvExeState::getBytefromGepTypePair(const AccessPa
224
240
  }
225
241
 
226
242
 
227
- std::pair<s32_t, s32_t> SVFIR2ItvExeState::getIndexfromGepTypePair(const AccessPath::VarAndGepTypePair& gep_pair, const GepStmt *gep)
243
+ std::pair<APOffset, APOffset> SVFIR2ItvExeState::getIndexfromGepTypePair(const AccessPath::VarAndGepTypePair& gep_pair, const GepStmt *gep)
228
244
  {
229
245
  const SVFValue *value = gep_pair.first->getValue();
230
246
  const SVFType *type = gep_pair.second;
231
247
  const SVFConstantInt *op = SVFUtil::dyn_cast<SVFConstantInt>(value);
232
- s32_t offsetLb = 0;
233
- s32_t offsetUb = 0;
234
- s32_t maxFieldLimit = (s32_t)Options::MaxFieldLimit();
248
+ APOffset offsetLb = 0;
249
+ APOffset offsetUb = 0;
250
+ APOffset maxFieldLimit = (APOffset)Options::MaxFieldLimit();
251
+ APOffset minFieldLimit = 0;
252
+ auto valueReshape = [&](s64_t offset)
253
+ {
254
+ if (offset < minFieldLimit)
255
+ {
256
+ return minFieldLimit;
257
+ }
258
+ else if (offset > maxFieldLimit)
259
+ {
260
+ return maxFieldLimit;
261
+ }
262
+ else
263
+ {
264
+ return offset;
265
+ }
266
+ };
235
267
  /// offset is constant but stored in variable
236
268
  if (op)
237
269
  {
238
- offsetLb = offsetUb = op->getSExtValue() >
239
- maxFieldLimit? maxFieldLimit: op->getSExtValue();
270
+ offsetLb = offsetUb = valueReshape(op->getSExtValue());
240
271
  }
241
272
  else
242
273
  {
@@ -244,27 +275,16 @@ std::pair<s32_t, s32_t> SVFIR2ItvExeState::getIndexfromGepTypePair(const AccessP
244
275
  //if (!inVarToIValTable(idx)) return std::make_pair(-1, -1);
245
276
  IntervalValue &idxVal = _es[idx];
246
277
  if (idxVal.isBottom() || idxVal.isTop())
247
- return std::make_pair(0, (s32_t)Options::MaxFieldLimit());
278
+ return std::make_pair(0, Options::MaxFieldLimit());
248
279
  // if idxVal is a concrete value
249
280
  if (idxVal.is_numeral())
250
281
  {
251
- offsetLb = offsetUb = idxVal.lb().getNumeral()>
252
- maxFieldLimit? maxFieldLimit: idxVal.lb().getNumeral();
282
+ offsetLb = offsetUb = valueReshape(idxVal.lb().getNumeral());
253
283
  }
254
284
  else
255
285
  {
256
- offsetLb = idxVal.lb().getNumeral() < 0
257
- ? 0
258
- : idxVal.lb().getNumeral();
259
- offsetLb = idxVal.lb().getNumeral() > maxFieldLimit
260
- ? maxFieldLimit
261
- : offsetLb;
262
- offsetUb = idxVal.ub().getNumeral() < 0
263
- ? 0
264
- : idxVal.ub().getNumeral();
265
- offsetUb = idxVal.ub().getNumeral() > maxFieldLimit
266
- ? maxFieldLimit
267
- : offsetUb;
286
+ offsetLb = valueReshape(idxVal.lb().getNumeral());
287
+ offsetUb = valueReshape(idxVal.ub().getNumeral());
268
288
  }
269
289
  }
270
290
 
@@ -280,8 +300,8 @@ std::pair<s32_t, s32_t> SVFIR2ItvExeState::getIndexfromGepTypePair(const AccessP
280
300
  const std::vector<u32_t>& so = SymbolTableInfo::SymbolInfo()
281
301
  ->getTypeInfo(type)
282
302
  ->getFlattenedElemIdxVec();
283
- if (so.empty() || (u32_t)offsetUb >= so.size() ||
284
- (u32_t)offsetLb >= so.size())
303
+ if (so.empty() || offsetUb >= (APOffset)so.size() ||
304
+ offsetLb >= (APOffset)so.size())
285
305
  {
286
306
  offsetLb = 0;
287
307
  offsetUb = maxFieldLimit;
@@ -301,26 +321,26 @@ std::pair<s32_t, s32_t> SVFIR2ItvExeState::getIndexfromGepTypePair(const AccessP
301
321
  }
302
322
 
303
323
 
304
- std::pair<s32_t, s32_t> SVFIR2ItvExeState::getGepByteOffset(const GepStmt *gep, s32_t elemBytesize)
324
+ std::pair<APOffset, APOffset> SVFIR2ItvExeState::getGepByteOffset(const GepStmt *gep, APOffset elemBytesize)
305
325
  {
306
326
  /// for instant constant index, e.g. gep arr, 1
307
327
  if (gep->getOffsetVarAndGepTypePairVec().empty())
308
328
  return std::make_pair(gep->getConstantFieldIdx(), gep->getConstantFieldIdx());
309
- s32_t totalOffsetLb = 0;
310
- s32_t totalOffsetUb = 0;
329
+ APOffset totalOffsetLb = 0;
330
+ APOffset totalOffsetUb = 0;
311
331
  /// default value of MaxFieldLimit is 512
312
- u32_t maxFieldLimit = 0xFFFFFF;
332
+ APOffset maxFieldLimit = 0xFFFFFF;
313
333
  for (int i = gep->getOffsetVarAndGepTypePairVec().size() - 1; i >= 0; i--)
314
334
  {
315
- std::pair<s32_t, s32_t> offsetIdx = getBytefromGepTypePair(
316
- gep->getOffsetVarAndGepTypePairVec()[i], gep, elemBytesize);
317
- s32_t offsetLb = offsetIdx.first;
318
- s32_t offsetUb = offsetIdx.second;
319
- if ((long long) (totalOffsetLb + offsetLb) > maxFieldLimit)
335
+ std::pair<APOffset, APOffset> offsetIdx = getBytefromGepTypePair(
336
+ gep->getOffsetVarAndGepTypePairVec()[i], gep, elemBytesize);
337
+ APOffset offsetLb = offsetIdx.first;
338
+ APOffset offsetUb = offsetIdx.second;
339
+ if (totalOffsetLb + offsetLb > maxFieldLimit)
320
340
  totalOffsetLb = maxFieldLimit;
321
341
  else
322
342
  totalOffsetLb += offsetLb;
323
- if ((long long) (totalOffsetUb + offsetUb) > maxFieldLimit)
343
+ if (totalOffsetUb + offsetUb > maxFieldLimit)
324
344
  totalOffsetUb = maxFieldLimit;
325
345
  else
326
346
  totalOffsetUb += offsetUb ;
@@ -329,21 +349,21 @@ std::pair<s32_t, s32_t> SVFIR2ItvExeState::getGepByteOffset(const GepStmt *gep,
329
349
  }
330
350
 
331
351
 
332
- std::pair<s32_t, s32_t> SVFIR2ItvExeState::getGepOffset(const GepStmt *gep)
352
+ std::pair<APOffset, APOffset> SVFIR2ItvExeState::getGepOffset(const GepStmt *gep)
333
353
  {
334
354
  /// for instant constant index, e.g. gep arr, 1
335
355
  if (gep->getOffsetVarAndGepTypePairVec().empty())
336
356
  return std::make_pair(gep->getConstantFieldIdx(), gep->getConstantFieldIdx());
337
- s32_t totalOffsetLb = 0;
338
- s32_t totalOffsetUb = 0;
357
+ APOffset totalOffsetLb = 0;
358
+ APOffset totalOffsetUb = 0;
339
359
  /// default value of MaxFieldLimit is 512
340
- u32_t maxFieldLimit = Options::MaxFieldLimit() - 1;
360
+ APOffset maxFieldLimit = Options::MaxFieldLimit() - 1;
341
361
  for (int i = gep->getOffsetVarAndGepTypePairVec().size() - 1; i >= 0; i--)
342
362
  {
343
- std::pair<s32_t, s32_t> offsetIdx = getIndexfromGepTypePair(
344
- gep->getOffsetVarAndGepTypePairVec()[i], gep);
345
- s32_t offsetLb = offsetIdx.first;
346
- s32_t offsetUb = offsetIdx.second;
363
+ std::pair<APOffset, APOffset> offsetIdx = getIndexfromGepTypePair(
364
+ gep->getOffsetVarAndGepTypePairVec()[i], gep);
365
+ APOffset offsetLb = offsetIdx.first;
366
+ APOffset offsetUb = offsetIdx.second;
347
367
  if ((long long) (totalOffsetLb + offsetLb) > maxFieldLimit)
348
368
  totalOffsetLb = maxFieldLimit;
349
369
  else
@@ -842,7 +862,7 @@ void SVFIR2ItvExeState::translateGep(const GepStmt *gep)
842
862
  assert(!getVAddrs(rhs).empty());
843
863
  VAddrs &rhsVal = getVAddrs(rhs);
844
864
  if (rhsVal.empty()) return;
845
- std::pair<s32_t, s32_t> offsetPair = getGepOffset(gep);
865
+ std::pair<APOffset, APOffset> offsetPair = getGepOffset(gep);
846
866
  if (offsetPair.first == -1 && offsetPair.second == -1) return;
847
867
  if (!isVirtualMemAddress(*rhsVal.begin()))
848
868
  {
@@ -851,12 +871,12 @@ void SVFIR2ItvExeState::translateGep(const GepStmt *gep)
851
871
  else
852
872
  {
853
873
  VAddrs gepAddrs;
854
- s32_t ub = offsetPair.second;
855
- if (offsetPair.second > (s32_t) Options::MaxFieldLimit() - 1)
874
+ APOffset ub = offsetPair.second;
875
+ if (offsetPair.second > Options::MaxFieldLimit() - 1)
856
876
  {
857
877
  ub = Options::MaxFieldLimit() - 1;
858
878
  }
859
- for (s32_t i = offsetPair.first; i <= ub; i++)
879
+ for (APOffset i = offsetPair.first; i <= ub; i++)
860
880
  {
861
881
  gepAddrs.join_with(getGepObjAddress(rhs, i));
862
882
  }
@@ -178,6 +178,10 @@ typedef llvm::BinaryOperator BinaryOperator;
178
178
  typedef llvm::UnaryOperator UnaryOperator;
179
179
  typedef llvm::UndefValue UndefValue;
180
180
 
181
+ // Related to Switch Case
182
+ typedef std::pair<const BasicBlock*, const ConstantInt*> SuccBBAndCondValPair;
183
+ typedef std::vector<SuccBBAndCondValPair> SuccBBAndCondValPairVec;
184
+
181
185
  // LLVM Intrinsic Instructions
182
186
  #if LLVM_VERSION_MAJOR >= 13
183
187
  typedef llvm::IntrinsicInst IntrinsicInst;
@@ -519,6 +519,55 @@ std::string llvmToString(const T& val)
519
519
  llvm::raw_string_ostream(str) << val;
520
520
  return str;
521
521
  }
522
+
523
+ /**
524
+ * See more: https://github.com/SVF-tools/SVF/pull/1191
525
+ *
526
+ * Given the code:
527
+ *
528
+ * switch (a) {
529
+ * case 0: printf("0\n"); break;
530
+ * case 1:
531
+ * case 2:
532
+ * case 3: printf("a >=1 && a <= 3\n"); break;
533
+ * case 4:
534
+ * case 6:
535
+ * case 7: printf("a >= 4 && a <=7\n"); break;
536
+ * default: printf("a < 0 || a > 7"); break;
537
+ * }
538
+ *
539
+ * Generate the IR:
540
+ *
541
+ * switch i32 %0, label %sw.default [
542
+ * i32 0, label %sw.bb
543
+ * i32 1, label %sw.bb1
544
+ * i32 2, label %sw.bb1
545
+ * i32 3, label %sw.bb1
546
+ * i32 4, label %sw.bb3
547
+ * i32 6, label %sw.bb3
548
+ * i32 7, label %sw.bb3
549
+ * ]
550
+ *
551
+ * We can get every case basic block and related case value:
552
+ * [
553
+ * {%sw.default, -1},
554
+ * {%sw.bb, 0},
555
+ * {%sw.bb1, 1},
556
+ * {%sw.bb1, 2},
557
+ * {%sw.bb1, 3},
558
+ * {%sw.bb3, 4},
559
+ * {%sw.bb3, 6},
560
+ * {%sw.bb3, 7},
561
+ * ]
562
+ * Note: default case value is nullptr
563
+ */
564
+ void getSuccBBandCondValPairVec(const SwitchInst &switchInst, SuccBBAndCondValPairVec &vec);
565
+
566
+ /**
567
+ * Note: default case value is nullptr
568
+ */
569
+ s64_t getCaseValue(const SwitchInst &switchInst, SuccBBAndCondValPair &succBB2CondVal);
570
+
522
571
  } // End namespace LLVMUtil
523
572
 
524
573
  } // End namespace SVF
@@ -1152,6 +1152,43 @@ s32_t LLVMUtil::getVCallIdx(const CallBase* cs)
1152
1152
  return idx_value;
1153
1153
  }
1154
1154
 
1155
+ void LLVMUtil::getSuccBBandCondValPairVec(const SwitchInst &switchInst, SuccBBAndCondValPairVec &vec)
1156
+ {
1157
+ // get default successor basic block and default case value (nullptr)
1158
+ vec.push_back({switchInst.getDefaultDest(), nullptr});
1159
+
1160
+ // get normal case value and it's successor basic block
1161
+ for (const auto& cs : switchInst.cases())
1162
+ vec.push_back({cs.getCaseSuccessor(), cs.getCaseValue()});
1163
+ }
1164
+
1165
+ s64_t LLVMUtil::getCaseValue(const SwitchInst &switchInst, SuccBBAndCondValPair &succBB2CondVal)
1166
+ {
1167
+ const BasicBlock* succBB = succBB2CondVal.first;
1168
+ const ConstantInt* caseValue = succBB2CondVal.second;
1169
+ s64_t val;
1170
+ if (caseValue == nullptr || succBB == switchInst.getDefaultDest())
1171
+ {
1172
+ /// default case value is set to -1
1173
+ val = -1;
1174
+ }
1175
+ else
1176
+ {
1177
+ /// get normal case value
1178
+ if (caseValue->getBitWidth() <= 64)
1179
+ {
1180
+ val = caseValue->getSExtValue();
1181
+ }
1182
+ else
1183
+ {
1184
+ /// For larger number, we preserve case value just -1 now
1185
+ /// see more: https://github.com/SVF-tools/SVF/pull/992
1186
+ val = -1;
1187
+ }
1188
+ }
1189
+ return val;
1190
+ }
1191
+
1155
1192
  namespace SVF
1156
1193
  {
1157
1194
  std::string SVFValue::toString() const
@@ -946,19 +946,20 @@ void SVFIRBuilder::visitSwitchInst(SwitchInst &inst)
946
946
  NodeID cond = getValueNode(inst.getCondition());
947
947
 
948
948
  BranchStmt::SuccAndCondPairVec successors;
949
- for (u32_t i = 0; i < inst.getNumSuccessors(); ++i)
949
+
950
+ // get case successor basic block and related case value
951
+ SuccBBAndCondValPairVec succBB2CondValPairVec;
952
+ LLVMUtil::getSuccBBandCondValPairVec(inst, succBB2CondValPairVec);
953
+ for (auto &succBB2CaseValue : succBB2CondValPairVec)
950
954
  {
951
- const Instruction* succInst = &inst.getSuccessor(i)->front();
952
- const ConstantInt* condVal = inst.findCaseDest(inst.getSuccessor(i));
953
- /// default case is set to -1;
954
- s64_t val = -1;
955
- if (condVal && condVal->getBitWidth() <= 64)
956
- val = condVal->getSExtValue();
955
+ s64_t val = LLVMUtil::getCaseValue(inst, succBB2CaseValue);
956
+ const BasicBlock *succBB = succBB2CaseValue.first;
957
+ const Instruction* succInst = &succBB->front();
957
958
  const SVFInstruction* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(succInst);
958
959
  const ICFGNode* icfgNode = pag->getICFG()->getICFGNode(svfSuccInst);
959
- successors.push_back(std::make_pair(icfgNode,val));
960
+ successors.push_back(std::make_pair(icfgNode, val));
960
961
  }
961
- addBranchStmt(brinst, cond,successors);
962
+ addBranchStmt(brinst, cond, successors);
962
963
  }
963
964
 
964
965
  /// %ap = alloca %struct.va_list