svf-tools 1.0.795 → 1.0.796

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 (448) hide show
  1. package/SVF-doxygen/html/AccessPath_8cpp_source.html +167 -161
  2. package/SVF-doxygen/html/AccessPath_8h_source.html +51 -51
  3. package/SVF-doxygen/html/AndersenSCD_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/AndersenStat_8cpp_source.html +1 -1
  5. package/SVF-doxygen/html/AndersenWaveDiff_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/Andersen_8cpp_source.html +6 -6
  7. package/SVF-doxygen/html/CFLAlias_8cpp_source.html +5 -5
  8. package/SVF-doxygen/html/CFLAlias_8h_source.html +3 -3
  9. package/SVF-doxygen/html/CFLBase_8cpp_source.html +1 -1
  10. package/SVF-doxygen/html/CHGBuilder_8cpp_source.html +4 -4
  11. package/SVF-doxygen/html/ConsG_8cpp_source.html +1 -1
  12. package/SVF-doxygen/html/ContextDDA_8cpp_source.html +5 -5
  13. package/SVF-doxygen/html/ContextDDA_8h_source.html +2 -2
  14. package/SVF-doxygen/html/CxtStmt_8h_source.html +1 -1
  15. package/SVF-doxygen/html/DDAClient_8cpp_source.html +5 -5
  16. package/SVF-doxygen/html/DDAPass_8cpp_source.html +2 -2
  17. package/SVF-doxygen/html/DDAPass_8h_source.html +1 -1
  18. package/SVF-doxygen/html/DDAStat_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/DDAVFSolver_8h_source.html +4 -4
  20. package/SVF-doxygen/html/FSMPTA_8cpp_source.html +3 -3
  21. package/SVF-doxygen/html/FlowDDA_8cpp_source.html +5 -5
  22. package/SVF-doxygen/html/FlowDDA_8h_source.html +2 -2
  23. package/SVF-doxygen/html/FlowSensitiveStat_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/FlowSensitive_8cpp_source.html +5 -5
  25. package/SVF-doxygen/html/ICFGBuilder_8cpp_source.html +2 -2
  26. package/SVF-doxygen/html/ICFG_8cpp_source.html +1 -1
  27. package/SVF-doxygen/html/IRGraph_8cpp_source.html +2 -2
  28. package/SVF-doxygen/html/LLVMLoopAnalysis_8cpp_source.html +2 -2
  29. package/SVF-doxygen/html/LLVMModule_8cpp_source.html +10 -10
  30. package/SVF-doxygen/html/LLVMUtil_8cpp_source.html +40 -27
  31. package/SVF-doxygen/html/LeakChecker_8cpp_source.html +1 -1
  32. package/SVF-doxygen/html/LockAnalysis_8cpp_source.html +5 -5
  33. package/SVF-doxygen/html/LockAnalysis_8h_source.html +2 -2
  34. package/SVF-doxygen/html/LockResultValidator_8cpp_source.html +1 -1
  35. package/SVF-doxygen/html/MHP_8cpp_source.html +6 -6
  36. package/SVF-doxygen/html/MTAAnnotator_8cpp_source.html +2 -2
  37. package/SVF-doxygen/html/MTA_8cpp_source.html +5 -5
  38. package/SVF-doxygen/html/MemRegion_8cpp_source.html +7 -7
  39. package/SVF-doxygen/html/MemRegion_8h_source.html +1 -1
  40. package/SVF-doxygen/html/MemSSA_8cpp_source.html +4 -4
  41. package/SVF-doxygen/html/NodeIDAllocator_8cpp_source.html +2 -2
  42. package/SVF-doxygen/html/PCG_8cpp_source.html +2 -2
  43. package/SVF-doxygen/html/PointerAnalysisImpl_8cpp_source.html +3 -3
  44. package/SVF-doxygen/html/PointerAnalysisImpl_8h_source.html +4 -4
  45. package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +7 -7
  46. package/SVF-doxygen/html/PointerAnalysis_8h_source.html +1 -1
  47. package/SVF-doxygen/html/ProgSlice_8cpp_source.html +2 -2
  48. package/SVF-doxygen/html/SVFFileSystem_8cpp_source.html +6 -6
  49. package/SVF-doxygen/html/SVFFileSystem_8h_source.html +6 -6
  50. package/SVF-doxygen/html/SVFGBuilder_8cpp_source.html +2 -2
  51. package/SVF-doxygen/html/SVFGOPT_8cpp_source.html +2 -2
  52. package/SVF-doxygen/html/SVFGStat_8cpp_source.html +1 -1
  53. package/SVF-doxygen/html/SVFG_8cpp_source.html +2 -2
  54. package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +3 -3
  55. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +773 -777
  56. package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +20 -20
  57. package/SVF-doxygen/html/SVFIRBuilder_8cpp_source.html +5 -5
  58. package/SVF-doxygen/html/SVFIRExtAPI_8cpp_source.html +1 -1
  59. package/SVF-doxygen/html/SVFStat_8cpp_source.html +1 -1
  60. package/SVF-doxygen/html/SVFStatements_8cpp_source.html +1 -1
  61. package/SVF-doxygen/html/SVFStatements_8h_source.html +5 -5
  62. package/SVF-doxygen/html/SVFType_8cpp.html +2 -2
  63. package/SVF-doxygen/html/SVFType_8cpp_source.html +70 -61
  64. package/SVF-doxygen/html/SVFType_8h.html +23 -23
  65. package/SVF-doxygen/html/SVFType_8h_source.html +401 -378
  66. package/SVF-doxygen/html/SVFUtil_8h_source.html +1 -1
  67. package/SVF-doxygen/html/SVFValue_8cpp_source.html +4 -4
  68. package/SVF-doxygen/html/SVFValue_8h_source.html +3 -3
  69. package/SVF-doxygen/html/SVFVariables_8cpp_source.html +2 -2
  70. package/SVF-doxygen/html/SaberCondAllocator_8cpp_source.html +3 -3
  71. package/SVF-doxygen/html/SaberSVFGBuilder_8cpp_source.html +2 -2
  72. package/SVF-doxygen/html/SrcSnkDDA_8cpp_source.html +3 -3
  73. package/SVF-doxygen/html/Steensgaard_8cpp_source.html +5 -5
  74. package/SVF-doxygen/html/SymbolTableBuilder_8cpp_source.html +4 -4
  75. package/SVF-doxygen/html/SymbolTableInfo_8cpp_source.html +7 -7
  76. package/SVF-doxygen/html/SymbolTableInfo_8h_source.html +1 -1
  77. package/SVF-doxygen/html/TCT_8cpp_source.html +2 -2
  78. package/SVF-doxygen/html/ThreadCallGraph_8cpp_source.html +2 -2
  79. package/SVF-doxygen/html/VFG_8cpp_source.html +2 -2
  80. package/SVF-doxygen/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
  81. package/SVF-doxygen/html/VersionedFlowSensitive_8cpp_source.html +1 -1
  82. package/SVF-doxygen/html/WPAPass_8cpp_source.html +4 -4
  83. package/SVF-doxygen/html/WPAPass_8h_source.html +2 -2
  84. package/SVF-doxygen/html/classSVF_1_1AccessPath-members.html +1 -1
  85. package/SVF-doxygen/html/classSVF_1_1AccessPath.html +167 -161
  86. package/SVF-doxygen/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  87. package/SVF-doxygen/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  88. package/SVF-doxygen/html/classSVF_1_1AddrStmt.html +1 -1
  89. package/SVF-doxygen/html/classSVF_1_1AliasDDAClient.html +2 -2
  90. package/SVF-doxygen/html/classSVF_1_1Andersen.html +5 -5
  91. package/SVF-doxygen/html/classSVF_1_1AndersenBase.html +2 -2
  92. package/SVF-doxygen/html/classSVF_1_1AndersenSCD.html +1 -1
  93. package/SVF-doxygen/html/classSVF_1_1AndersenStat.html +1 -1
  94. package/SVF-doxygen/html/classSVF_1_1AndersenWaveDiff.html +1 -1
  95. package/SVF-doxygen/html/classSVF_1_1BVDataPTAImpl.html +2 -2
  96. package/SVF-doxygen/html/classSVF_1_1BinaryOPStmt.html +1 -1
  97. package/SVF-doxygen/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  98. package/SVF-doxygen/html/classSVF_1_1BranchStmt.html +1 -1
  99. package/SVF-doxygen/html/classSVF_1_1CFLAlias.html +7 -7
  100. package/SVF-doxygen/html/classSVF_1_1CFLBase.html +1 -1
  101. package/SVF-doxygen/html/classSVF_1_1CHGBuilder.html +4 -4
  102. package/SVF-doxygen/html/classSVF_1_1CallCFGEdge.html +1 -1
  103. package/SVF-doxygen/html/classSVF_1_1CallPE.html +1 -1
  104. package/SVF-doxygen/html/classSVF_1_1CmpStmt.html +1 -1
  105. package/SVF-doxygen/html/classSVF_1_1CmpVFGNode.html +1 -1
  106. package/SVF-doxygen/html/classSVF_1_1CondPTAImpl.html +3 -3
  107. package/SVF-doxygen/html/classSVF_1_1ContextDDA.html +5 -5
  108. package/SVF-doxygen/html/classSVF_1_1CopyStmt.html +1 -1
  109. package/SVF-doxygen/html/classSVF_1_1CxtStmt.html +1 -1
  110. package/SVF-doxygen/html/classSVF_1_1CxtThread.html +1 -1
  111. package/SVF-doxygen/html/classSVF_1_1CxtThreadStmt.html +1 -1
  112. package/SVF-doxygen/html/classSVF_1_1DDAClient.html +3 -3
  113. package/SVF-doxygen/html/classSVF_1_1DDAPass.html +1 -1
  114. package/SVF-doxygen/html/classSVF_1_1DDAStat.html +1 -1
  115. package/SVF-doxygen/html/classSVF_1_1DDAVFSolver.html +4 -4
  116. package/SVF-doxygen/html/classSVF_1_1DoubleFreeChecker.html +1 -1
  117. package/SVF-doxygen/html/classSVF_1_1FIObjVar.html +1 -1
  118. package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +5 -5
  119. package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +5 -5
  120. package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat.html +1 -1
  121. package/SVF-doxygen/html/classSVF_1_1ForkJoinAnalysis.html +3 -3
  122. package/SVF-doxygen/html/classSVF_1_1GepObjVar.html +1 -1
  123. package/SVF-doxygen/html/classSVF_1_1GepStmt-members.html +1 -1
  124. package/SVF-doxygen/html/classSVF_1_1GepStmt.html +9 -10
  125. package/SVF-doxygen/html/classSVF_1_1GepValVar.html +1 -1
  126. package/SVF-doxygen/html/classSVF_1_1ICFG.html +1 -1
  127. package/SVF-doxygen/html/classSVF_1_1ICFGBuilder.html +2 -2
  128. package/SVF-doxygen/html/classSVF_1_1IRGraph.html +2 -2
  129. package/SVF-doxygen/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  130. package/SVF-doxygen/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  131. package/SVF-doxygen/html/classSVF_1_1IntraCFGEdge.html +1 -1
  132. package/SVF-doxygen/html/classSVF_1_1IntraICFGNode.html +1 -1
  133. package/SVF-doxygen/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  134. package/SVF-doxygen/html/classSVF_1_1LLVMLoopAnalysis.html +2 -2
  135. package/SVF-doxygen/html/classSVF_1_1LLVMModuleSet.html +10 -10
  136. package/SVF-doxygen/html/classSVF_1_1LeakChecker.html +2 -2
  137. package/SVF-doxygen/html/classSVF_1_1LoadStmt.html +1 -1
  138. package/SVF-doxygen/html/classSVF_1_1LockAnalysis.html +5 -5
  139. package/SVF-doxygen/html/classSVF_1_1LockResultValidator.html +1 -1
  140. package/SVF-doxygen/html/classSVF_1_1MHP.html +6 -6
  141. package/SVF-doxygen/html/classSVF_1_1MRGenerator.html +6 -6
  142. package/SVF-doxygen/html/classSVF_1_1MTA.html +5 -5
  143. package/SVF-doxygen/html/classSVF_1_1MTAAnnotator.html +2 -2
  144. package/SVF-doxygen/html/classSVF_1_1MTAResultValidator.html +1 -1
  145. package/SVF-doxygen/html/classSVF_1_1MTASVFGBuilder.html +3 -3
  146. package/SVF-doxygen/html/classSVF_1_1MemObj.html +1 -1
  147. package/SVF-doxygen/html/classSVF_1_1MemSSA.html +4 -4
  148. package/SVF-doxygen/html/classSVF_1_1MemSSAStat.html +1 -1
  149. package/SVF-doxygen/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +2 -2
  150. package/SVF-doxygen/html/classSVF_1_1ObjTypeInfo.html +1 -1
  151. package/SVF-doxygen/html/classSVF_1_1ObjVar.html +1 -1
  152. package/SVF-doxygen/html/classSVF_1_1PCG.html +2 -2
  153. package/SVF-doxygen/html/classSVF_1_1PHIVFGNode.html +1 -1
  154. package/SVF-doxygen/html/classSVF_1_1PhiStmt.html +1 -1
  155. package/SVF-doxygen/html/classSVF_1_1PointerAnalysis.html +7 -7
  156. package/SVF-doxygen/html/classSVF_1_1ProgSlice.html +2 -2
  157. package/SVF-doxygen/html/classSVF_1_1RetCFGEdge.html +1 -1
  158. package/SVF-doxygen/html/classSVF_1_1RetPE.html +1 -1
  159. package/SVF-doxygen/html/classSVF_1_1SVFArrayType-members.html +11 -7
  160. package/SVF-doxygen/html/classSVF_1_1SVFArrayType.html +65 -27
  161. package/SVF-doxygen/html/classSVF_1_1SVFFunction.html +1 -1
  162. package/SVF-doxygen/html/classSVF_1_1SVFFunctionType-members.html +30 -27
  163. package/SVF-doxygen/html/classSVF_1_1SVFFunctionType.html +28 -22
  164. package/SVF-doxygen/html/classSVF_1_1SVFG.html +2 -2
  165. package/SVF-doxygen/html/classSVF_1_1SVFGBuilder.html +2 -2
  166. package/SVF-doxygen/html/classSVF_1_1SVFGOPT.html +2 -2
  167. package/SVF-doxygen/html/classSVF_1_1SVFGStat.html +1 -1
  168. package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +2 -2
  169. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState-members.html +2 -2
  170. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +749 -769
  171. package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +6 -6
  172. package/SVF-doxygen/html/classSVF_1_1SVFIntegerType-members.html +30 -27
  173. package/SVF-doxygen/html/classSVF_1_1SVFIntegerType.html +32 -26
  174. package/SVF-doxygen/html/classSVF_1_1SVFOtherType-members.html +32 -29
  175. package/SVF-doxygen/html/classSVF_1_1SVFOtherType.html +33 -27
  176. package/SVF-doxygen/html/classSVF_1_1SVFPointerType-members.html +30 -27
  177. package/SVF-doxygen/html/classSVF_1_1SVFPointerType.html +28 -22
  178. package/SVF-doxygen/html/classSVF_1_1SVFStat.html +1 -1
  179. package/SVF-doxygen/html/classSVF_1_1SVFStructType-members.html +32 -29
  180. package/SVF-doxygen/html/classSVF_1_1SVFStructType.html +33 -27
  181. package/SVF-doxygen/html/classSVF_1_1SVFType-members.html +27 -24
  182. package/SVF-doxygen/html/classSVF_1_1SVFType.html +120 -23
  183. package/SVF-doxygen/html/classSVF_1_1SVFValue.html +23 -23
  184. package/SVF-doxygen/html/classSVF_1_1SVFVar.html +1 -1
  185. package/SVF-doxygen/html/classSVF_1_1SaberCondAllocator.html +3 -3
  186. package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder.html +2 -2
  187. package/SVF-doxygen/html/classSVF_1_1SelectStmt.html +1 -1
  188. package/SVF-doxygen/html/classSVF_1_1SrcSnkDDA.html +3 -3
  189. package/SVF-doxygen/html/classSVF_1_1Steensgaard.html +5 -5
  190. package/SVF-doxygen/html/classSVF_1_1StoreStmt.html +1 -1
  191. package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +4 -4
  192. package/SVF-doxygen/html/classSVF_1_1SymbolTableInfo.html +5 -5
  193. package/SVF-doxygen/html/classSVF_1_1TCT.html +3 -3
  194. package/SVF-doxygen/html/classSVF_1_1TDForkPE.html +1 -1
  195. package/SVF-doxygen/html/classSVF_1_1TDJoinPE.html +1 -1
  196. package/SVF-doxygen/html/classSVF_1_1ThreadCallGraph.html +2 -2
  197. package/SVF-doxygen/html/classSVF_1_1UnaryOPStmt.html +1 -1
  198. package/SVF-doxygen/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  199. package/SVF-doxygen/html/classSVF_1_1VFG.html +2 -2
  200. package/SVF-doxygen/html/classSVF_1_1ValVar.html +1 -1
  201. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitive.html +1 -1
  202. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
  203. package/SVF-doxygen/html/classSVF_1_1WPAPass.html +3 -3
  204. package/SVF-doxygen/html/functions_a.html +1 -1
  205. package/SVF-doxygen/html/functions_c.html +1 -1
  206. package/SVF-doxygen/html/functions_func.html +1 -1
  207. package/SVF-doxygen/html/functions_func_c.html +1 -1
  208. package/SVF-doxygen/html/functions_func_g.html +24 -18
  209. package/SVF-doxygen/html/functions_func_i.html +17 -11
  210. package/SVF-doxygen/html/functions_g.html +25 -19
  211. package/SVF-doxygen/html/functions_i.html +16 -10
  212. package/SVF-doxygen/html/functions_p.html +19 -23
  213. package/SVF-doxygen/html/functions_r.html +5 -5
  214. package/SVF-doxygen/html/functions_s.html +14 -12
  215. package/SVF-doxygen/html/functions_t.html +7 -7
  216. package/SVF-doxygen/html/functions_v.html +3 -3
  217. package/SVF-doxygen/html/globals_func_t.html +3 -0
  218. package/SVF-doxygen/html/globals_t.html +3 -0
  219. package/SVF-doxygen/html/namespaceSVF.html +45 -36
  220. package/SVF-doxygen/html/namespacemembers.html +1 -1
  221. package/SVF-doxygen/html/namespacemembers_func.html +1 -1
  222. package/SVF-doxygen/html/search/all_0.js +1 -1
  223. package/SVF-doxygen/html/search/all_1.js +1 -1
  224. package/SVF-doxygen/html/search/all_10.js +324 -324
  225. package/SVF-doxygen/html/search/all_11.js +224 -224
  226. package/SVF-doxygen/html/search/all_12.js +541 -541
  227. package/SVF-doxygen/html/search/all_13.js +191 -190
  228. package/SVF-doxygen/html/search/all_14.js +67 -67
  229. package/SVF-doxygen/html/search/all_15.js +170 -170
  230. package/SVF-doxygen/html/search/all_16.js +63 -63
  231. package/SVF-doxygen/html/search/all_17.js +1 -1
  232. package/SVF-doxygen/html/search/all_18.js +1 -1
  233. package/SVF-doxygen/html/search/all_19.js +11 -11
  234. package/SVF-doxygen/html/search/all_1a.js +172 -172
  235. package/SVF-doxygen/html/search/all_3.js +1 -1
  236. package/SVF-doxygen/html/search/all_7.js +457 -455
  237. package/SVF-doxygen/html/search/all_8.js +194 -194
  238. package/SVF-doxygen/html/search/all_9.js +610 -608
  239. package/SVF-doxygen/html/search/all_a.js +46 -46
  240. package/SVF-doxygen/html/search/all_b.js +26 -26
  241. package/SVF-doxygen/html/search/all_c.js +116 -116
  242. package/SVF-doxygen/html/search/all_d.js +196 -196
  243. package/SVF-doxygen/html/search/all_e.js +207 -207
  244. package/SVF-doxygen/html/search/all_f.js +116 -116
  245. package/SVF-doxygen/html/search/classes_0.js +26 -26
  246. package/SVF-doxygen/html/search/classes_1.js +9 -9
  247. package/SVF-doxygen/html/search/classes_10.js +73 -73
  248. package/SVF-doxygen/html/search/classes_11.js +15 -15
  249. package/SVF-doxygen/html/search/classes_12.js +2 -2
  250. package/SVF-doxygen/html/search/classes_13.js +10 -10
  251. package/SVF-doxygen/html/search/classes_14.js +14 -14
  252. package/SVF-doxygen/html/search/classes_15.js +1 -1
  253. package/SVF-doxygen/html/search/classes_2.js +80 -80
  254. package/SVF-doxygen/html/search/classes_3.js +37 -37
  255. package/SVF-doxygen/html/search/classes_4.js +9 -9
  256. package/SVF-doxygen/html/search/classes_5.js +28 -28
  257. package/SVF-doxygen/html/search/classes_6.js +104 -104
  258. package/SVF-doxygen/html/search/classes_7.js +33 -33
  259. package/SVF-doxygen/html/search/classes_8.js +56 -56
  260. package/SVF-doxygen/html/search/classes_9.js +1 -1
  261. package/SVF-doxygen/html/search/classes_a.js +12 -12
  262. package/SVF-doxygen/html/search/classes_b.js +29 -29
  263. package/SVF-doxygen/html/search/classes_c.js +6 -6
  264. package/SVF-doxygen/html/search/classes_d.js +18 -18
  265. package/SVF-doxygen/html/search/classes_e.js +36 -36
  266. package/SVF-doxygen/html/search/classes_f.js +25 -25
  267. package/SVF-doxygen/html/search/defines_0.js +3 -3
  268. package/SVF-doxygen/html/search/defines_1.js +2 -2
  269. package/SVF-doxygen/html/search/defines_2.js +30 -30
  270. package/SVF-doxygen/html/search/defines_3.js +21 -21
  271. package/SVF-doxygen/html/search/defines_4.js +2 -2
  272. package/SVF-doxygen/html/search/defines_5.js +4 -4
  273. package/SVF-doxygen/html/search/defines_6.js +2 -2
  274. package/SVF-doxygen/html/search/defines_7.js +5 -5
  275. package/SVF-doxygen/html/search/defines_8.js +11 -11
  276. package/SVF-doxygen/html/search/defines_9.js +9 -9
  277. package/SVF-doxygen/html/search/defines_a.js +2 -2
  278. package/SVF-doxygen/html/search/defines_b.js +1 -1
  279. package/SVF-doxygen/html/search/defines_c.js +3 -3
  280. package/SVF-doxygen/html/search/defines_d.js +2 -2
  281. package/SVF-doxygen/html/search/defines_e.js +7 -7
  282. package/SVF-doxygen/html/search/defines_f.js +3 -3
  283. package/SVF-doxygen/html/search/enums_0.js +3 -3
  284. package/SVF-doxygen/html/search/enums_1.js +2 -2
  285. package/SVF-doxygen/html/search/enums_10.js +1 -1
  286. package/SVF-doxygen/html/search/enums_11.js +1 -1
  287. package/SVF-doxygen/html/search/enums_2.js +8 -8
  288. package/SVF-doxygen/html/search/enums_3.js +1 -1
  289. package/SVF-doxygen/html/search/enums_4.js +3 -3
  290. package/SVF-doxygen/html/search/enums_5.js +1 -1
  291. package/SVF-doxygen/html/search/enums_6.js +2 -2
  292. package/SVF-doxygen/html/search/enums_7.js +2 -2
  293. package/SVF-doxygen/html/search/enums_8.js +4 -4
  294. package/SVF-doxygen/html/search/enums_9.js +1 -1
  295. package/SVF-doxygen/html/search/enums_a.js +1 -1
  296. package/SVF-doxygen/html/search/enums_b.js +7 -7
  297. package/SVF-doxygen/html/search/enums_c.js +1 -1
  298. package/SVF-doxygen/html/search/enums_d.js +4 -4
  299. package/SVF-doxygen/html/search/enums_e.js +2 -2
  300. package/SVF-doxygen/html/search/enums_f.js +4 -4
  301. package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
  302. package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
  303. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  304. package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
  305. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  306. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  307. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  308. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  309. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  310. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  311. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  312. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  313. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  314. package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
  315. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  316. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  317. package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
  318. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  319. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  320. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  321. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  322. package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
  323. package/SVF-doxygen/html/search/files_0.js +13 -13
  324. package/SVF-doxygen/html/search/files_1.js +7 -7
  325. package/SVF-doxygen/html/search/files_10.js +8 -8
  326. package/SVF-doxygen/html/search/files_11.js +8 -8
  327. package/SVF-doxygen/html/search/files_12.js +2 -2
  328. package/SVF-doxygen/html/search/files_2.js +55 -55
  329. package/SVF-doxygen/html/search/files_3.js +14 -14
  330. package/SVF-doxygen/html/search/files_4.js +5 -5
  331. package/SVF-doxygen/html/search/files_5.js +13 -13
  332. package/SVF-doxygen/html/search/files_6.js +9 -9
  333. package/SVF-doxygen/html/search/files_7.js +14 -14
  334. package/SVF-doxygen/html/search/files_8.js +13 -13
  335. package/SVF-doxygen/html/search/files_9.js +18 -18
  336. package/SVF-doxygen/html/search/files_a.js +3 -3
  337. package/SVF-doxygen/html/search/files_b.js +2 -2
  338. package/SVF-doxygen/html/search/files_c.js +20 -20
  339. package/SVF-doxygen/html/search/files_d.js +4 -4
  340. package/SVF-doxygen/html/search/files_e.js +62 -62
  341. package/SVF-doxygen/html/search/files_f.js +8 -8
  342. package/SVF-doxygen/html/search/functions_0.js +12 -12
  343. package/SVF-doxygen/html/search/functions_1.js +359 -359
  344. package/SVF-doxygen/html/search/functions_10.js +140 -140
  345. package/SVF-doxygen/html/search/functions_11.js +138 -138
  346. package/SVF-doxygen/html/search/functions_12.js +276 -276
  347. package/SVF-doxygen/html/search/functions_13.js +59 -58
  348. package/SVF-doxygen/html/search/functions_14.js +39 -39
  349. package/SVF-doxygen/html/search/functions_15.js +71 -71
  350. package/SVF-doxygen/html/search/functions_16.js +32 -32
  351. package/SVF-doxygen/html/search/functions_17.js +3 -3
  352. package/SVF-doxygen/html/search/functions_18.js +172 -172
  353. package/SVF-doxygen/html/search/functions_2.js +86 -86
  354. package/SVF-doxygen/html/search/functions_3.js +257 -257
  355. package/SVF-doxygen/html/search/functions_4.js +75 -75
  356. package/SVF-doxygen/html/search/functions_5.js +53 -53
  357. package/SVF-doxygen/html/search/functions_6.js +59 -59
  358. package/SVF-doxygen/html/search/functions_7.js +851 -849
  359. package/SVF-doxygen/html/search/functions_8.js +146 -146
  360. package/SVF-doxygen/html/search/functions_9.js +428 -426
  361. package/SVF-doxygen/html/search/functions_a.js +30 -30
  362. package/SVF-doxygen/html/search/functions_b.js +2 -2
  363. package/SVF-doxygen/html/search/functions_c.js +26 -26
  364. package/SVF-doxygen/html/search/functions_d.js +77 -77
  365. package/SVF-doxygen/html/search/functions_e.js +35 -35
  366. package/SVF-doxygen/html/search/functions_f.js +56 -56
  367. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  368. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  369. package/SVF-doxygen/html/search/related_0.js +2 -2
  370. package/SVF-doxygen/html/search/related_1.js +2 -2
  371. package/SVF-doxygen/html/search/related_2.js +2 -2
  372. package/SVF-doxygen/html/search/related_3.js +2 -2
  373. package/SVF-doxygen/html/search/related_4.js +2 -2
  374. package/SVF-doxygen/html/search/related_5.js +1 -1
  375. package/SVF-doxygen/html/search/related_6.js +2 -2
  376. package/SVF-doxygen/html/search/related_7.js +4 -4
  377. package/SVF-doxygen/html/search/related_8.js +2 -2
  378. package/SVF-doxygen/html/search/related_9.js +4 -4
  379. package/SVF-doxygen/html/search/related_a.js +19 -19
  380. package/SVF-doxygen/html/search/related_b.js +4 -4
  381. package/SVF-doxygen/html/search/related_c.js +1 -1
  382. package/SVF-doxygen/html/search/related_d.js +11 -11
  383. package/SVF-doxygen/html/search/related_e.js +2 -2
  384. package/SVF-doxygen/html/search/related_f.js +2 -2
  385. package/SVF-doxygen/html/search/typedefs_0.js +18 -18
  386. package/SVF-doxygen/html/search/typedefs_1.js +26 -26
  387. package/SVF-doxygen/html/search/typedefs_10.js +61 -61
  388. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  389. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  390. package/SVF-doxygen/html/search/typedefs_13.js +35 -35
  391. package/SVF-doxygen/html/search/typedefs_14.js +8 -8
  392. package/SVF-doxygen/html/search/typedefs_2.js +129 -129
  393. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  394. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  395. package/SVF-doxygen/html/search/typedefs_5.js +41 -41
  396. package/SVF-doxygen/html/search/typedefs_6.js +55 -55
  397. package/SVF-doxygen/html/search/typedefs_7.js +42 -42
  398. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  399. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  400. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  401. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  402. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  403. package/SVF-doxygen/html/search/typedefs_d.js +15 -15
  404. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  405. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  406. package/SVF-doxygen/html/search/variables_0.js +151 -151
  407. package/SVF-doxygen/html/search/variables_1.js +75 -75
  408. package/SVF-doxygen/html/search/variables_10.js +97 -97
  409. package/SVF-doxygen/html/search/variables_11.js +46 -46
  410. package/SVF-doxygen/html/search/variables_12.js +92 -92
  411. package/SVF-doxygen/html/search/variables_13.js +75 -75
  412. package/SVF-doxygen/html/search/variables_14.js +14 -14
  413. package/SVF-doxygen/html/search/variables_15.js +48 -48
  414. package/SVF-doxygen/html/search/variables_16.js +9 -9
  415. package/SVF-doxygen/html/search/variables_17.js +1 -1
  416. package/SVF-doxygen/html/search/variables_18.js +2 -2
  417. package/SVF-doxygen/html/search/variables_2.js +37 -37
  418. package/SVF-doxygen/html/search/variables_3.js +142 -142
  419. package/SVF-doxygen/html/search/variables_4.js +55 -55
  420. package/SVF-doxygen/html/search/variables_5.js +39 -39
  421. package/SVF-doxygen/html/search/variables_6.js +66 -66
  422. package/SVF-doxygen/html/search/variables_7.js +33 -33
  423. package/SVF-doxygen/html/search/variables_8.js +7 -7
  424. package/SVF-doxygen/html/search/variables_9.js +77 -77
  425. package/SVF-doxygen/html/search/variables_a.js +4 -4
  426. package/SVF-doxygen/html/search/variables_b.js +10 -10
  427. package/SVF-doxygen/html/search/variables_c.js +45 -45
  428. package/SVF-doxygen/html/search/variables_d.js +56 -56
  429. package/SVF-doxygen/html/search/variables_e.js +123 -123
  430. package/SVF-doxygen/html/search/variables_f.js +30 -30
  431. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  432. package/SVF-doxygen/html/structSVF_1_1Hash_3_01NodePair_01_4.html +11 -11
  433. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1AccessPath_01_4.html +8 -8
  434. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1NodePair_01_4.html +11 -11
  435. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1SparseBitVector_3_01N_01_4_01_4.html +7 -7
  436. package/SVF-doxygen/html/structstd_1_1hash_3_01std_1_1vector_3_01T_01_4_01_4.html +14 -14
  437. package/SVF-doxygen/html/svf-ex_8cpp.html +235 -125
  438. package/SVF-doxygen/html/svf-ex_8cpp_source.html +234 -144
  439. package/package.json +1 -1
  440. package/svf/include/AbstractExecution/SVFIR2ItvExeState.h +5 -5
  441. package/svf/include/MemoryModel/AccessPath.h +24 -6
  442. package/svf/include/SVFIR/SVFStatements.h +2 -2
  443. package/svf/include/SVFIR/SVFType.h +19 -0
  444. package/svf/lib/AbstractExecution/SVFIR2ItvExeState.cpp +16 -21
  445. package/svf/lib/MemoryModel/AccessPath.cpp +15 -14
  446. package/svf/lib/SVFIR/SVFType.cpp +7 -0
  447. package/svf-llvm/lib/LLVMUtil.cpp +10 -0
  448. package/svf-llvm/tools/Example/svf-ex.cpp +65 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-tools",
