svf-tools 1.0.794 → 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 (466) 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/CDG_8h_source.html +27 -28
  8. package/SVF-doxygen/html/CFBasicBlockGBuilder_8cpp_source.html +3 -3
  9. package/SVF-doxygen/html/CFBasicBlockGBuilder_8h_source.html +1 -1
  10. package/SVF-doxygen/html/CFBasicBlockG_8h_source.html +308 -310
  11. package/SVF-doxygen/html/CFLAlias_8cpp_source.html +5 -5
  12. package/SVF-doxygen/html/CFLAlias_8h_source.html +3 -3
  13. package/SVF-doxygen/html/CFLBase_8cpp_source.html +1 -1
  14. package/SVF-doxygen/html/CHGBuilder_8cpp_source.html +4 -4
  15. package/SVF-doxygen/html/ConsG_8cpp_source.html +1 -1
  16. package/SVF-doxygen/html/ContextDDA_8cpp_source.html +5 -5
  17. package/SVF-doxygen/html/ContextDDA_8h_source.html +2 -2
  18. package/SVF-doxygen/html/CxtStmt_8h_source.html +1 -1
  19. package/SVF-doxygen/html/DDAClient_8cpp_source.html +5 -5
  20. package/SVF-doxygen/html/DDAPass_8cpp_source.html +2 -2
  21. package/SVF-doxygen/html/DDAPass_8h_source.html +1 -1
  22. package/SVF-doxygen/html/DDAStat_8cpp_source.html +1 -1
  23. package/SVF-doxygen/html/DDAVFSolver_8h_source.html +4 -4
  24. package/SVF-doxygen/html/FSMPTA_8cpp_source.html +3 -3
  25. package/SVF-doxygen/html/FlowDDA_8cpp_source.html +5 -5
  26. package/SVF-doxygen/html/FlowDDA_8h_source.html +2 -2
  27. package/SVF-doxygen/html/FlowSensitiveStat_8cpp_source.html +1 -1
  28. package/SVF-doxygen/html/FlowSensitive_8cpp_source.html +5 -5
  29. package/SVF-doxygen/html/ICFGBuilder_8cpp_source.html +2 -2
  30. package/SVF-doxygen/html/ICFG_8cpp_source.html +1 -1
  31. package/SVF-doxygen/html/IRGraph_8cpp_source.html +2 -2
  32. package/SVF-doxygen/html/LLVMLoopAnalysis_8cpp_source.html +2 -2
  33. package/SVF-doxygen/html/LLVMModule_8cpp_source.html +10 -10
  34. package/SVF-doxygen/html/LLVMUtil_8cpp_source.html +40 -27
  35. package/SVF-doxygen/html/LeakChecker_8cpp_source.html +1 -1
  36. package/SVF-doxygen/html/LockAnalysis_8cpp_source.html +5 -5
  37. package/SVF-doxygen/html/LockAnalysis_8h_source.html +2 -2
  38. package/SVF-doxygen/html/LockResultValidator_8cpp_source.html +1 -1
  39. package/SVF-doxygen/html/MHP_8cpp_source.html +6 -6
  40. package/SVF-doxygen/html/MTAAnnotator_8cpp_source.html +2 -2
  41. package/SVF-doxygen/html/MTA_8cpp_source.html +5 -5
  42. package/SVF-doxygen/html/MemRegion_8cpp_source.html +7 -7
  43. package/SVF-doxygen/html/MemRegion_8h_source.html +1 -1
  44. package/SVF-doxygen/html/MemSSA_8cpp_source.html +4 -4
  45. package/SVF-doxygen/html/NodeIDAllocator_8cpp_source.html +2 -2
  46. package/SVF-doxygen/html/PCG_8cpp_source.html +2 -2
  47. package/SVF-doxygen/html/PointerAnalysisImpl_8cpp_source.html +3 -3
  48. package/SVF-doxygen/html/PointerAnalysisImpl_8h_source.html +4 -4
  49. package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +7 -7
  50. package/SVF-doxygen/html/PointerAnalysis_8h_source.html +1 -1
  51. package/SVF-doxygen/html/ProgSlice_8cpp_source.html +2 -2
  52. package/SVF-doxygen/html/SVFFileSystem_8cpp_source.html +6 -6
  53. package/SVF-doxygen/html/SVFFileSystem_8h_source.html +6 -6
  54. package/SVF-doxygen/html/SVFGBuilder_8cpp_source.html +2 -2
  55. package/SVF-doxygen/html/SVFGOPT_8cpp_source.html +2 -2
  56. package/SVF-doxygen/html/SVFGStat_8cpp_source.html +1 -1
  57. package/SVF-doxygen/html/SVFG_8cpp_source.html +2 -2
  58. package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +3 -3
  59. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +773 -777
  60. package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +20 -20
  61. package/SVF-doxygen/html/SVFIRBuilder_8cpp_source.html +5 -5
  62. package/SVF-doxygen/html/SVFIRExtAPI_8cpp_source.html +1 -1
  63. package/SVF-doxygen/html/SVFStat_8cpp_source.html +1 -1
  64. package/SVF-doxygen/html/SVFStatements_8cpp_source.html +1 -1
  65. package/SVF-doxygen/html/SVFStatements_8h_source.html +5 -5
  66. package/SVF-doxygen/html/SVFType_8cpp.html +2 -2
  67. package/SVF-doxygen/html/SVFType_8cpp_source.html +70 -61
  68. package/SVF-doxygen/html/SVFType_8h.html +23 -23
  69. package/SVF-doxygen/html/SVFType_8h_source.html +401 -378
  70. package/SVF-doxygen/html/SVFUtil_8h_source.html +1 -1
  71. package/SVF-doxygen/html/SVFValue_8cpp_source.html +4 -4
  72. package/SVF-doxygen/html/SVFValue_8h_source.html +3 -3
  73. package/SVF-doxygen/html/SVFVariables_8cpp_source.html +2 -2
  74. package/SVF-doxygen/html/SaberCondAllocator_8cpp_source.html +3 -3
  75. package/SVF-doxygen/html/SaberSVFGBuilder_8cpp_source.html +2 -2
  76. package/SVF-doxygen/html/SrcSnkDDA_8cpp_source.html +3 -3
  77. package/SVF-doxygen/html/Steensgaard_8cpp_source.html +5 -5
  78. package/SVF-doxygen/html/SymbolTableBuilder_8cpp_source.html +4 -4
  79. package/SVF-doxygen/html/SymbolTableInfo_8cpp_source.html +7 -7
  80. package/SVF-doxygen/html/SymbolTableInfo_8h_source.html +1 -1
  81. package/SVF-doxygen/html/TCT_8cpp_source.html +2 -2
  82. package/SVF-doxygen/html/ThreadCallGraph_8cpp_source.html +2 -2
  83. package/SVF-doxygen/html/VFG_8cpp_source.html +2 -2
  84. package/SVF-doxygen/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
  85. package/SVF-doxygen/html/VersionedFlowSensitive_8cpp_source.html +1 -1
  86. package/SVF-doxygen/html/WPAPass_8cpp_source.html +4 -4
  87. package/SVF-doxygen/html/WPAPass_8h_source.html +2 -2
  88. package/SVF-doxygen/html/WTO_8h_source.html +2 -2
  89. package/SVF-doxygen/html/classSVF_1_1AccessPath-members.html +1 -1
  90. package/SVF-doxygen/html/classSVF_1_1AccessPath.html +167 -161
  91. package/SVF-doxygen/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  92. package/SVF-doxygen/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  93. package/SVF-doxygen/html/classSVF_1_1AddrStmt.html +1 -1
  94. package/SVF-doxygen/html/classSVF_1_1AliasDDAClient.html +2 -2
  95. package/SVF-doxygen/html/classSVF_1_1Andersen.html +5 -5
  96. package/SVF-doxygen/html/classSVF_1_1AndersenBase.html +2 -2
  97. package/SVF-doxygen/html/classSVF_1_1AndersenSCD.html +1 -1
  98. package/SVF-doxygen/html/classSVF_1_1AndersenStat.html +1 -1
  99. package/SVF-doxygen/html/classSVF_1_1AndersenWaveDiff.html +1 -1
  100. package/SVF-doxygen/html/classSVF_1_1BVDataPTAImpl.html +2 -2
  101. package/SVF-doxygen/html/classSVF_1_1BinaryOPStmt.html +1 -1
  102. package/SVF-doxygen/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  103. package/SVF-doxygen/html/classSVF_1_1BranchStmt.html +1 -1
  104. package/SVF-doxygen/html/classSVF_1_1CDG.html +1 -1
  105. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGBuilder.html +2 -2
  106. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO.html +1 -1
  107. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO_1_1TailBuilder.html +1 -1
  108. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGraph.html +91 -91
  109. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockNode.html +24 -27
  110. package/SVF-doxygen/html/classSVF_1_1CFLAlias.html +7 -7
  111. package/SVF-doxygen/html/classSVF_1_1CFLBase.html +1 -1
  112. package/SVF-doxygen/html/classSVF_1_1CHGBuilder.html +4 -4
  113. package/SVF-doxygen/html/classSVF_1_1CallCFGEdge.html +1 -1
  114. package/SVF-doxygen/html/classSVF_1_1CallPE.html +1 -1
  115. package/SVF-doxygen/html/classSVF_1_1CmpStmt.html +1 -1
  116. package/SVF-doxygen/html/classSVF_1_1CmpVFGNode.html +1 -1
  117. package/SVF-doxygen/html/classSVF_1_1CondPTAImpl.html +3 -3
  118. package/SVF-doxygen/html/classSVF_1_1ContextDDA.html +5 -5
  119. package/SVF-doxygen/html/classSVF_1_1CopyStmt.html +1 -1
  120. package/SVF-doxygen/html/classSVF_1_1CxtStmt.html +1 -1
  121. package/SVF-doxygen/html/classSVF_1_1CxtThread.html +1 -1
  122. package/SVF-doxygen/html/classSVF_1_1CxtThreadStmt.html +1 -1
  123. package/SVF-doxygen/html/classSVF_1_1DDAClient.html +3 -3
  124. package/SVF-doxygen/html/classSVF_1_1DDAPass.html +1 -1
  125. package/SVF-doxygen/html/classSVF_1_1DDAStat.html +1 -1
  126. package/SVF-doxygen/html/classSVF_1_1DDAVFSolver.html +4 -4
  127. package/SVF-doxygen/html/classSVF_1_1DoubleFreeChecker.html +1 -1
  128. package/SVF-doxygen/html/classSVF_1_1FIObjVar.html +1 -1
  129. package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +5 -5
  130. package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +5 -5
  131. package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat.html +1 -1
  132. package/SVF-doxygen/html/classSVF_1_1ForkJoinAnalysis.html +3 -3
  133. package/SVF-doxygen/html/classSVF_1_1GepObjVar.html +1 -1
  134. package/SVF-doxygen/html/classSVF_1_1GepStmt-members.html +1 -1
  135. package/SVF-doxygen/html/classSVF_1_1GepStmt.html +9 -10
  136. package/SVF-doxygen/html/classSVF_1_1GepValVar.html +1 -1
  137. package/SVF-doxygen/html/classSVF_1_1ICFG.html +1 -1
  138. package/SVF-doxygen/html/classSVF_1_1ICFGBuilder.html +2 -2
  139. package/SVF-doxygen/html/classSVF_1_1IRGraph.html +2 -2
  140. package/SVF-doxygen/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  141. package/SVF-doxygen/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  142. package/SVF-doxygen/html/classSVF_1_1IntraCFGEdge.html +1 -1
  143. package/SVF-doxygen/html/classSVF_1_1IntraICFGNode.html +1 -1
  144. package/SVF-doxygen/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  145. package/SVF-doxygen/html/classSVF_1_1LLVMLoopAnalysis.html +2 -2
  146. package/SVF-doxygen/html/classSVF_1_1LLVMModuleSet.html +10 -10
  147. package/SVF-doxygen/html/classSVF_1_1LeakChecker.html +2 -2
  148. package/SVF-doxygen/html/classSVF_1_1LoadStmt.html +1 -1
  149. package/SVF-doxygen/html/classSVF_1_1LockAnalysis.html +5 -5
  150. package/SVF-doxygen/html/classSVF_1_1LockResultValidator.html +1 -1
  151. package/SVF-doxygen/html/classSVF_1_1MHP.html +6 -6
  152. package/SVF-doxygen/html/classSVF_1_1MRGenerator.html +6 -6
  153. package/SVF-doxygen/html/classSVF_1_1MTA.html +5 -5
  154. package/SVF-doxygen/html/classSVF_1_1MTAAnnotator.html +2 -2
  155. package/SVF-doxygen/html/classSVF_1_1MTAResultValidator.html +1 -1
  156. package/SVF-doxygen/html/classSVF_1_1MTASVFGBuilder.html +3 -3
  157. package/SVF-doxygen/html/classSVF_1_1MemObj.html +1 -1
  158. package/SVF-doxygen/html/classSVF_1_1MemSSA.html +4 -4
  159. package/SVF-doxygen/html/classSVF_1_1MemSSAStat.html +1 -1
  160. package/SVF-doxygen/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +2 -2
  161. package/SVF-doxygen/html/classSVF_1_1ObjTypeInfo.html +1 -1
  162. package/SVF-doxygen/html/classSVF_1_1ObjVar.html +1 -1
  163. package/SVF-doxygen/html/classSVF_1_1PCG.html +2 -2
  164. package/SVF-doxygen/html/classSVF_1_1PHIVFGNode.html +1 -1
  165. package/SVF-doxygen/html/classSVF_1_1PhiStmt.html +1 -1
  166. package/SVF-doxygen/html/classSVF_1_1PointerAnalysis.html +7 -7
  167. package/SVF-doxygen/html/classSVF_1_1ProgSlice.html +2 -2
  168. package/SVF-doxygen/html/classSVF_1_1RetCFGEdge.html +1 -1
  169. package/SVF-doxygen/html/classSVF_1_1RetPE.html +1 -1
  170. package/SVF-doxygen/html/classSVF_1_1SVFArrayType-members.html +11 -7
  171. package/SVF-doxygen/html/classSVF_1_1SVFArrayType.html +65 -27
  172. package/SVF-doxygen/html/classSVF_1_1SVFFunction.html +1 -1
  173. package/SVF-doxygen/html/classSVF_1_1SVFFunctionType-members.html +30 -27
  174. package/SVF-doxygen/html/classSVF_1_1SVFFunctionType.html +28 -22
  175. package/SVF-doxygen/html/classSVF_1_1SVFG.html +2 -2
  176. package/SVF-doxygen/html/classSVF_1_1SVFGBuilder.html +2 -2
  177. package/SVF-doxygen/html/classSVF_1_1SVFGOPT.html +2 -2
  178. package/SVF-doxygen/html/classSVF_1_1SVFGStat.html +1 -1
  179. package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +2 -2
  180. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState-members.html +2 -2
  181. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +749 -769
  182. package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +6 -6
  183. package/SVF-doxygen/html/classSVF_1_1SVFIntegerType-members.html +30 -27
  184. package/SVF-doxygen/html/classSVF_1_1SVFIntegerType.html +32 -26
  185. package/SVF-doxygen/html/classSVF_1_1SVFOtherType-members.html +32 -29
  186. package/SVF-doxygen/html/classSVF_1_1SVFOtherType.html +33 -27
  187. package/SVF-doxygen/html/classSVF_1_1SVFPointerType-members.html +30 -27
  188. package/SVF-doxygen/html/classSVF_1_1SVFPointerType.html +28 -22
  189. package/SVF-doxygen/html/classSVF_1_1SVFStat.html +1 -1
  190. package/SVF-doxygen/html/classSVF_1_1SVFStructType-members.html +32 -29
  191. package/SVF-doxygen/html/classSVF_1_1SVFStructType.html +33 -27
  192. package/SVF-doxygen/html/classSVF_1_1SVFType-members.html +27 -24
  193. package/SVF-doxygen/html/classSVF_1_1SVFType.html +120 -23
  194. package/SVF-doxygen/html/classSVF_1_1SVFValue.html +23 -23
  195. package/SVF-doxygen/html/classSVF_1_1SVFVar.html +1 -1
  196. package/SVF-doxygen/html/classSVF_1_1SaberCondAllocator.html +3 -3
  197. package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder.html +2 -2
  198. package/SVF-doxygen/html/classSVF_1_1SelectStmt.html +1 -1
  199. package/SVF-doxygen/html/classSVF_1_1SrcSnkDDA.html +3 -3
  200. package/SVF-doxygen/html/classSVF_1_1Steensgaard.html +5 -5
  201. package/SVF-doxygen/html/classSVF_1_1StoreStmt.html +1 -1
  202. package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +4 -4
  203. package/SVF-doxygen/html/classSVF_1_1SymbolTableInfo.html +5 -5
  204. package/SVF-doxygen/html/classSVF_1_1TCT.html +3 -3
  205. package/SVF-doxygen/html/classSVF_1_1TDForkPE.html +1 -1
  206. package/SVF-doxygen/html/classSVF_1_1TDJoinPE.html +1 -1
  207. package/SVF-doxygen/html/classSVF_1_1ThreadCallGraph.html +2 -2
  208. package/SVF-doxygen/html/classSVF_1_1UnaryOPStmt.html +1 -1
  209. package/SVF-doxygen/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  210. package/SVF-doxygen/html/classSVF_1_1VFG.html +2 -2
  211. package/SVF-doxygen/html/classSVF_1_1ValVar.html +1 -1
  212. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitive.html +1 -1
  213. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
  214. package/SVF-doxygen/html/classSVF_1_1WPAPass.html +3 -3
  215. package/SVF-doxygen/html/functions_a.html +1 -1
  216. package/SVF-doxygen/html/functions_c.html +1 -1
  217. package/SVF-doxygen/html/functions_func.html +1 -1
  218. package/SVF-doxygen/html/functions_func_c.html +1 -1
  219. package/SVF-doxygen/html/functions_func_g.html +24 -18
  220. package/SVF-doxygen/html/functions_func_i.html +17 -11
  221. package/SVF-doxygen/html/functions_g.html +25 -19
  222. package/SVF-doxygen/html/functions_i.html +16 -10
  223. package/SVF-doxygen/html/functions_p.html +19 -23
  224. package/SVF-doxygen/html/functions_r.html +5 -5
  225. package/SVF-doxygen/html/functions_s.html +14 -12
  226. package/SVF-doxygen/html/functions_t.html +7 -7
  227. package/SVF-doxygen/html/functions_v.html +3 -3
  228. package/SVF-doxygen/html/globals_func_t.html +3 -0
  229. package/SVF-doxygen/html/globals_t.html +3 -0
  230. package/SVF-doxygen/html/namespaceSVF.html +46 -37
  231. package/SVF-doxygen/html/namespacemembers.html +1 -1
  232. package/SVF-doxygen/html/namespacemembers_func.html +1 -1
  233. package/SVF-doxygen/html/search/all_0.js +1 -1
  234. package/SVF-doxygen/html/search/all_1.js +1 -1
  235. package/SVF-doxygen/html/search/all_10.js +324 -324
  236. package/SVF-doxygen/html/search/all_11.js +224 -224
  237. package/SVF-doxygen/html/search/all_12.js +541 -541
  238. package/SVF-doxygen/html/search/all_13.js +191 -190
  239. package/SVF-doxygen/html/search/all_14.js +67 -67
  240. package/SVF-doxygen/html/search/all_15.js +170 -170
  241. package/SVF-doxygen/html/search/all_16.js +63 -63
  242. package/SVF-doxygen/html/search/all_17.js +1 -1
  243. package/SVF-doxygen/html/search/all_18.js +1 -1
  244. package/SVF-doxygen/html/search/all_19.js +11 -11
  245. package/SVF-doxygen/html/search/all_1a.js +172 -172
  246. package/SVF-doxygen/html/search/all_3.js +1 -1
  247. package/SVF-doxygen/html/search/all_7.js +457 -455
  248. package/SVF-doxygen/html/search/all_8.js +194 -194
  249. package/SVF-doxygen/html/search/all_9.js +610 -608
  250. package/SVF-doxygen/html/search/all_a.js +46 -46
  251. package/SVF-doxygen/html/search/all_b.js +26 -26
  252. package/SVF-doxygen/html/search/all_c.js +116 -116
  253. package/SVF-doxygen/html/search/all_d.js +196 -196
  254. package/SVF-doxygen/html/search/all_e.js +207 -207
  255. package/SVF-doxygen/html/search/all_f.js +116 -116
  256. package/SVF-doxygen/html/search/classes_0.js +26 -26
  257. package/SVF-doxygen/html/search/classes_1.js +9 -9
  258. package/SVF-doxygen/html/search/classes_10.js +73 -73
  259. package/SVF-doxygen/html/search/classes_11.js +15 -15
  260. package/SVF-doxygen/html/search/classes_12.js +2 -2
  261. package/SVF-doxygen/html/search/classes_13.js +10 -10
  262. package/SVF-doxygen/html/search/classes_14.js +14 -14
  263. package/SVF-doxygen/html/search/classes_15.js +1 -1
  264. package/SVF-doxygen/html/search/classes_2.js +80 -80
  265. package/SVF-doxygen/html/search/classes_3.js +37 -37
  266. package/SVF-doxygen/html/search/classes_4.js +9 -9
  267. package/SVF-doxygen/html/search/classes_5.js +28 -28
  268. package/SVF-doxygen/html/search/classes_6.js +104 -104
  269. package/SVF-doxygen/html/search/classes_7.js +33 -33
  270. package/SVF-doxygen/html/search/classes_8.js +56 -56
  271. package/SVF-doxygen/html/search/classes_9.js +1 -1
  272. package/SVF-doxygen/html/search/classes_a.js +12 -12
  273. package/SVF-doxygen/html/search/classes_b.js +29 -29
  274. package/SVF-doxygen/html/search/classes_c.js +6 -6
  275. package/SVF-doxygen/html/search/classes_d.js +18 -18
  276. package/SVF-doxygen/html/search/classes_e.js +36 -36
  277. package/SVF-doxygen/html/search/classes_f.js +25 -25
  278. package/SVF-doxygen/html/search/defines_0.js +3 -3
  279. package/SVF-doxygen/html/search/defines_1.js +2 -2
  280. package/SVF-doxygen/html/search/defines_2.js +30 -30
  281. package/SVF-doxygen/html/search/defines_3.js +21 -21
  282. package/SVF-doxygen/html/search/defines_4.js +2 -2
  283. package/SVF-doxygen/html/search/defines_5.js +4 -4
  284. package/SVF-doxygen/html/search/defines_6.js +2 -2
  285. package/SVF-doxygen/html/search/defines_7.js +5 -5
  286. package/SVF-doxygen/html/search/defines_8.js +11 -11
  287. package/SVF-doxygen/html/search/defines_9.js +9 -9
  288. package/SVF-doxygen/html/search/defines_a.js +2 -2
  289. package/SVF-doxygen/html/search/defines_b.js +1 -1
  290. package/SVF-doxygen/html/search/defines_c.js +3 -3
  291. package/SVF-doxygen/html/search/defines_d.js +2 -2
  292. package/SVF-doxygen/html/search/defines_e.js +7 -7
  293. package/SVF-doxygen/html/search/defines_f.js +3 -3
  294. package/SVF-doxygen/html/search/enums_0.js +3 -3
  295. package/SVF-doxygen/html/search/enums_1.js +2 -2
  296. package/SVF-doxygen/html/search/enums_10.js +1 -1
  297. package/SVF-doxygen/html/search/enums_11.js +1 -1
  298. package/SVF-doxygen/html/search/enums_2.js +8 -8
  299. package/SVF-doxygen/html/search/enums_3.js +1 -1
  300. package/SVF-doxygen/html/search/enums_4.js +3 -3
  301. package/SVF-doxygen/html/search/enums_5.js +1 -1
  302. package/SVF-doxygen/html/search/enums_6.js +2 -2
  303. package/SVF-doxygen/html/search/enums_7.js +2 -2
  304. package/SVF-doxygen/html/search/enums_8.js +4 -4
  305. package/SVF-doxygen/html/search/enums_9.js +1 -1
  306. package/SVF-doxygen/html/search/enums_a.js +1 -1
  307. package/SVF-doxygen/html/search/enums_b.js +7 -7
  308. package/SVF-doxygen/html/search/enums_c.js +1 -1
  309. package/SVF-doxygen/html/search/enums_d.js +4 -4
  310. package/SVF-doxygen/html/search/enums_e.js +2 -2
  311. package/SVF-doxygen/html/search/enums_f.js +4 -4
  312. package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
  313. package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
  314. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  315. package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
  316. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  317. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  318. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  319. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  320. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  321. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  322. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  323. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  324. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  325. package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
  326. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  327. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  328. package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
  329. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  330. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  331. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  332. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  333. package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
  334. package/SVF-doxygen/html/search/files_0.js +13 -13
  335. package/SVF-doxygen/html/search/files_1.js +7 -7
  336. package/SVF-doxygen/html/search/files_10.js +8 -8
  337. package/SVF-doxygen/html/search/files_11.js +8 -8
  338. package/SVF-doxygen/html/search/files_12.js +2 -2
  339. package/SVF-doxygen/html/search/files_2.js +55 -55
  340. package/SVF-doxygen/html/search/files_3.js +14 -14
  341. package/SVF-doxygen/html/search/files_4.js +5 -5
  342. package/SVF-doxygen/html/search/files_5.js +13 -13
  343. package/SVF-doxygen/html/search/files_6.js +9 -9
  344. package/SVF-doxygen/html/search/files_7.js +14 -14
  345. package/SVF-doxygen/html/search/files_8.js +13 -13
  346. package/SVF-doxygen/html/search/files_9.js +18 -18
  347. package/SVF-doxygen/html/search/files_a.js +3 -3
  348. package/SVF-doxygen/html/search/files_b.js +2 -2
  349. package/SVF-doxygen/html/search/files_c.js +20 -20
  350. package/SVF-doxygen/html/search/files_d.js +4 -4
  351. package/SVF-doxygen/html/search/files_e.js +62 -62
  352. package/SVF-doxygen/html/search/files_f.js +8 -8
  353. package/SVF-doxygen/html/search/functions_0.js +12 -12
  354. package/SVF-doxygen/html/search/functions_1.js +359 -359
  355. package/SVF-doxygen/html/search/functions_10.js +140 -140
  356. package/SVF-doxygen/html/search/functions_11.js +138 -138
  357. package/SVF-doxygen/html/search/functions_12.js +276 -276
  358. package/SVF-doxygen/html/search/functions_13.js +59 -58
  359. package/SVF-doxygen/html/search/functions_14.js +39 -39
  360. package/SVF-doxygen/html/search/functions_15.js +71 -71
  361. package/SVF-doxygen/html/search/functions_16.js +32 -32
  362. package/SVF-doxygen/html/search/functions_17.js +3 -3
  363. package/SVF-doxygen/html/search/functions_18.js +172 -172
  364. package/SVF-doxygen/html/search/functions_2.js +86 -86
  365. package/SVF-doxygen/html/search/functions_3.js +257 -257
  366. package/SVF-doxygen/html/search/functions_4.js +75 -75
  367. package/SVF-doxygen/html/search/functions_5.js +53 -53
  368. package/SVF-doxygen/html/search/functions_6.js +59 -59
  369. package/SVF-doxygen/html/search/functions_7.js +851 -849
  370. package/SVF-doxygen/html/search/functions_8.js +146 -146
  371. package/SVF-doxygen/html/search/functions_9.js +428 -426
  372. package/SVF-doxygen/html/search/functions_a.js +30 -30
  373. package/SVF-doxygen/html/search/functions_b.js +2 -2
  374. package/SVF-doxygen/html/search/functions_c.js +26 -26
  375. package/SVF-doxygen/html/search/functions_d.js +77 -77
  376. package/SVF-doxygen/html/search/functions_e.js +35 -35
  377. package/SVF-doxygen/html/search/functions_f.js +56 -56
  378. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  379. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  380. package/SVF-doxygen/html/search/related_0.js +2 -2
  381. package/SVF-doxygen/html/search/related_1.js +2 -2
  382. package/SVF-doxygen/html/search/related_2.js +2 -2
  383. package/SVF-doxygen/html/search/related_3.js +2 -2
  384. package/SVF-doxygen/html/search/related_4.js +2 -2
  385. package/SVF-doxygen/html/search/related_5.js +1 -1
  386. package/SVF-doxygen/html/search/related_6.js +2 -2
  387. package/SVF-doxygen/html/search/related_7.js +4 -4
  388. package/SVF-doxygen/html/search/related_8.js +2 -2
  389. package/SVF-doxygen/html/search/related_9.js +4 -4
  390. package/SVF-doxygen/html/search/related_a.js +19 -19
  391. package/SVF-doxygen/html/search/related_b.js +4 -4
  392. package/SVF-doxygen/html/search/related_c.js +1 -1
  393. package/SVF-doxygen/html/search/related_d.js +11 -11
  394. package/SVF-doxygen/html/search/related_e.js +2 -2
  395. package/SVF-doxygen/html/search/related_f.js +2 -2
  396. package/SVF-doxygen/html/search/typedefs_0.js +18 -18
  397. package/SVF-doxygen/html/search/typedefs_1.js +26 -26
  398. package/SVF-doxygen/html/search/typedefs_10.js +61 -61
  399. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  400. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  401. package/SVF-doxygen/html/search/typedefs_13.js +35 -35
  402. package/SVF-doxygen/html/search/typedefs_14.js +8 -8
  403. package/SVF-doxygen/html/search/typedefs_2.js +129 -129
  404. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  405. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  406. package/SVF-doxygen/html/search/typedefs_5.js +41 -41
  407. package/SVF-doxygen/html/search/typedefs_6.js +55 -55
  408. package/SVF-doxygen/html/search/typedefs_7.js +42 -42
  409. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  410. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  411. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  412. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  413. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  414. package/SVF-doxygen/html/search/typedefs_d.js +15 -15
  415. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  416. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  417. package/SVF-doxygen/html/search/variables_0.js +151 -151
  418. package/SVF-doxygen/html/search/variables_1.js +75 -75
  419. package/SVF-doxygen/html/search/variables_10.js +97 -97
  420. package/SVF-doxygen/html/search/variables_11.js +46 -46
  421. package/SVF-doxygen/html/search/variables_12.js +92 -92
  422. package/SVF-doxygen/html/search/variables_13.js +75 -75
  423. package/SVF-doxygen/html/search/variables_14.js +14 -14
  424. package/SVF-doxygen/html/search/variables_15.js +48 -48
  425. package/SVF-doxygen/html/search/variables_16.js +9 -9
  426. package/SVF-doxygen/html/search/variables_17.js +1 -1
  427. package/SVF-doxygen/html/search/variables_18.js +2 -2
  428. package/SVF-doxygen/html/search/variables_2.js +37 -37
  429. package/SVF-doxygen/html/search/variables_3.js +142 -142
  430. package/SVF-doxygen/html/search/variables_4.js +55 -55
  431. package/SVF-doxygen/html/search/variables_5.js +39 -39
  432. package/SVF-doxygen/html/search/variables_6.js +66 -66
  433. package/SVF-doxygen/html/search/variables_7.js +33 -33
  434. package/SVF-doxygen/html/search/variables_8.js +7 -7
  435. package/SVF-doxygen/html/search/variables_9.js +77 -77
  436. package/SVF-doxygen/html/search/variables_a.js +4 -4
  437. package/SVF-doxygen/html/search/variables_b.js +10 -10
  438. package/SVF-doxygen/html/search/variables_c.js +45 -45
  439. package/SVF-doxygen/html/search/variables_d.js +56 -56
  440. package/SVF-doxygen/html/search/variables_e.js +123 -123
  441. package/SVF-doxygen/html/search/variables_f.js +30 -30
  442. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  443. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01SVF_1_1CDG_01_5_01_4.html +19 -20
  444. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01SVF_1_1CFBasicBlockGraph_01_5_01_4.html +102 -102
  445. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01Inverse_3_01SVF_1_1CFBasicBlockNode_01_5_01_4_01_4.html +1 -1
  446. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1CFBasicBlockGraph_01_5_01_4.html +2 -2
  447. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1CFBasicBlockNode_01_5_01_4.html +1 -1
  448. package/SVF-doxygen/html/structSVF_1_1Hash_3_01NodePair_01_4.html +11 -11
  449. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1AccessPath_01_4.html +8 -8
  450. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1NodePair_01_4.html +11 -11
  451. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1SparseBitVector_3_01N_01_4_01_4.html +7 -7
  452. package/SVF-doxygen/html/structstd_1_1hash_3_01std_1_1vector_3_01T_01_4_01_4.html +14 -14
  453. package/SVF-doxygen/html/svf-ex_8cpp.html +235 -125
  454. package/SVF-doxygen/html/svf-ex_8cpp_source.html +234 -144
  455. package/package.json +1 -1
  456. package/svf/include/AbstractExecution/SVFIR2ItvExeState.h +5 -5
  457. package/svf/include/Graphs/CDG.h +2 -3
  458. package/svf/include/Graphs/CFBasicBlockG.h +3 -5
  459. package/svf/include/MemoryModel/AccessPath.h +24 -6
  460. package/svf/include/SVFIR/SVFStatements.h +2 -2
  461. package/svf/include/SVFIR/SVFType.h +19 -0
  462. package/svf/lib/AbstractExecution/SVFIR2ItvExeState.cpp +16 -21
  463. package/svf/lib/MemoryModel/AccessPath.cpp +15 -14
  464. package/svf/lib/SVFIR/SVFType.cpp +7 -0
  465. package/svf-llvm/lib/LLVMUtil.cpp +10 -0
  466. 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.794",
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);
@@ -266,7 +266,7 @@ public:
266
266
  bool added1 = edge->getDstNode()->addIncomingEdge(edge);
