svf-tools 1.0.828 → 1.0.830

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 (398) hide show
  1. package/SVF-doxygen/html/AccessPath_8cpp_source.html +225 -224
  2. package/SVF-doxygen/html/AccessPath_8h_source.html +11 -11
  3. package/SVF-doxygen/html/AndersenSFR_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/Andersen_8cpp_source.html +1 -1
  5. package/SVF-doxygen/html/BasicTypes_8h.html +2 -0
  6. package/SVF-doxygen/html/BasicTypes_8h_source.html +123 -121
  7. package/SVF-doxygen/html/CFLAlias_8cpp_source.html +1 -1
  8. package/SVF-doxygen/html/CFLGraphBuilder_8cpp_source.html +1 -1
  9. package/SVF-doxygen/html/CHGBuilder_8cpp_source.html +11 -11
  10. package/SVF-doxygen/html/ConsG_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/ConsG_8h_source.html +1 -1
  12. package/SVF-doxygen/html/ContextDDA_8cpp_source.html +1 -1
  13. package/SVF-doxygen/html/ContextDDA_8h_source.html +1 -1
  14. package/SVF-doxygen/html/CxtStmt_8h_source.html +1 -1
  15. package/SVF-doxygen/html/DCHG_8cpp_source.html +12 -12
  16. package/SVF-doxygen/html/DCHG_8h_source.html +5 -5
  17. package/SVF-doxygen/html/DDAClient_8cpp_source.html +2 -2
  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/FlowDDA_8cpp_source.html +1 -1
  21. package/SVF-doxygen/html/FlowDDA_8h_source.html +1 -1
  22. package/SVF-doxygen/html/FlowSensitiveStat_8cpp_source.html +1 -1
  23. package/SVF-doxygen/html/ICFGBuilder_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/ICFG_8cpp_source.html +1 -1
  25. package/SVF-doxygen/html/IRGraph_8h_source.html +2 -2
  26. package/SVF-doxygen/html/LLVMModule_8cpp_source.html +145 -144
  27. package/SVF-doxygen/html/LLVMModule_8h_source.html +3 -3
  28. package/SVF-doxygen/html/LLVMUtil_8cpp_source.html +1135 -1037
  29. package/SVF-doxygen/html/LLVMUtil_8h.html +8 -5
  30. package/SVF-doxygen/html/LLVMUtil_8h_source.html +418 -415
  31. package/SVF-doxygen/html/LockResultValidator_8cpp_source.html +1 -1
  32. package/SVF-doxygen/html/MHP_8cpp_source.html +1 -1
  33. package/SVF-doxygen/html/MTAAnnotator_8cpp_source.html +1 -1
  34. package/SVF-doxygen/html/MemRegion_8cpp_source.html +3 -3
  35. package/SVF-doxygen/html/MemSSA_8cpp_source.html +1 -1
  36. package/SVF-doxygen/html/PointerAnalysisImpl_8cpp_source.html +4 -4
  37. package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +363 -362
  38. package/SVF-doxygen/html/PointerAnalysis_8h_source.html +13 -13
  39. package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +7 -7
  40. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +11 -10
  41. package/SVF-doxygen/html/SVFIRBuilder_8cpp_source.html +927 -924
  42. package/SVF-doxygen/html/SVFIRBuilder_8h_source.html +35 -34
  43. package/SVF-doxygen/html/SVFIRExtAPI_8cpp_source.html +2 -2
  44. package/SVF-doxygen/html/SVFIR_8cpp_source.html +1 -1
  45. package/SVF-doxygen/html/SVFIR_8h_source.html +1 -1
  46. package/SVF-doxygen/html/SVFStat_8cpp_source.html +12 -12
  47. package/SVF-doxygen/html/SVFStatements_8cpp_source.html +1 -1
  48. package/SVF-doxygen/html/SVFStatements_8h_source.html +2 -2
  49. package/SVF-doxygen/html/SVFType_8cpp_source.html +38 -37
  50. package/SVF-doxygen/html/SVFType_8h_source.html +5 -5
  51. package/SVF-doxygen/html/SVFValue_8cpp_source.html +1 -1
  52. package/SVF-doxygen/html/SVFValue_8h_source.html +1 -1
  53. package/SVF-doxygen/html/SVFVariables_8cpp_source.html +1 -1
  54. package/SVF-doxygen/html/SVFVariables_8h_source.html +1 -1
  55. package/SVF-doxygen/html/SaberSVFGBuilder_8cpp_source.html +1 -1
  56. package/SVF-doxygen/html/Steensgaard_8cpp_source.html +1 -1
  57. package/SVF-doxygen/html/SymbolTableBuilder_8cpp_source.html +651 -640
  58. package/SVF-doxygen/html/SymbolTableBuilder_8h_source.html +18 -18
  59. package/SVF-doxygen/html/SymbolTableInfo_8cpp_source.html +339 -338
  60. package/SVF-doxygen/html/SymbolTableInfo_8h_source.html +33 -33
  61. package/SVF-doxygen/html/ThreadCallGraph_8cpp_source.html +1 -1
  62. package/SVF-doxygen/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
  63. package/SVF-doxygen/html/classSVF_1_1AccessPath-members.html +3 -3
  64. package/SVF-doxygen/html/classSVF_1_1AccessPath.html +236 -235
  65. package/SVF-doxygen/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  66. package/SVF-doxygen/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  67. package/SVF-doxygen/html/classSVF_1_1AddrStmt.html +1 -1
  68. package/SVF-doxygen/html/classSVF_1_1AliasDDAClient.html +1 -1
  69. package/SVF-doxygen/html/classSVF_1_1Andersen.html +1 -1
  70. package/SVF-doxygen/html/classSVF_1_1AndersenSFR.html +1 -1
  71. package/SVF-doxygen/html/classSVF_1_1BVDataPTAImpl.html +4 -4
  72. package/SVF-doxygen/html/classSVF_1_1BinaryOPStmt.html +1 -1
  73. package/SVF-doxygen/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  74. package/SVF-doxygen/html/classSVF_1_1BranchStmt.html +1 -1
  75. package/SVF-doxygen/html/classSVF_1_1CFLAlias.html +3 -3
  76. package/SVF-doxygen/html/classSVF_1_1CHGBuilder.html +11 -11
  77. package/SVF-doxygen/html/classSVF_1_1CallCFGEdge.html +1 -1
  78. package/SVF-doxygen/html/classSVF_1_1CallPE.html +1 -1
  79. package/SVF-doxygen/html/classSVF_1_1CmpStmt.html +1 -1
  80. package/SVF-doxygen/html/classSVF_1_1CmpVFGNode.html +1 -1
  81. package/SVF-doxygen/html/classSVF_1_1ContextDDA.html +2 -2
  82. package/SVF-doxygen/html/classSVF_1_1CopyStmt.html +1 -1
  83. package/SVF-doxygen/html/classSVF_1_1CxtStmt.html +1 -1
  84. package/SVF-doxygen/html/classSVF_1_1CxtThread.html +1 -1
  85. package/SVF-doxygen/html/classSVF_1_1CxtThreadStmt.html +1 -1
  86. package/SVF-doxygen/html/classSVF_1_1DCHGraph.html +12 -12
  87. package/SVF-doxygen/html/classSVF_1_1DDAStat.html +1 -1
  88. package/SVF-doxygen/html/classSVF_1_1DDAVFSolver.html +1 -1
  89. package/SVF-doxygen/html/classSVF_1_1DoubleFreeChecker.html +1 -1
  90. package/SVF-doxygen/html/classSVF_1_1FIObjVar.html +1 -1
  91. package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +2 -2
  92. package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +1 -1
  93. package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat.html +1 -1
  94. package/SVF-doxygen/html/classSVF_1_1ForkJoinAnalysis.html +1 -1
  95. package/SVF-doxygen/html/classSVF_1_1FunptrDDAClient.html +1 -1
  96. package/SVF-doxygen/html/classSVF_1_1GepObjVar.html +2 -2
  97. package/SVF-doxygen/html/classSVF_1_1GepStmt.html +3 -3
  98. package/SVF-doxygen/html/classSVF_1_1GepValVar.html +1 -1
  99. package/SVF-doxygen/html/classSVF_1_1ICFG.html +1 -1
  100. package/SVF-doxygen/html/classSVF_1_1ICFGBuilder.html +1 -1
  101. package/SVF-doxygen/html/classSVF_1_1IRGraph.html +2 -2
  102. package/SVF-doxygen/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  103. package/SVF-doxygen/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  104. package/SVF-doxygen/html/classSVF_1_1IntraCFGEdge.html +1 -1
  105. package/SVF-doxygen/html/classSVF_1_1IntraICFGNode.html +1 -1
  106. package/SVF-doxygen/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  107. package/SVF-doxygen/html/classSVF_1_1LLVMModuleSet.html +141 -140
  108. package/SVF-doxygen/html/classSVF_1_1LeakChecker.html +1 -1
  109. package/SVF-doxygen/html/classSVF_1_1LoadStmt.html +1 -1
  110. package/SVF-doxygen/html/classSVF_1_1LockResultValidator.html +1 -1
  111. package/SVF-doxygen/html/classSVF_1_1MHP.html +1 -1
  112. package/SVF-doxygen/html/classSVF_1_1MRGenerator.html +3 -3
  113. package/SVF-doxygen/html/classSVF_1_1MTAAnnotator.html +1 -1
  114. package/SVF-doxygen/html/classSVF_1_1MTAResultValidator.html +1 -1
  115. package/SVF-doxygen/html/classSVF_1_1MemObj.html +121 -121
  116. package/SVF-doxygen/html/classSVF_1_1MemSSA.html +1 -1
  117. package/SVF-doxygen/html/classSVF_1_1ObjTypeInfo.html +29 -30
  118. package/SVF-doxygen/html/classSVF_1_1ObjVar.html +2 -2
  119. package/SVF-doxygen/html/classSVF_1_1PHIVFGNode.html +1 -1
  120. package/SVF-doxygen/html/classSVF_1_1PhiStmt.html +1 -1
  121. package/SVF-doxygen/html/classSVF_1_1PointerAnalysis.html +342 -341
  122. package/SVF-doxygen/html/classSVF_1_1RetCFGEdge.html +1 -1
  123. package/SVF-doxygen/html/classSVF_1_1RetPE.html +1 -1
  124. package/SVF-doxygen/html/classSVF_1_1SVFArrayType.html +4 -4
  125. package/SVF-doxygen/html/classSVF_1_1SVFFunctionType.html +4 -4
  126. package/SVF-doxygen/html/classSVF_1_1SVFIR.html +1 -1
  127. package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +6 -6
  128. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +11 -10
  129. package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +868 -864
  130. package/SVF-doxygen/html/classSVF_1_1SVFIntegerType.html +7 -7
  131. package/SVF-doxygen/html/classSVF_1_1SVFOtherType.html +4 -4
  132. package/SVF-doxygen/html/classSVF_1_1SVFPointerType.html +3 -2
  133. package/SVF-doxygen/html/classSVF_1_1SVFStat.html +12 -12
  134. package/SVF-doxygen/html/classSVF_1_1SVFStructType.html +4 -4
  135. package/SVF-doxygen/html/classSVF_1_1SVFValue.html +23 -23
  136. package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
  137. package/SVF-doxygen/html/classSVF_1_1SelectStmt.html +1 -1
  138. package/SVF-doxygen/html/classSVF_1_1Steensgaard.html +1 -1
  139. package/SVF-doxygen/html/classSVF_1_1StoreStmt.html +1 -1
  140. package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder-members.html +1 -1
  141. package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +642 -629
  142. package/SVF-doxygen/html/classSVF_1_1SymbolTableInfo.html +125 -124
  143. package/SVF-doxygen/html/classSVF_1_1TCT.html +1 -1
  144. package/SVF-doxygen/html/classSVF_1_1TDForkPE.html +1 -1
  145. package/SVF-doxygen/html/classSVF_1_1TDJoinPE.html +1 -1
  146. package/SVF-doxygen/html/classSVF_1_1ThreadCallGraph.html +1 -1
  147. package/SVF-doxygen/html/classSVF_1_1TypeAnalysis.html +2 -2
  148. package/SVF-doxygen/html/classSVF_1_1UnaryOPStmt.html +1 -1
  149. package/SVF-doxygen/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  150. package/SVF-doxygen/html/classSVF_1_1ValVar.html +1 -1
  151. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
  152. package/SVF-doxygen/html/functions_a.html +1 -1
  153. package/SVF-doxygen/html/functions_func.html +1 -1
  154. package/SVF-doxygen/html/functions_func_g.html +10 -10
  155. package/SVF-doxygen/html/functions_func_p.html +1 -1
  156. package/SVF-doxygen/html/functions_g.html +6 -6
  157. package/SVF-doxygen/html/functions_r.html +2 -2
  158. package/SVF-doxygen/html/functions_s.html +5 -5
  159. package/SVF-doxygen/html/functions_t.html +7 -7
  160. package/SVF-doxygen/html/functions_v.html +3 -1
  161. package/SVF-doxygen/html/functions_w.html +8 -8
  162. package/SVF-doxygen/html/menudata.js +0 -1
  163. package/SVF-doxygen/html/namespaceSVF.html +43 -25
  164. package/SVF-doxygen/html/namespaceSVF_1_1LLVMUtil.html +1280 -1152
  165. package/SVF-doxygen/html/namespacemembers_d.html +7 -1
  166. package/SVF-doxygen/html/namespacemembers_func_d.html +7 -1
  167. package/SVF-doxygen/html/namespacemembers_func_g.html +7 -4
  168. package/SVF-doxygen/html/namespacemembers_g.html +11 -5
  169. package/SVF-doxygen/html/namespacemembers_l.html +0 -3
  170. package/SVF-doxygen/html/namespacemembers_type_g.html +3 -0
  171. package/SVF-doxygen/html/search/all_1.js +1 -1
  172. package/SVF-doxygen/html/search/all_10.js +324 -324
  173. package/SVF-doxygen/html/search/all_11.js +223 -223
  174. package/SVF-doxygen/html/search/all_12.js +553 -553
  175. package/SVF-doxygen/html/search/all_13.js +192 -192
  176. package/SVF-doxygen/html/search/all_14.js +67 -67
  177. package/SVF-doxygen/html/search/all_15.js +167 -167
  178. package/SVF-doxygen/html/search/all_16.js +63 -63
  179. package/SVF-doxygen/html/search/all_17.js +1 -1
  180. package/SVF-doxygen/html/search/all_18.js +1 -1
  181. package/SVF-doxygen/html/search/all_19.js +11 -11
  182. package/SVF-doxygen/html/search/all_1a.js +172 -172
  183. package/SVF-doxygen/html/search/all_4.js +8 -6
  184. package/SVF-doxygen/html/search/all_5.js +119 -119
  185. package/SVF-doxygen/html/search/all_6.js +226 -226
  186. package/SVF-doxygen/html/search/all_7.js +1048 -1046
  187. package/SVF-doxygen/html/search/all_8.js +198 -198
  188. package/SVF-doxygen/html/search/all_9.js +607 -607
  189. package/SVF-doxygen/html/search/all_a.js +46 -46
  190. package/SVF-doxygen/html/search/all_b.js +26 -26
  191. package/SVF-doxygen/html/search/all_c.js +115 -116
  192. package/SVF-doxygen/html/search/all_d.js +198 -198
  193. package/SVF-doxygen/html/search/all_e.js +207 -207
  194. package/SVF-doxygen/html/search/all_f.js +116 -116
  195. package/SVF-doxygen/html/search/classes_0.js +26 -26
  196. package/SVF-doxygen/html/search/classes_1.js +9 -9
  197. package/SVF-doxygen/html/search/classes_10.js +73 -73
  198. package/SVF-doxygen/html/search/classes_11.js +15 -15
  199. package/SVF-doxygen/html/search/classes_12.js +2 -2
  200. package/SVF-doxygen/html/search/classes_13.js +10 -10
  201. package/SVF-doxygen/html/search/classes_14.js +14 -14
  202. package/SVF-doxygen/html/search/classes_15.js +1 -1
  203. package/SVF-doxygen/html/search/classes_2.js +80 -80
  204. package/SVF-doxygen/html/search/classes_3.js +37 -37
  205. package/SVF-doxygen/html/search/classes_4.js +9 -9
  206. package/SVF-doxygen/html/search/classes_5.js +28 -28
  207. package/SVF-doxygen/html/search/classes_6.js +104 -104
  208. package/SVF-doxygen/html/search/classes_7.js +34 -34
  209. package/SVF-doxygen/html/search/classes_8.js +56 -56
  210. package/SVF-doxygen/html/search/classes_9.js +1 -1
  211. package/SVF-doxygen/html/search/classes_a.js +12 -12
  212. package/SVF-doxygen/html/search/classes_b.js +29 -29
  213. package/SVF-doxygen/html/search/classes_c.js +6 -6
  214. package/SVF-doxygen/html/search/classes_d.js +18 -18
  215. package/SVF-doxygen/html/search/classes_e.js +36 -36
  216. package/SVF-doxygen/html/search/classes_f.js +25 -25
  217. package/SVF-doxygen/html/search/defines_0.js +3 -3
  218. package/SVF-doxygen/html/search/defines_1.js +2 -2
  219. package/SVF-doxygen/html/search/defines_2.js +30 -30
  220. package/SVF-doxygen/html/search/defines_3.js +21 -21
  221. package/SVF-doxygen/html/search/defines_4.js +2 -2
  222. package/SVF-doxygen/html/search/defines_5.js +4 -4
  223. package/SVF-doxygen/html/search/defines_6.js +2 -2
  224. package/SVF-doxygen/html/search/defines_7.js +5 -5
  225. package/SVF-doxygen/html/search/defines_8.js +11 -11
  226. package/SVF-doxygen/html/search/defines_9.js +9 -9
  227. package/SVF-doxygen/html/search/defines_a.js +2 -2
  228. package/SVF-doxygen/html/search/defines_b.js +1 -1
  229. package/SVF-doxygen/html/search/defines_c.js +3 -3
  230. package/SVF-doxygen/html/search/defines_d.js +2 -2
  231. package/SVF-doxygen/html/search/defines_e.js +7 -7
  232. package/SVF-doxygen/html/search/defines_f.js +3 -3
  233. package/SVF-doxygen/html/search/enums_0.js +3 -3
  234. package/SVF-doxygen/html/search/enums_1.js +2 -2
  235. package/SVF-doxygen/html/search/enums_10.js +1 -1
  236. package/SVF-doxygen/html/search/enums_11.js +1 -1
  237. package/SVF-doxygen/html/search/enums_2.js +8 -8
  238. package/SVF-doxygen/html/search/enums_3.js +1 -1
  239. package/SVF-doxygen/html/search/enums_4.js +3 -3
  240. package/SVF-doxygen/html/search/enums_5.js +1 -1
  241. package/SVF-doxygen/html/search/enums_6.js +2 -2
  242. package/SVF-doxygen/html/search/enums_7.js +2 -2
  243. package/SVF-doxygen/html/search/enums_8.js +4 -4
  244. package/SVF-doxygen/html/search/enums_9.js +1 -1
  245. package/SVF-doxygen/html/search/enums_a.js +1 -1
  246. package/SVF-doxygen/html/search/enums_b.js +7 -7
  247. package/SVF-doxygen/html/search/enums_c.js +1 -1
  248. package/SVF-doxygen/html/search/enums_d.js +4 -4
  249. package/SVF-doxygen/html/search/enums_e.js +2 -2
  250. package/SVF-doxygen/html/search/enums_f.js +4 -4
  251. package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
  252. package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
  253. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  254. package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
  255. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  256. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  257. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  258. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  259. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  260. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  261. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  262. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  263. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  264. package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
  265. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  266. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  267. package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
  268. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  269. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  270. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  271. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  272. package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
  273. package/SVF-doxygen/html/search/files_0.js +13 -13
  274. package/SVF-doxygen/html/search/files_1.js +7 -7
  275. package/SVF-doxygen/html/search/files_10.js +8 -8
  276. package/SVF-doxygen/html/search/files_11.js +8 -8
  277. package/SVF-doxygen/html/search/files_12.js +2 -2
  278. package/SVF-doxygen/html/search/files_2.js +55 -55
  279. package/SVF-doxygen/html/search/files_3.js +14 -14
  280. package/SVF-doxygen/html/search/files_4.js +5 -5
  281. package/SVF-doxygen/html/search/files_5.js +13 -13
  282. package/SVF-doxygen/html/search/files_6.js +9 -9
  283. package/SVF-doxygen/html/search/files_7.js +14 -14
  284. package/SVF-doxygen/html/search/files_8.js +13 -13
  285. package/SVF-doxygen/html/search/files_9.js +18 -18
  286. package/SVF-doxygen/html/search/files_a.js +3 -3
  287. package/SVF-doxygen/html/search/files_b.js +2 -2
  288. package/SVF-doxygen/html/search/files_c.js +20 -20
  289. package/SVF-doxygen/html/search/files_d.js +4 -4
  290. package/SVF-doxygen/html/search/files_e.js +62 -62
  291. package/SVF-doxygen/html/search/files_f.js +8 -8
  292. package/SVF-doxygen/html/search/functions_0.js +13 -13
  293. package/SVF-doxygen/html/search/functions_1.js +360 -360
  294. package/SVF-doxygen/html/search/functions_10.js +140 -140
  295. package/SVF-doxygen/html/search/functions_11.js +139 -139
  296. package/SVF-doxygen/html/search/functions_12.js +288 -288
  297. package/SVF-doxygen/html/search/functions_13.js +59 -59
  298. package/SVF-doxygen/html/search/functions_14.js +39 -39
  299. package/SVF-doxygen/html/search/functions_15.js +71 -71
  300. package/SVF-doxygen/html/search/functions_16.js +32 -32
  301. package/SVF-doxygen/html/search/functions_17.js +3 -3
  302. package/SVF-doxygen/html/search/functions_18.js +172 -172
  303. package/SVF-doxygen/html/search/functions_2.js +89 -89
  304. package/SVF-doxygen/html/search/functions_3.js +258 -258
  305. package/SVF-doxygen/html/search/functions_4.js +78 -76
  306. package/SVF-doxygen/html/search/functions_5.js +53 -53
  307. package/SVF-doxygen/html/search/functions_6.js +60 -60
  308. package/SVF-doxygen/html/search/functions_7.js +857 -856
  309. package/SVF-doxygen/html/search/functions_8.js +149 -149
  310. package/SVF-doxygen/html/search/functions_9.js +423 -423
  311. package/SVF-doxygen/html/search/functions_a.js +30 -30
  312. package/SVF-doxygen/html/search/functions_b.js +2 -2
  313. package/SVF-doxygen/html/search/functions_c.js +25 -26
  314. package/SVF-doxygen/html/search/functions_d.js +79 -79
  315. package/SVF-doxygen/html/search/functions_e.js +35 -35
  316. package/SVF-doxygen/html/search/functions_f.js +56 -56
  317. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  318. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  319. package/SVF-doxygen/html/search/related_0.js +2 -2
  320. package/SVF-doxygen/html/search/related_1.js +2 -2
  321. package/SVF-doxygen/html/search/related_2.js +2 -2
  322. package/SVF-doxygen/html/search/related_3.js +2 -2
  323. package/SVF-doxygen/html/search/related_4.js +2 -2
  324. package/SVF-doxygen/html/search/related_5.js +1 -1
  325. package/SVF-doxygen/html/search/related_6.js +2 -2
  326. package/SVF-doxygen/html/search/related_7.js +4 -4
  327. package/SVF-doxygen/html/search/related_8.js +2 -2
  328. package/SVF-doxygen/html/search/related_9.js +4 -4
  329. package/SVF-doxygen/html/search/related_a.js +19 -19
  330. package/SVF-doxygen/html/search/related_b.js +4 -4
  331. package/SVF-doxygen/html/search/related_c.js +2 -2
  332. package/SVF-doxygen/html/search/related_d.js +12 -12
  333. package/SVF-doxygen/html/search/related_e.js +2 -2
  334. package/SVF-doxygen/html/search/related_f.js +2 -2
  335. package/SVF-doxygen/html/search/typedefs_0.js +19 -19
  336. package/SVF-doxygen/html/search/typedefs_1.js +26 -26
  337. package/SVF-doxygen/html/search/typedefs_10.js +61 -61
  338. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  339. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  340. package/SVF-doxygen/html/search/typedefs_13.js +33 -33
  341. package/SVF-doxygen/html/search/typedefs_14.js +8 -8
  342. package/SVF-doxygen/html/search/typedefs_2.js +129 -129
  343. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  344. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  345. package/SVF-doxygen/html/search/typedefs_5.js +41 -41
  346. package/SVF-doxygen/html/search/typedefs_6.js +56 -55
  347. package/SVF-doxygen/html/search/typedefs_7.js +44 -44
  348. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  349. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  350. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  351. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  352. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  353. package/SVF-doxygen/html/search/typedefs_d.js +14 -14
  354. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  355. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  356. package/SVF-doxygen/html/search/variables_0.js +151 -151
  357. package/SVF-doxygen/html/search/variables_1.js +75 -75
  358. package/SVF-doxygen/html/search/variables_10.js +97 -97
  359. package/SVF-doxygen/html/search/variables_11.js +44 -44
  360. package/SVF-doxygen/html/search/variables_12.js +92 -92
  361. package/SVF-doxygen/html/search/variables_13.js +76 -76
  362. package/SVF-doxygen/html/search/variables_14.js +14 -14
  363. package/SVF-doxygen/html/search/variables_15.js +48 -48
  364. package/SVF-doxygen/html/search/variables_16.js +9 -9
  365. package/SVF-doxygen/html/search/variables_17.js +1 -1
  366. package/SVF-doxygen/html/search/variables_18.js +2 -2
  367. package/SVF-doxygen/html/search/variables_2.js +38 -38
  368. package/SVF-doxygen/html/search/variables_3.js +142 -142
  369. package/SVF-doxygen/html/search/variables_4.js +55 -55
  370. package/SVF-doxygen/html/search/variables_5.js +37 -37
  371. package/SVF-doxygen/html/search/variables_6.js +66 -66
  372. package/SVF-doxygen/html/search/variables_7.js +34 -34
  373. package/SVF-doxygen/html/search/variables_8.js +7 -7
  374. package/SVF-doxygen/html/search/variables_9.js +78 -78
  375. package/SVF-doxygen/html/search/variables_a.js +4 -4
  376. package/SVF-doxygen/html/search/variables_b.js +10 -10
  377. package/SVF-doxygen/html/search/variables_c.js +45 -45
  378. package/SVF-doxygen/html/search/variables_d.js +56 -56
  379. package/SVF-doxygen/html/search/variables_e.js +123 -123
  380. package/SVF-doxygen/html/search/variables_f.js +30 -30
  381. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  382. package/SVF-doxygen/html/svf-ex_8cpp.html +1 -1
  383. package/SVF-doxygen/html/svf-ex_8cpp_source.html +1 -1
  384. package/package.json +1 -1
  385. package/svf/include/MemoryModel/AccessPath.h +2 -2
  386. package/svf/lib/AbstractExecution/SVFIR2ConsExeState.cpp +2 -2
  387. package/svf/lib/AbstractExecution/SVFIR2ItvExeState.cpp +4 -4
  388. package/svf/lib/MemoryModel/AccessPath.cpp +6 -5
  389. package/svf/lib/MemoryModel/PointerAnalysis.cpp +1 -0
  390. package/svf/lib/SVFIR/SVFType.cpp +1 -0
  391. package/svf/lib/SVFIR/SymbolTableInfo.cpp +2 -1
  392. package/svf-llvm/include/SVF-LLVM/BasicTypes.h +1 -0
  393. package/svf-llvm/include/SVF-LLVM/LLVMUtil.h +11 -8
  394. package/svf-llvm/include/SVF-LLVM/SymbolTableBuilder.h +1 -1
  395. package/svf-llvm/lib/LLVMModule.cpp +1 -0
  396. package/svf-llvm/lib/LLVMUtil.cpp +112 -18
  397. package/svf-llvm/lib/SVFIRBuilder.cpp +3 -1
  398. package/svf-llvm/lib/SymbolTableBuilder.cpp +21 -9