3
- "version": "1.0.795",
3
+ "version": "1.0.796",
4
4
  "description": "* <b>[TypeClone](https://github.com/SVF-tools/SVF/wiki/TypeClone) published in our [ECOOP paper](https://yuleisui.github.io/publications/ecoop20.pdf) is now available in SVF </b> * <b>SVF now uses a single script for its build. Just type [`source ./build.sh`](https://github.com/SVF-tools/SVF/blob/master/build.sh) in your terminal, that's it!</b> * <b>SVF now supports LLVM-10.0.0! </b> * <b>We thank [bsauce](https://github.com/bsauce) for writing a user manual of SVF ([link1](https://www.jianshu.com/p/068a08ec749c) and [link2](https://www.jianshu.com/p/777c30d4240e)) in Chinese </b> * <b>SVF now supports LLVM-9.0.0 (Thank [Byoungyoung Lee](https://github.com/SVF-tools/SVF/issues/142) for his help!). </b> * <b>SVF now supports a set of [field-sensitive pointer analyses](https://yuleisui.github.io/publications/sas2019a.pdf). </b> * <b>[Use SVF as an external lib](https://github.com/SVF-tools/SVF/wiki/Using-SVF-as-a-lib-in-your-own-tool) for your own project (Contributed by [Hongxu Chen](https://github.com/HongxuChen)). </b> * <b>SVF now supports LLVM-7.0.0. </b> * <b>SVF now supports Docker. [Try SVF in Docker](https://github.com/SVF-tools/SVF/wiki/Try-SVF-in-Docker)! </b> * <b>SVF now supports [LLVM-6.0.0](https://github.com/svf-tools/SVF/pull/38) (Contributed by [Jack Anthony](https://github.com/jackanth)). </b> * <b>SVF now supports [LLVM-4.0.0](https://github.com/svf-tools/SVF/pull/23) (Contributed by Jared Carlson. Thank [Jared](https://github.com/jcarlson23) and [Will](https://github.com/dtzWill) for their in-depth [discussions](https://github.com/svf-tools/SVF/pull/18) about updating SVF!) </b> * <b>SVF now supports analysis for C++ programs.</b> <br />",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -74,17 +74,17 @@ public:
74
74
  VAddrs getGepObjAddress(u32_t pointer, APOffset offset);
75
75
 
76
76
  /// Return the byte offset from one gep param offset
77
- std::pair<APOffset, APOffset> getBytefromGepTypePair(const AccessPath::VarAndGepTypePair& gep_pair, const GepStmt *gep, APOffset elem_bytesize);
77
+ std::pair<APOffset, APOffset> getBytefromGepTypePair(const AccessPath::VarAndGepTypePair& gep_pair, const GepStmt *gep);
78
78
 
79
79
  /// Return the Index offset from one gep param offset
80
80
  std::pair<APOffset, APOffset> getIndexfromGepTypePair(const AccessPath::VarAndGepTypePair& gep_pair, const GepStmt *gep);
81
81
 
82
82
  /// Return the byte offset expression of a GepStmt
83
83
  /// elemBytesize is the element byte size of an static alloc or heap alloc array
84
- /// e.g. GepStmt* gep = **,
85
- /// s32_t elemBytesize = LLVMUtil::SVFType2ByteSize(gep->getRHSVar()->getValue()->getType());
86
- /// std::pair<s32_t, s32_t> byteOffset = getGepByteOffset(gep, elemBytesize);
87
- std::pair<APOffset, APOffset> getGepByteOffset(const GepStmt *gep, APOffset elemBytesize);
84
+ /// e.g. GepStmt* gep = [i32*10], x, and x is [0,3]
85
+ /// std::pair<s32_t, s32_t> byteOffset = getGepByteOffset(gep);
86
+ /// byteOffset should be [0, 12] since i32 is 4 bytes.
87
+ std::pair<APOffset, APOffset> getGepByteOffset(const GepStmt *gep);
88
88
 