267
267
  bool added2 = edge->getSrcNode()->addOutgoingEdge(edge);
268
268
  assert(added1 && added2 && "edge not added??");
269
- return true;
269
+ return added1 && added2;
270
270
  }
271
271
 
272
272
  /// Add a CDG node
@@ -438,8 +438,7 @@ struct DOTGraphTraits<SVF::CDG *> : public DOTGraphTraits<SVF::PAG *>
438
438
  template<class EdgeIter>
439
439
  static std::string getEdgeAttributes(NodeType *, EdgeIter EI, SVF::CDG *)
440
440
  {
441
- SVF::CDGEdge *edge = *(EI.getCurrent());
442
- assert(edge && "No edge found!!");
441
+ assert(*(EI.getCurrent()) && "No edge found!!");
443
442
  return "style=solid";
444
443
  }
445
444
 
@@ -312,15 +312,13 @@ public:
312
312
  ///@{
313
313
  inline u32_t removeIncomingEdge(CFBasicBlockEdge *edge)
314
314
  {
315
- iterator it = InEdges.find(edge);
316
- assert(it != InEdges.end() && "can not find in edge in SVFG node");
315
+ assert(InEdges.find(edge) != InEdges.end() && "can not find in edge in SVFG node");
317
316
  return InEdges.erase(edge);
318
317
  }
319
318
 
320
319
  inline u32_t removeOutgoingEdge(CFBasicBlockEdge *edge)
321
320
  {
322
- iterator it = OutEdges.find(edge);
323
- assert(it != OutEdges.end() && "can not find out edge in SVFG node");
321
+ assert(OutEdges.find(edge) != OutEdges.end() && "can not find out edge in SVFG node");
324
322
  return OutEdges.erase(edge);
325
323
  }
326
324
  ///@}
@@ -457,7 +455,7 @@ public:
457
455
  bool added2 = edge->getSrcNode()->addOutgoingEdge(edge);
458
456
  assert(added1 && added2 && "edge not added??");
459
457
  _totalCFBasicBlockEdge++;
460
- return true;
458
+ return added1 && added2;
461
459
  }
462
460
 
463
461
  /// Add a ICFGNodeWrapper
@@ -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);