@@ -258,6 +258,7 @@ void SymbolTableInfo::printFlattenFields(const SVFType* type)
258
258
  }
259
259
  else if (const SVFPointerType* pt= SVFUtil::dyn_cast<SVFPointerType>(type))
260
260
  {
261
+ // TODO: getPtrElementType to be removed
261
262
  u32_t eSize = getNumOfFlattenElements(pt->getPtrElementType());
262
263
  outs() << " {Type: " << *pt << "}\n"
263
264
  << "\t [target size = " << eSize << "]\n"
@@ -373,7 +374,7 @@ bool ObjTypeInfo::isNonPtrFieldObj(const APOffset& apOffset)
373
374
  if (hasPtrObj() == false)
374
375
  return true;
375
376
 
376
- const SVFType* ety = getType();
377
+ const SVFType* ety = type;
377
378
 
378
379
  if (SVFUtil::isa<SVFStructType, SVFArrayType>(ety))
379
380
  {
@@ -177,6 +177,7 @@ typedef llvm::VAStartInst VAStartInst;
177
177
  typedef llvm::BinaryOperator BinaryOperator;
178
178
  typedef llvm::UnaryOperator UnaryOperator;
179
179
  typedef llvm::UndefValue UndefValue;
180
+ typedef llvm::GEPOperator GEPOperator;
180
181
 
181
182
  // Related to Switch Case
182
183
  typedef std::pair<const BasicBlock*, const ConstantInt*> SuccBBAndCondValPair;
@@ -126,6 +126,10 @@ static inline Type* getPtrElementType(const PointerType* pty)
126
126
  #endif
127
127
  }
128
128
 
129
+ /// Infer type based on llvm value, this is for the migration to opaque pointer
130
+ /// please refer to: https://llvm.org/docs/OpaquePointers.html#migration-instructions
131
+ Type *getPointeeType(const Value *value);
132
+
129
133
  /// Get the reference type of heap/static object from an allocation site.
130
134
  //@{
131
135
  inline const PointerType *getRefTypeOfHeapAllocOrStatic(const CallBase* cs)
@@ -139,6 +143,7 @@ inline const PointerType *getRefTypeOfHeapAllocOrStatic(const CallBase* cs)
139
143
  int argPos = SVFUtil::getHeapAllocHoldingArgPosition(svfcs);
140
144
  const Value* arg = cs->getArgOperand(argPos);
141
145
  if (const PointerType *argType = SVFUtil::dyn_cast<PointerType>(arg->getType()))
146
+ // TODO: getPtrElementType need type inference
142
147
  refType = SVFUtil::dyn_cast<PointerType>(getPtrElementType(argType));
143
148
  }