89
89
  /// Return the offset expression of a GepStmt
90
90
  std::pair<APOffset, APOffset> getGepOffset(const GepStmt *gep);
@@ -109,13 +109,31 @@ public:
109
109
  }
110
110
  //@}
111
111
 
112
- /// Return accumulated constant byte offset given OffsetVarVec and elemByteSize
113
- /// elemBytesize is the element byte size of an static alloc or heap alloc array
114
- /// e.g. GepStmt* gep = **,
115
- /// s32_t elemBytesize = LLVMUtil::SVFType2ByteSize(gep->getRHSVar()->getValue()->getType());
116
- /// APOffset byteOffset = gep->accumulateConstantByteOffset(elemBytesize);
117
- APOffset computeConstantByteOffset(u32_t elemBytesize) const;
112
+ /**
113
+ * Computes the total constant byte offset of an access path.
114
+ * This function iterates over the offset-variable-type pairs in reverse order,
115
+ * accumulating the total byte offset for constant offsets. For each pair,
116
+ * it retrieves the corresponding SVFValue and determines the type of offset
117
+ * (whether it's an array, pointer, or structure). If the offset corresponds
118
+ * to a structure, it further resolves the actual element type based on the
119
+ * offset value. It then multiplies the offset value by the size of the type
120
+ * to compute the byte offset. This is used to handle composite types where
121
+ * offsets are derived from the type's internal structure, such as arrays
122
+ * or structures with fields of various types and sizes. The function asserts
123
+ * that the access path must have a constant offset, and it is intended to be
124
+ * used when the offset is known to be constant at compile time.
125
+ *
126
+ * @return APOffset representing the computed total constant byte offset.
127
+ */
128
+ /// e.g. GepStmt* gep = [i32*4], 2
129
+ /// APOffset byteOffset = gep->accumulateConstantByteOffset();
130
+ /// byteOffset should be 8 since i32 is 4 bytes and index is 2.
131
+ APOffset computeConstantByteOffset() const;
118
132
  /// Return accumulated constant offset given OffsetVarVec