144
149
  // Case 2: heap object held by return value.
@@ -389,6 +394,7 @@ inline u32_t SVFType2ByteSize(const SVFType* type)
389
394
  const llvm::Type* llvm_rhs = LLVMModuleSet::getLLVMModuleSet()->getLLVMType(type);
390
395
  const llvm::PointerType* llvm_rhs_ptr = SVFUtil::dyn_cast<PointerType>(llvm_rhs);
391
396
  assert(llvm_rhs_ptr && "not a pointer type?");
397
+ // TODO: getPtrElementType need type inference
392
398
  const Type *ptrElementType = getPtrElementType(llvm_rhs_ptr);
393
399
  u32_t llvm_rhs_size = LLVMUtil::getTypeSizeInBytes(ptrElementType);
394
400
  u32_t llvm_elem_size = -1;
@@ -496,7 +502,7 @@ const Argument* getConstructorThisPtr(const Function* fun);
496
502
  const Value* getVCallThisPtr(const CallBase* cs);
497
503
  const Value* getVCallVtblPtr(const CallBase* cs);
498
504
  s32_t getVCallIdx(const CallBase* cs);
499
- std::string getClassNameFromType(const Type* ty);
505
+ std::string getClassNameFromType(const StructType* ty);
500
506
  std::string getClassNameOfThisPtr(const CallBase* cs);
501
507
  std::string getFunNameOfVCallSite(const CallBase* cs);
502
508
  bool VCallInCtorOrDtor(const CallBase* cs);
@@ -513,13 +519,10 @@ bool VCallInCtorOrDtor(const CallBase* cs);
513
519
  bool isSameThisPtrInConstructor(const Argument* thisPtr1,
514
520
  const Value* thisPtr2);
515
521
 
516
- template<typename T>
517
- std::string llvmToString(const T& val)
518
- {
519
- std::string str;
520
- llvm::raw_string_ostream(str) << val;
521
- return str;
522
- }
522
+ std::string dumpValue(const Value* val);
523
+
524
+ std::string dumpType(const Type* type);
525
+
523
526
 
524
527
  /**
525
528
  * See more: https://github.com/SVF-tools/SVF/pull/1191
@@ -90,7 +90,7 @@ protected:
90
90
  /// Analyse types of all flattened fields of this object
91
91
  void analyzeObjType(ObjTypeInfo* typeinfo, const Value* val);
92
92
  /// Analyse types of heap and static objects
93
- void analyzeHeapObjType(ObjTypeInfo* typeinfo, const Value* val);
93
+ u32_t analyzeHeapObjType(ObjTypeInfo* typeinfo, const Value* val);
94
94
  /// Analyse types of heap and static objects
95
95
  void analyzeStaticObjType(ObjTypeInfo* typeinfo, const Value* val);
96
96
 
@@ -1384,6 +1384,7 @@ SVFType* LLVMModuleSet::addSVFTypeInfo(const Type* T)
1384
1384
  //cast svftype to SVFPointerType
1385
1385
  SVFPointerType* svfPtrType = SVFUtil::dyn_cast<SVFPointerType>(svftype);
1386
1386
  assert(svfPtrType && "this is not SVFPointerType");
1387
+ // TODO: getPtrElementType to be removed
1387
1388
  svfPtrType->setPtrElementType(getSVFType(LLVMUtil::getPtrElementType(pt)));
1388
1389
  }
1389
1390
 
@@ -241,6 +241,71 @@ const Value* LLVMUtil::stripConstantCasts(const Value* val)
241
241
  return val;
242
242
  }
243
243
 
244
+ /// Infer type based on llvm value, this is for the migration to opaque pointer
245
+ /// please refer to: https://llvm.org/docs/OpaquePointers.html#migration-instructions
246
+ Type *LLVMUtil::getPointeeType(const Value *value)
247
+ {
248
+ assert(value && "value cannot be nullptr!");
249
+ if (const LoadInst *loadInst = SVFUtil::dyn_cast<LoadInst>(value))
250
+ {
251
+ // get the pointee type of rhs based on lhs
252
+ // e.g., for `%lhs = load i64, ptr %rhs`, we return i64
253
+ return loadInst->getType();
254
+ }
255
+ else if (const StoreInst *storeInst = SVFUtil::dyn_cast<StoreInst>(value))
256
+ {
257
+ // get the pointee type of op1 based on op0
258
+ // e.g., for `store i64 %op0, ptr %op1`, we return i64
259
+ return storeInst->getValueOperand()->getType();
260
+ }
261
+ else if (const GetElementPtrInst *gepInst = SVFUtil::dyn_cast<GetElementPtrInst>(value))
262
+ {
263
+ // get the source element type of a gep instruction
264
+ // e.g., for `gep %struct.foo, ptr %base, i64 0`, we return struct.foo
265
+ return gepInst->getSourceElementType();
266
+ }
267
+ else if (const GEPOperator* gepOperator = SVFUtil::dyn_cast<GEPOperator>(value))
268
+ {
269
+ // get the source element type of a gep instruction
270
+ // e.g., for `gep %struct.foo, ptr %base, i64 0`, we return struct.foo
271
+ return gepOperator->getSourceElementType();
272
+ }
273
+ else if (const CallInst *callInst = SVFUtil::dyn_cast<CallInst>(value))
274
+ {
275
+ // get the pointee type of return value
276
+ // e.g., for `%call = call ptr @_Znwm(i64 noundef 8)`, we return i64
277
+ return callInst->getFunctionType();
278
+ }
279
+ else if (const CallBase *callBase = SVFUtil::dyn_cast<CallBase>(value))
280
+ {
281
+ // get the pointee type of return value
282
+ // e.g., for `%call = call ptr @_Znwm(i64 noundef 8)`, we return i64
283
+ return callBase->getFunctionType();
284
+ }
285
+ else if (const AllocaInst *allocaInst = SVFUtil::dyn_cast<AllocaInst>(value))
286
+ {
287
+ // get the type of the allocated memory
288
+ // e.g., for `%retval = alloca i64, align 4`, we return i64
289
+ return allocaInst->getAllocatedType();
290
+ }
291
+ else if (const GlobalVariable *globalVar = SVFUtil::dyn_cast<GlobalVariable>(value))
292
+ {
293
+ // get the pointee type of the global pointer
294
+ return globalVar->getValueType();
295
+ }
296
+ else if (const Function* func = SVFUtil::dyn_cast<Function>(value))
297
+ {
298
+ // get the pointee type of return value
299
+ // e.g., for `%call = call ptr @_Znwm(i64 noundef 8)`, we return i64
300
+ return func->getFunctionType();
301
+ }
302
+ else
303
+ {
304
+ assert(false && (LLVMUtil::dumpValue(value) + "Unknown llvm Type, cannot get Ptr Element Type").c_str());
305
+ abort();
306
+ }
307
+ }
308
+
244
309
  void LLVMUtil::viewCFG(const Function* fun)
245
310
  {
246
311
  if (fun != nullptr)
@@ -351,6 +416,7 @@ const Value* LLVMUtil::getFirstUseViaCastInst(const Value* val)
351
416
  const PointerType * type = SVFUtil::dyn_cast<PointerType>(val->getType());
352
417
  assert(type && "this value should be a pointer type!");
353
418
  /// If type is void* (i8*) and val is immediately used at a bitcast instruction
419
+ // TODO: getPtrElementType to be removed
354
420
  if (IntegerType *IT = SVFUtil::dyn_cast<IntegerType>(getPtrElementType(type)))
355
421
  {
356
422
  if (IT->getBitWidth() == 8)
@@ -397,6 +463,7 @@ const Type* LLVMUtil::getTypeOfHeapAlloc(const Instruction *inst)
397
463
  }
398
464
 
399
465
  assert(type && "not a pointer type?");
466
+ // TODO: getPtrElementType need type inference
400
467
  return getPtrElementType(type);
401
468
  }
402
469
 
@@ -922,6 +989,7 @@ bool LLVMUtil::isLoadVtblInst(const LoadInst* loadInst)
922
989
  const Type* elemTy = valTy;
923
990
  for (u32_t i = 0; i < 3; ++i)
924
991
  {
992
+ // TODO: getPtrElementType to be removed
925
993
  if (const PointerType* ptrTy = SVFUtil::dyn_cast<PointerType>(elemTy))
926
994
  elemTy = LLVMUtil::getPtrElementType(ptrTy);
927
995
  else
@@ -930,7 +998,13 @@ bool LLVMUtil::isLoadVtblInst(const LoadInst* loadInst)
930
998
  if (const FunctionType* functy = SVFUtil::dyn_cast<FunctionType>(elemTy))
931
999
  {
932
1000
  const Type* paramty = functy->getParamType(0);
933
- std::string className = LLVMUtil::getClassNameFromType(paramty);
1001
+ std::string className = "";
1002
+ if(const PointerType* ptrTy = SVFUtil::dyn_cast<PointerType>(paramty))
1003
+ {
1004
+ // TODO: getPtrElementType need type inference
1005
+ if(const StructType* st = SVFUtil::dyn_cast<StructType>(getPtrElementType(ptrTy)))
1006
+ className = LLVMUtil::getClassNameFromType(st);
1007
+ }
934
1008
  if (className.size() > 0)
935
1009
  {
936
1010
  return true;
@@ -1163,25 +1237,19 @@ bool LLVMUtil::VCallInCtorOrDtor(const CallBase* cs)
1163
1237
  return false;
1164
1238
  }
1165
1239
 
1166
- std::string LLVMUtil::getClassNameFromType(const Type* ty)
1240
+ std::string LLVMUtil::getClassNameFromType(const StructType* ty)
1167
1241
  {
1168
1242
  std::string className = "";
1169
- if (const PointerType* ptrType = SVFUtil::dyn_cast<PointerType>(ty))
1243
+ if (!((SVFUtil::cast<StructType>(ty))->isLiteral()))
1170
1244
  {
1171
- const Type* elemType = LLVMUtil::getPtrElementType(ptrType);
1172
- if (SVFUtil::isa<StructType>(elemType) &&
1173
- !((SVFUtil::cast<StructType>(elemType))->isLiteral()))
1245
+ std::string elemTypeName = ty->getStructName().str();
1246
+ if (elemTypeName.compare(0, clsName.size(), clsName) == 0)
1174
1247
  {
1175
- std::string elemTypeName = elemType->getStructName().str();
1176
- if (elemTypeName.compare(0, clsName.size(), clsName) == 0)
1177
- {
1178
- className = elemTypeName.substr(clsName.size());
1179
- }
1180
- else if (elemTypeName.compare(0, structName.size(), structName) ==
1181
- 0)
1182
- {
1183
- className = elemTypeName.substr(structName.size());
1184
- }
1248
+ className = elemTypeName.substr(clsName.size());
1249
+ }
1250
+ else if (elemTypeName.compare(0, structName.size(), structName) == 0)
1251
+ {
1252
+ className = elemTypeName.substr(structName.size());
1185
1253
  }
1186
1254
  }
1187
1255
  return className;
@@ -1189,7 +1257,7 @@ std::string LLVMUtil::getClassNameFromType(const Type* ty)
1189
1257
 
1190
1258
  std::string LLVMUtil::getClassNameOfThisPtr(const CallBase* inst)
1191
1259
  {
1192
- std::string thisPtrClassName;
1260
+ std::string thisPtrClassName = "";
1193
1261
  if (const MDNode* N = inst->getMetadata("VCallPtrType"))
1194
1262
  {
1195
1263
  const MDString* mdstr = SVFUtil::cast<MDString>(N->getOperand(0).get());
@@ -1198,7 +1266,10 @@ std::string LLVMUtil::getClassNameOfThisPtr(const CallBase* inst)
1198
1266
  if (thisPtrClassName.size() == 0)
1199
1267
  {
1200
1268
  const Value* thisPtr = LLVMUtil::getVCallThisPtr(inst);
1201
- thisPtrClassName = getClassNameFromType(thisPtr->getType());
1269
+ if(const PointerType* ptrTy = SVFUtil::dyn_cast<PointerType>(thisPtr->getType()))
1270
+ // TODO: getPtrElementType need type inference
1271
+ if(const StructType* st = SVFUtil::dyn_cast<StructType>(getPtrElementType(ptrTy)))
1272
+ thisPtrClassName = getClassNameFromType(st);
1202
1273
  }
1203
1274
 
1204
1275
  size_t found = thisPtrClassName.find_last_not_of("0123456789");
@@ -1285,6 +1356,29 @@ s64_t LLVMUtil::getCaseValue(const SwitchInst &switchInst, SuccBBAndCondValPair
1285
1356
  return val;
1286
1357
  }
1287
1358
 
1359
+ std::string LLVMUtil::dumpValue(const Value* val)
1360
+ {
1361
+ std::string str;
1362
+ llvm::raw_string_ostream rawstr(str);
1363
+ if (val)
1364
+ rawstr << " " << *val << " ";
1365
+ else
1366
+ rawstr << " llvm Value is null";
1367
+ return rawstr.str();
1368
+ }
1369
+
1370
+ std::string LLVMUtil::dumpType(const Type* type)
1371
+ {
1372
+ std::string str;
1373
+ llvm::raw_string_ostream rawstr(str);
1374
+ if (type)
1375
+ rawstr << " " << *type << " ";
1376
+ else
1377
+ rawstr << " llvm type is null";
1378
+ return rawstr.str();
1379
+ }
1380
+
1381
+
1288
1382
  namespace SVF
1289
1383
  {
1290
1384
 
@@ -318,8 +318,10 @@ bool SVFIRBuilder::computeGepOffset(const User *V, AccessPath& ap)
318
318
  // If it's a non-constant offset access
319
319
  // If its point-to target is struct or array, it's likely an array accessing (%result = gep %struct.A* %a, i32 %non-const-index)
320
320
  // If its point-to target is single value (pointer arithmetic), then it's a variant gep (%result = gep i8* %p, i32 %non-const-index)
321
- if(!op && gepTy->isPointerTy() && getPtrElementType(SVFUtil::dyn_cast<PointerType>(gepTy))->isSingleValueType())
321
+ if(!op && gepTy->isPointerTy() && LLVMUtil::getPointeeType(V)->isSingleValueType())
322
+ {
322
323
  isConst = false;
324
+ }
323
325
 
324
326
  // The actual index
325
327
  //s32_t idx = op->getSExtValue();
@@ -237,6 +237,7 @@ void SymbolTableBuilder::collectSVFTypeInfo(const Value* val)
237
237
  (void)getOrAddSVFTypeInfo(val->getType());
238
238
  if (const PointerType * ptrType = SVFUtil::dyn_cast<PointerType>(val->getType()))
239
239
  {
240
+ // TODO: getPtrElementType to be removed
240
241
  const Type* objtype = LLVMUtil::getPtrElementType(ptrType);
241
242
  (void)getOrAddSVFTypeInfo(objtype);
242
243
  }
@@ -575,6 +576,7 @@ void SymbolTableBuilder::handleGlobalInitializerCE(const Constant* C)
575
576
  */