133
+ /// compard to computeConstantByteOffset, it is field offset rather than byte offset
134
+ /// e.g. GepStmt* gep = [i32*4], 2
135
+ /// APOffset byteOffset = gep->computeConstantOffset();
136
+ /// byteOffset should be 2 since it is field offset.
119
137
  APOffset computeConstantOffset() const;
120
138
 
121
139
  /// Return element number of a type.
@@ -505,9 +505,9 @@ public:
505
505
  /// e.g. GepStmt* gep = **,
506
506
  /// s32_t elemBytesize = LLVMUtil::SVFType2ByteSize(gep->getRHSVar()->getValue()->getType());
507
507
  /// APOffset byteOffset = gep->accumulateConstantByteOffset(elemBytesize);
508
- inline APOffset accumulateConstantByteOffset(u32_t elemBytesize) const
508
+ inline APOffset accumulateConstantByteOffset() const
509
509
  {
510
- return getAccessPath().computeConstantByteOffset(elemBytesize);
510
+ return getAccessPath().computeConstantByteOffset();
511
511
  }
512
512
 
513
513
  /// Return accumulated constant offset (when accessing array or struct) if this offset is a constant.
@@ -299,6 +299,8 @@ public:
299
299
  return getPointerToTy;
300
300
  }
301
301
 