576
577
  ObjTypeInfo* SymbolTableBuilder::createObjTypeInfo(const Value* val)
577
578
  {
579
+ /// TODO: getPtrElementType to be removed
578
580
  const PointerType* refTy = nullptr;
579
581
 
580
582
  const Instruction* I = SVFUtil::dyn_cast<Instruction>(val);
@@ -627,7 +629,8 @@ void SymbolTableBuilder::analyzeObjType(ObjTypeInfo* typeinfo, const Value* val)
627
629
 
628
630
  const PointerType* refty = SVFUtil::dyn_cast<PointerType>(val->getType());
629
631
  assert(refty && "this value should be a pointer type!");
630
- Type* elemTy = getPtrElementType(refty);
632
+ // TODO: getPtrElementType need type inference
633
+ Type *elemTy = getPtrElementType(refty);
631
634
  bool isPtrObj = false;
632
635
  // Find the inter nested array element
633
636
  while (const ArrayType* AT = SVFUtil::dyn_cast<ArrayType>(elemTy))
@@ -753,20 +756,32 @@ u32_t SymbolTableBuilder::analyzeHeapAllocByteSize(const Value* val)
753
756
  /*!
754
757
  * Analyse types of heap and static objects
755
758
  */
756
- void SymbolTableBuilder::analyzeHeapObjType(ObjTypeInfo* typeinfo, const Value* val)
759
+ u32_t SymbolTableBuilder::analyzeHeapObjType(ObjTypeInfo* typeinfo, const Value* val)
757
760
  {
758
761
  if(const Value* castUse = getFirstUseViaCastInst(val))
759
762
  {
760
763
  typeinfo->setFlag(ObjTypeInfo::HEAP_OBJ);
761
- typeinfo->resetTypeForHeapStaticObj(
762
- LLVMModuleSet::getLLVMModuleSet()->getSVFType(castUse->getType()));
764
+ const Type* objTy = getTypeOfHeapAlloc(SVFUtil::cast<Instruction>(val));
765
+ typeinfo->resetTypeForHeapStaticObj(LLVMModuleSet::getLLVMModuleSet()->getSVFType(objTy));
763
766
  analyzeObjType(typeinfo,castUse);
767
+ if(SVFUtil::isa<ArrayType>(objTy))
768
+ return getNumOfElements(objTy);
769
+ else if(const StructType* st = SVFUtil::dyn_cast<StructType>(objTy))
770
+ {
771
+ /// For an C++ class, it can have variant elements depending on the vtable size,
772
+ /// Hence we only handle non-cpp-class object, the type of the cpp class is treated as PointerType at the cast site
773
+ if(getClassNameFromType(st).empty())
774
+ return getNumOfElements(objTy);
775
+ else
776
+ typeinfo->resetTypeForHeapStaticObj(LLVMModuleSet::getLLVMModuleSet()->getSVFType(castUse->getType()));
777
+ }
764
778
  }
765
779
  else
766
780
  {
767
781
  typeinfo->setFlag(ObjTypeInfo::HEAP_OBJ);
768
782
  typeinfo->setFlag(ObjTypeInfo::HASPTR_OBJ);
769
783
  }
784
+ return typeinfo->getMaxFieldOffsetLimit();
770
785
  }
771
786
 
772
787
  /*!
@@ -777,8 +792,7 @@ void SymbolTableBuilder::analyzeStaticObjType(ObjTypeInfo* typeinfo, const Value
777
792
  if(const Value* castUse = getFirstUseViaCastInst(val))
778
793
  {
779
794
  typeinfo->setFlag(ObjTypeInfo::STATIC_OBJ);
780
- typeinfo->resetTypeForHeapStaticObj(
781
- LLVMModuleSet::getLLVMModuleSet()->getSVFType(castUse->getType()));
795
+ typeinfo->resetTypeForHeapStaticObj(LLVMModuleSet::getLLVMModuleSet()->getSVFType(castUse->getType()));
782
796
  analyzeObjType(typeinfo,castUse);
783
797
  }
784
798
  else
@@ -844,9 +858,7 @@ void SymbolTableBuilder::initTypeInfo(ObjTypeInfo* typeinfo, const Value* val,
844
858
  LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(
845
859
  SVFUtil::cast<Instruction>(val))))
846
860
  {
847
- analyzeHeapObjType(typeinfo,val);
848
- // Heap object, label its field as infinite here
849
- elemNum = typeinfo->getMaxFieldOffsetLimit();
861
+ elemNum = analyzeHeapObjType(typeinfo,val);
850
862
  // analyze heap alloc like (malloc/calloc/...), the alloc functions have
851
863
  // annotation like "AllocSize:Arg1". Please refer to extapi.c.
852
864
  // e.g. calloc(4, 10), annotation is "AllocSize:Arg0*Arg1",