302
+ u32_t getLLVMByteSize() const;
303
+
302
304
  inline void setTypeInfo(StInfo* ti)
303
305
  {
304
306
  typeinfo = ti;
@@ -321,6 +323,16 @@ public:
321
323
  return kind == SVFPointerTy;
322
324
  }
323
325
 
326
+ inline bool isArrayTy() const
327
+ {
328
+ return kind == SVFArrayTy;
329
+ }
330
+
331
+ inline bool isStructTy() const
332
+ {
333
+ return kind == SVFStructTy;
334
+ }
335
+
324
336
  inline bool isSingleValueType() const
325
337
  {
326
338
  return isSingleValTy;
@@ -462,6 +474,11 @@ public:
462
474
 
463
475
  void print(std::ostream& os) const override;
464
476
 
477
+ const SVFType* getTypeOfElement() const
478
+ {
479
+ return typeOfElement;
480
+ }
481
+
465
482
  void setTypeOfElement(const SVFType* elemType)
466
483
  {
467
484
  typeOfElement = elemType;
@@ -471,6 +488,8 @@ public:
471
488
  {
472
489
  numOfElement = elemNum;
473
490
  }
491
+
492
+
474
493
  };
475
494
 
476
495
  class SVFOtherType : public SVFType
@@ -176,10 +176,18 @@ SVFIR2ItvExeState::VAddrs SVFIR2ItvExeState::getGepObjAddress(u32_t pointer, APO
176
176
  return ret;
177
177
  }
178
178
 
179
- std::pair<APOffset, APOffset> SVFIR2ItvExeState::getBytefromGepTypePair(const AccessPath::VarAndGepTypePair& gep_pair, const GepStmt *gep, APOffset elemBytesize)
179
+ std::pair<APOffset, APOffset> SVFIR2ItvExeState::getBytefromGepTypePair(const AccessPath::VarAndGepTypePair& gep_pair, const GepStmt *gep)
180
180
  {
181
181
  const SVFValue *value = gep_pair.first->getValue();
182
182
  const SVFType *type = gep_pair.second;
183
+ if (const SVFArrayType* arrType = SVFUtil::dyn_cast<SVFArrayType>(type))
184
+ {
185
+ type = arrType->getTypeOfElement();
186
+ }
187
+ else if (const SVFPointerType* ptrType = SVFUtil::dyn_cast<SVFPointerType>(type))
188
+ {
189
+ type = ptrType->getPtrElementType();
190
+ }
183
191
  const SVFConstantInt *op = SVFUtil::dyn_cast<SVFConstantInt>(value);
184
192
  APOffset offsetLb = 0;
185
193
  APOffset offsetUb = 0;
@@ -204,14 +212,15 @@ std::pair<APOffset, APOffset> SVFIR2ItvExeState::getBytefromGepTypePair(const Ac
204
212
  /// offset is constant but stored in variable
205
213
  if (op)
206
214
  {
207
- offsetLb = offsetUb = op->getSExtValue() > maxByteLimit
208
- ? maxByteLimit
209
- : op->getSExtValue();
215
+ offsetLb = offsetUb =
216
+ op->getSExtValue() * type->getLLVMByteSize() > maxByteLimit
217
+ ? maxByteLimit
218
+ : op->getSExtValue() * type->getLLVMByteSize();
210
219
  }
211
220
  else
212
221
  {
213
222
  u32_t idx = _svfir->getValueNode(value);
214
- IntervalValue &idxVal = _es[idx];
223
+ IntervalValue idxVal = _es[idx] * IntervalValue(type->getLLVMByteSize());
215
224
  if (idxVal.isBottom() || idxVal.isTop())
216
225
  return std::make_pair(0, maxByteLimit);
217
226
  // if idxVal is a concrete value
@@ -225,20 +234,6 @@ std::pair<APOffset, APOffset> SVFIR2ItvExeState::getBytefromGepTypePair(const Ac
225
234
  offsetUb = valueReshape(idxVal.ub().getNumeral());
226
235
  }
227
236
  }
228
-
229
- if (type)
230
- {
231
- if (const SVFPointerType *pty = SVFUtil::dyn_cast<SVFPointerType>(type))
232
- {
233
- offsetLb = offsetLb * gep->getAccessPath().getElementNum(pty->getPtrElementType())* elemBytesize;
234
- offsetUb = offsetUb * gep->getAccessPath().getElementNum(pty->getPtrElementType())* elemBytesize;
235
- }
236
- else
237
- {
238
- offsetLb = offsetLb * elemBytesize;
239
- offsetUb = offsetUb * elemBytesize;
240
- }
241
- }
242
237
  return {offsetLb, offsetUb};
243
238
  }
244
239
 
@@ -324,7 +319,7 @@ std::pair<APOffset, APOffset> SVFIR2ItvExeState::getIndexfromGepTypePair(const A
324
319
  }
325
320
 
326
321
 
327
- std::pair<APOffset, APOffset> SVFIR2ItvExeState::getGepByteOffset(const GepStmt *gep, APOffset elemBytesize)
322
+ std::pair<APOffset, APOffset> SVFIR2ItvExeState::getGepByteOffset(const GepStmt *gep)
328
323
  {
329
324
  /// for instant constant index, e.g. gep arr, 1
330
325
  if (gep->getOffsetVarAndGepTypePairVec().empty())
@@ -336,7 +331,7 @@ std::pair<APOffset, APOffset> SVFIR2ItvExeState::getGepByteOffset(const GepStmt
336
331
  for (int i = gep->getOffsetVarAndGepTypePairVec().size() - 1; i >= 0; i--)
337
332
  {
338
333
  std::pair<APOffset, APOffset> offsetIdx = getBytefromGepTypePair(
339
- gep->getOffsetVarAndGepTypePairVec()[i], gep, elemBytesize);
334
+ gep->getOffsetVarAndGepTypePairVec()[i], gep);
340
335
  APOffset offsetLb = offsetIdx.first;
341
336
  APOffset offsetUb = offsetIdx.second;
342
337
  if (totalOffsetLb + offsetLb > maxFieldLimit)
@@ -94,33 +94,34 @@ u32_t AccessPath::getElementNum(const SVFType* type) const
94
94
  /// Given a vector and elem byte size: [(value1,type1), (value2,type2), (value3,type3)], bytesize
95
95
  /// totalConstByteOffset = ByteOffset(value1,type1) * ByteOffset(value2,type2) + ByteOffset(value3,type3)
96
96
  /// For a pointer type (e.g., t1 is PointerType), we will retrieve the pointee type and times the offset, i.e., getElementNum(t1) X off1
97
- APOffset AccessPath::computeConstantByteOffset(u32_t elemBytesize) const
97
+ APOffset AccessPath::computeConstantByteOffset() const
98
98
  {
99
99
  assert(isConstantOffset() && "not a constant offset");
100
100
 
101
- if(offsetVarAndGepTypePairs.empty())
102
- return getConstantFieldIdx() * elemBytesize;
103
-
104
101
  APOffset totalConstOffset = 0;
105
102
  for(int i = offsetVarAndGepTypePairs.size() - 1; i >= 0; i--)
106
103
  {
107
104
  const SVFValue* value = offsetVarAndGepTypePairs[i].first->getValue();
108
105
  const SVFType* type = offsetVarAndGepTypePairs[i].second;
109
- const SVFConstantInt* op = SVFUtil::dyn_cast<SVFConstantInt>(value);
110
- assert(op && "not a constant offset?");
111
- if(type==nullptr)
106
+ const SVFType* type2 = type;
107
+ if (const SVFArrayType* arrType = SVFUtil::dyn_cast<SVFArrayType>(type))
112
108
  {
113
- totalConstOffset += op->getSExtValue() * elemBytesize;
114
- continue;
109
+ type2 = arrType->getTypeOfElement();
110
+ }
111
+ else if (const SVFPointerType* ptrType = SVFUtil::dyn_cast<SVFPointerType>(type))
112
+ {
113
+ type2 = ptrType->getPtrElementType();
115
114
  }
116
115
 
117
- if(const SVFPointerType* pty = SVFUtil::dyn_cast<SVFPointerType>(type))
118
- totalConstOffset += op->getSExtValue() * getElementNum(pty->getPtrElementType()) * elemBytesize;
116
+ const SVFConstantInt* op = SVFUtil::dyn_cast<SVFConstantInt>(value);
117
+ if (const SVFStructType* structType = SVFUtil::dyn_cast<SVFStructType>(type))
118
+ {
119
+ type2 = structType->getTypeInfo()->getOriginalElemType(op->getSExtValue());
120
+ totalConstOffset += type2->getLLVMByteSize();
121
+ }
119
122
  else
120
123
  {
121
- APOffset offset = op->getSExtValue();
122
- // if getByteOffset is false, it will retrieve flatten idx
123
- totalConstOffset += offset * elemBytesize;
124
+ totalConstOffset += op->getSExtValue() * type2->getLLVMByteSize();
124
125
  }
125
126
  }
126
127
  return totalConstOffset;
@@ -4,6 +4,13 @@
4
4
  namespace SVF
5
5
  {
6
6
 
7
+ __attribute__((weak))
8
+ u32_t SVFType::getLLVMByteSize() const
9
+ {
10
+ assert("SVFType::getLLVMByteSize should be implemented or supported by fronted" && false);
11
+ abort();
12
+ }
13
+
7
14
  __attribute__((weak))
8
15
  std::string SVFType::toString() const
9
16
  {
@@ -1268,6 +1268,16 @@ s64_t LLVMUtil::getCaseValue(const SwitchInst &switchInst, SuccBBAndCondValPair
1268
1268
 
1269
1269
  namespace SVF
1270
1270
  {
1271
+ // getLLVMByteSize
1272
+ u32_t SVFType::getLLVMByteSize() const
1273
+ {
1274
+ const llvm::DataLayout &DL = LLVMModuleSet::getLLVMModuleSet()->
1275
+ getMainLLVMModule()->getDataLayout();
1276
+ const Type* T = LLVMModuleSet::getLLVMModuleSet()->getLLVMType(this);
1277
+ Type* mut_T = const_cast<Type*>(T);
1278
+ return DL.getTypeAllocSize(mut_T);
1279
+ }
1280
+
1271
1281
  std::string SVFValue::toString() const
1272
1282
  {
1273
1283
  std::string str;
@@ -27,6 +27,7 @@
27
27
  */
28
28
 
29
29
  #include "SVF-LLVM/LLVMUtil.h"
30
+ #include "AbstractExecution/SVFIR2ItvExeState.h"
30
31
  #include "Graphs/SVFG.h"
31
32
  #include "WPA/Andersen.h"
32
33
  #include "SVF-LLVM/SVFIRBuilder.h"
@@ -70,6 +71,69 @@ std::string printPts(PointerAnalysis* pta, SVFValue* val)
70
71
 
71
72
  }
72
73
 
74
+ /*!
75
+ * An example to query/collect all SVFStmt from a ICFGNode (iNode)
76
+ */
77
+ void traverseOnSVFStmt(const ICFGNode* node)
78
+ {
79
+ SVFIR2ItvExeState* svfir2ExeState = new SVFIR2ItvExeState(SVFIR::getPAG());
80
+ for (const SVFStmt* stmt: node->getSVFStmts())
81
+ {
82
+ if (const AddrStmt *addr = SVFUtil::dyn_cast<AddrStmt>(stmt))
83
+ {
84
+ svfir2ExeState->translateAddr(addr);
85
+ }
86
+ else if (const BinaryOPStmt *binary = SVFUtil::dyn_cast<BinaryOPStmt>(stmt))
87
+ {
88
+ svfir2ExeState->translateBinary(binary);
89
+ }
90
+ else if (const CmpStmt *cmp = SVFUtil::dyn_cast<CmpStmt>(stmt))
91
+ {
92
+ svfir2ExeState->translateCmp(cmp);
93
+ }
94
+ else if (const LoadStmt *load = SVFUtil::dyn_cast<LoadStmt>(stmt))
95
+ {
96
+ svfir2ExeState->translateLoad(load);
97
+ }
98
+ else if (const StoreStmt *store = SVFUtil::dyn_cast<StoreStmt>(stmt))
99
+ {
100
+ svfir2ExeState->translateStore(store);
101
+ }
102
+ else if (const CopyStmt *copy = SVFUtil::dyn_cast<CopyStmt>(stmt))
103
+ {
104
+ svfir2ExeState->translateCopy(copy);
105
+ }
106
+ else if (const GepStmt *gep = SVFUtil::dyn_cast<GepStmt>(stmt))
107
+ {
108
+ if (gep->isConstantOffset())
109
+ {
110
+ gep->accumulateConstantByteOffset();
111
+ gep->accumulateConstantOffset();
112
+ }
113
+ svfir2ExeState->translateGep(gep);
114
+ }
115
+ else if (const SelectStmt *select = SVFUtil::dyn_cast<SelectStmt>(stmt))
116
+ {
117
+ svfir2ExeState->translateSelect(select);
118
+ }
119
+ else if (const PhiStmt *phi = SVFUtil::dyn_cast<PhiStmt>(stmt))
120
+ {
121
+ svfir2ExeState->translatePhi(phi);
122
+ }
123
+ else if (const CallPE *callPE = SVFUtil::dyn_cast<CallPE>(stmt))
124
+ {
125
+ // To handle Call Edge
126
+ svfir2ExeState->translateCall(callPE);
127
+ }
128
+ else if (const RetPE *retPE = SVFUtil::dyn_cast<RetPE>(stmt))
129
+ {
130
+ svfir2ExeState->translateRet(retPE);
131
+ }
132
+ else
133
+ assert(false && "implement this part");
134
+ }
135
+ }
136
+
73
137
 
74
138
  /*!
75
139
  * An example to query/collect all successor nodes from a ICFGNode (iNode) along control-flow graph (ICFG)
@@ -90,6 +154,7 @@ void traverseOnICFG(ICFG* icfg, const SVFInstruction* svfInst)
90
154
  {
91
155
  ICFGEdge* edge = *it;
92
156
  ICFGNode* succNode = edge->getDstNode();
157
+ traverseOnSVFStmt(succNode);
93
158
  if (visited.find(succNode) == visited.end())
94
159
  {
95
160
  visited.insert(succNode);