svf-tools 1.0.894 → 1.0.896

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 (305) hide show
  1. package/SVF-doxygen/html/AbstractExecution_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/AbstractExecution_8h_source.html +1 -1
  3. package/SVF-doxygen/html/AbstractPointsToDS_8h_source.html +1 -1
  4. package/SVF-doxygen/html/AbstractValue_8h_source.html +1 -1
  5. package/SVF-doxygen/html/AccessPath_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/AccessPath_8h_source.html +1 -1
  7. package/SVF-doxygen/html/AddressValue_8h_source.html +1 -1
  8. package/SVF-doxygen/html/AndersenPWC_8h_source.html +1 -1
  9. package/SVF-doxygen/html/AndersenSCD_8cpp_source.html +1 -1
  10. package/SVF-doxygen/html/AndersenSFR_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/AndersenStat_8cpp_source.html +1 -1
  12. package/SVF-doxygen/html/AndersenWaveDiff_8cpp_source.html +1 -1
  13. package/SVF-doxygen/html/Andersen_8cpp_source.html +1 -1
  14. package/SVF-doxygen/html/Andersen_8h_source.html +1 -1
  15. package/SVF-doxygen/html/Annotator_8h_source.html +4 -4
  16. package/SVF-doxygen/html/BasicTypes_8h.html +1 -0
  17. package/SVF-doxygen/html/BasicTypes_8h_source.html +345 -344
  18. package/SVF-doxygen/html/BitVector_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/BitVector_8h_source.html +1 -1
  20. package/SVF-doxygen/html/BoundedZ3Expr_8cpp_source.html +1 -1
  21. package/SVF-doxygen/html/BoundedZ3Expr_8h_source.html +1 -1
  22. package/SVF-doxygen/html/BreakConstantExpr_8cpp.html +2 -2
  23. package/SVF-doxygen/html/BreakConstantExpr_8cpp_source.html +6 -6
  24. package/SVF-doxygen/html/BreakConstantExpr_8h_source.html +5 -5
  25. package/SVF-doxygen/html/BufOverflowChecker_8cpp_source.html +1 -1
  26. package/SVF-doxygen/html/BufOverflowChecker_8h_source.html +1 -1
  27. package/SVF-doxygen/html/CDGBuilder_8cpp_source.html +1 -1
  28. package/SVF-doxygen/html/CDGBuilder_8h_source.html +1 -1
  29. package/SVF-doxygen/html/CDG_8cpp_source.html +1 -1
  30. package/SVF-doxygen/html/CDG_8h_source.html +1 -1
  31. package/SVF-doxygen/html/CFGNormalizer_8cpp_source.html +1 -1
  32. package/SVF-doxygen/html/CFGNormalizer_8h_source.html +1 -1
  33. package/SVF-doxygen/html/CFGrammar_8cpp_source.html +1 -1
  34. package/SVF-doxygen/html/CFGrammar_8h_source.html +2 -2
  35. package/SVF-doxygen/html/CFLAlias_8cpp_source.html +1 -1
  36. package/SVF-doxygen/html/CFLAlias_8h_source.html +1 -1
  37. package/SVF-doxygen/html/CFLBase_8cpp_source.html +1 -1
  38. package/SVF-doxygen/html/CFLBase_8h_source.html +1 -1
  39. package/SVF-doxygen/html/CFLGramGraphChecker_8h_source.html +1 -1
  40. package/SVF-doxygen/html/CFLGraphBuilder_8cpp_source.html +1 -1
  41. package/SVF-doxygen/html/CFLGraphBuilder_8h_source.html +1 -1
  42. package/SVF-doxygen/html/CFLGraph_8cpp_source.html +1 -1
  43. package/SVF-doxygen/html/CFLGraph_8h_source.html +1 -1
  44. package/SVF-doxygen/html/CFLSVFGBuilder_8cpp_source.html +1 -1
  45. package/SVF-doxygen/html/CFLSVFGBuilder_8h_source.html +1 -1
  46. package/SVF-doxygen/html/CFLSolver_8cpp_source.html +1 -1
  47. package/SVF-doxygen/html/CFLSolver_8h_source.html +1 -1
  48. package/SVF-doxygen/html/CFLStat_8cpp_source.html +1 -1
  49. package/SVF-doxygen/html/CFLStat_8h_source.html +1 -1
  50. package/SVF-doxygen/html/CFLVF_8cpp_source.html +1 -1
  51. package/SVF-doxygen/html/CFLVF_8h_source.html +1 -1
  52. package/SVF-doxygen/html/CHGBuilder_8cpp_source.html +304 -303
  53. package/SVF-doxygen/html/CHGBuilder_8h_source.html +10 -10
  54. package/SVF-doxygen/html/CHG_8cpp_source.html +1 -1
  55. package/SVF-doxygen/html/CHG_8h_source.html +1 -1
  56. package/SVF-doxygen/html/CSC_8cpp_source.html +1 -1
  57. package/SVF-doxygen/html/CSC_8h_source.html +1 -1
  58. package/SVF-doxygen/html/CallGraphBuilder_8cpp_source.html +1 -1
  59. package/SVF-doxygen/html/CallGraphBuilder_8h_source.html +1 -1
  60. package/SVF-doxygen/html/Casting_8h_source.html +1 -1
  61. package/SVF-doxygen/html/ConditionalPT_8h_source.html +1 -1
  62. package/SVF-doxygen/html/ConsExeState_8cpp_source.html +1 -1
  63. package/SVF-doxygen/html/ConsExeState_8h_source.html +1 -1
  64. package/SVF-doxygen/html/ConsGEdge_8h_source.html +1 -1
  65. package/SVF-doxygen/html/ConsGNode_8h_source.html +1 -1
  66. package/SVF-doxygen/html/ConsG_8cpp_source.html +1 -1
  67. package/SVF-doxygen/html/ConsG_8h_source.html +1 -1
  68. package/SVF-doxygen/html/ContextDDA_8cpp_source.html +1 -1
  69. package/SVF-doxygen/html/ContextDDA_8h_source.html +1 -1
  70. package/SVF-doxygen/html/CoreBitVector_8cpp_source.html +1 -1
  71. package/SVF-doxygen/html/CoreBitVector_8h_source.html +1 -1
  72. package/SVF-doxygen/html/CppUtil_8cpp_source.html +17 -17
  73. package/SVF-doxygen/html/CppUtil_8h_source.html +6 -6
  74. package/SVF-doxygen/html/CxtStmt_8h_source.html +1 -1
  75. package/SVF-doxygen/html/DCHG_8cpp_source.html +22 -22
  76. package/SVF-doxygen/html/DCHG_8h_source.html +7 -7
  77. package/SVF-doxygen/html/DDAClient_8cpp_source.html +1 -1
  78. package/SVF-doxygen/html/DDAClient_8h_source.html +1 -1
  79. package/SVF-doxygen/html/DDAPass_8cpp_source.html +1 -1
  80. package/SVF-doxygen/html/DDAPass_8h_source.html +1 -1
  81. package/SVF-doxygen/html/DDAStat_8cpp_source.html +1 -1
  82. package/SVF-doxygen/html/DDAStat_8h_source.html +1 -1
  83. package/SVF-doxygen/html/DDAVFSolver_8h_source.html +1 -1
  84. package/SVF-doxygen/html/DOTGraphTraits_8h_source.html +1 -1
  85. package/SVF-doxygen/html/DPItem_8h_source.html +1 -1
  86. package/SVF-doxygen/html/DoubleFreeChecker_8cpp_source.html +1 -1
  87. package/SVF-doxygen/html/DoubleFreeChecker_8h_source.html +1 -1
  88. package/SVF-doxygen/html/ExeState_8cpp_source.html +1 -1
  89. package/SVF-doxygen/html/ExeState_8h_source.html +1 -1
  90. package/SVF-doxygen/html/ExtAPI_8cpp_source.html +1 -1
  91. package/SVF-doxygen/html/ExtAPI_8h_source.html +1 -1
  92. package/SVF-doxygen/html/FSMPTA_8cpp_source.html +1 -1
  93. package/SVF-doxygen/html/FSMPTA_8h_source.html +1 -1
  94. package/SVF-doxygen/html/FileChecker_8cpp_source.html +1 -1
  95. package/SVF-doxygen/html/FileChecker_8h_source.html +1 -1
  96. package/SVF-doxygen/html/FlowDDA_8cpp_source.html +1 -1
  97. package/SVF-doxygen/html/FlowDDA_8h_source.html +1 -1
  98. package/SVF-doxygen/html/FlowSensitiveStat_8cpp_source.html +1 -1
  99. package/SVF-doxygen/html/FlowSensitive_8cpp_source.html +1 -1
  100. package/SVF-doxygen/html/FlowSensitive_8h_source.html +1 -1
  101. package/SVF-doxygen/html/GEPTypeBridgeIterator_8h_source.html +3 -3
  102. package/SVF-doxygen/html/GeneralType_8h_source.html +1 -1
  103. package/SVF-doxygen/html/GenericGraph_8h_source.html +1 -1
  104. package/SVF-doxygen/html/GrammarBuilder_8cpp_source.html +1 -1
  105. package/SVF-doxygen/html/GrammarBuilder_8h_source.html +1 -1
  106. package/SVF-doxygen/html/GraphPrinter_8h_source.html +1 -1
  107. package/SVF-doxygen/html/GraphReachSolver_8h_source.html +1 -1
  108. package/SVF-doxygen/html/GraphTraits_8h_source.html +1 -1
  109. package/SVF-doxygen/html/GraphWriter_8h_source.html +1 -1
  110. package/SVF-doxygen/html/ICFGBuilder_8cpp_source.html +8 -8
  111. package/SVF-doxygen/html/ICFGBuilder_8h_source.html +2 -2
  112. package/SVF-doxygen/html/ICFGEdge_8h_source.html +1 -1
  113. package/SVF-doxygen/html/ICFGNode_8h_source.html +1 -1
  114. package/SVF-doxygen/html/ICFGSimplification_8cpp_source.html +1 -1
  115. package/SVF-doxygen/html/ICFGSimplification_8h_source.html +1 -1
  116. package/SVF-doxygen/html/ICFGStat_8h_source.html +1 -1
  117. package/SVF-doxygen/html/ICFGWTO_8h_source.html +1 -1
  118. package/SVF-doxygen/html/ICFG_8cpp_source.html +1 -1
  119. package/SVF-doxygen/html/ICFG_8h_source.html +1 -1
  120. package/SVF-doxygen/html/IRGraph_8cpp_source.html +1 -1
  121. package/SVF-doxygen/html/IRGraph_8h_source.html +1 -1
  122. package/SVF-doxygen/html/IntervalExeState_8cpp_source.html +1 -1
  123. package/SVF-doxygen/html/IntervalExeState_8h_source.html +1 -1
  124. package/SVF-doxygen/html/IntervalValue_8h_source.html +1 -1
  125. package/SVF-doxygen/html/LLVMLoopAnalysis_8cpp_source.html +7 -7
  126. package/SVF-doxygen/html/LLVMLoopAnalysis_8h_source.html +1 -1
  127. package/SVF-doxygen/html/LLVMModule_8cpp_source.html +37 -37
  128. package/SVF-doxygen/html/LLVMModule_8h_source.html +15 -15
  129. package/SVF-doxygen/html/LLVMUtil_8cpp_source.html +32 -32
  130. package/SVF-doxygen/html/LLVMUtil_8h_source.html +20 -20
  131. package/SVF-doxygen/html/LeakChecker_8cpp_source.html +1 -1
  132. package/SVF-doxygen/html/LeakChecker_8h_source.html +1 -1
  133. package/SVF-doxygen/html/LockAnalysis_8cpp_source.html +1 -1
  134. package/SVF-doxygen/html/LockAnalysis_8h_source.html +1 -1
  135. package/SVF-doxygen/html/LockResultValidator_8cpp_source.html +12 -12
  136. package/SVF-doxygen/html/LockResultValidator_8h_source.html +2 -2
  137. package/SVF-doxygen/html/MHP_8cpp_source.html +1 -1
  138. package/SVF-doxygen/html/MHP_8h_source.html +1 -1
  139. package/SVF-doxygen/html/MSSAMuChi_8h_source.html +1 -1
  140. package/SVF-doxygen/html/MTAAnnotator_8cpp_source.html +7 -7
  141. package/SVF-doxygen/html/MTAAnnotator_8h_source.html +3 -3
  142. package/SVF-doxygen/html/MTAResultValidator_8cpp_source.html +12 -12
  143. package/SVF-doxygen/html/MTAStat_8cpp_source.html +1 -1
  144. package/SVF-doxygen/html/MTAStat_8h_source.html +2 -2
  145. package/SVF-doxygen/html/MTA_8cpp_source.html +1 -1
  146. package/SVF-doxygen/html/MTA_8h_source.html +1 -1
  147. package/SVF-doxygen/html/MemPartition_8cpp_source.html +1 -1
  148. package/SVF-doxygen/html/MemPartition_8h_source.html +1 -1
  149. package/SVF-doxygen/html/MemRegion_8cpp_source.html +1 -1
  150. package/SVF-doxygen/html/MemRegion_8h_source.html +1 -1
  151. package/SVF-doxygen/html/MemSSA_8cpp_source.html +1 -1
  152. package/SVF-doxygen/html/MemSSA_8h_source.html +1 -1
  153. package/SVF-doxygen/html/MutablePointsToDS_8h_source.html +1 -1
  154. package/SVF-doxygen/html/NodeIDAllocator_8cpp_source.html +1 -1
  155. package/SVF-doxygen/html/NodeIDAllocator_8h_source.html +1 -1
  156. package/SVF-doxygen/html/NumericLiteral_8h_source.html +1 -1
  157. package/SVF-doxygen/html/ObjTypeInference_8cpp.html +1 -1
  158. package/SVF-doxygen/html/ObjTypeInference_8cpp_source.html +525 -501
  159. package/SVF-doxygen/html/ObjTypeInference_8h_source.html +17 -17
  160. package/SVF-doxygen/html/Options_8cpp_source.html +1 -1
  161. package/SVF-doxygen/html/Options_8h_source.html +1 -1
  162. package/SVF-doxygen/html/PAGBuilderFromFile_8cpp_source.html +1 -1
  163. package/SVF-doxygen/html/PAGBuilderFromFile_8h_source.html +1 -1
  164. package/SVF-doxygen/html/PCG_8cpp_source.html +1 -1
  165. package/SVF-doxygen/html/PCG_8h_source.html +1 -1
  166. package/SVF-doxygen/html/PTACallGraph_8cpp_source.html +1 -1
  167. package/SVF-doxygen/html/PTACallGraph_8h_source.html +1 -1
  168. package/SVF-doxygen/html/PTAStat_8cpp_source.html +1 -1
  169. package/SVF-doxygen/html/PTAStat_8h_source.html +1 -1
  170. package/SVF-doxygen/html/PersistentPointsToCache_8h_source.html +1 -1
  171. package/SVF-doxygen/html/PersistentPointsToDS_8h_source.html +1 -1
  172. package/SVF-doxygen/html/PointerAnalysisImpl_8cpp_source.html +1 -1
  173. package/SVF-doxygen/html/PointerAnalysisImpl_8h_source.html +1 -1
  174. package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +1 -1
  175. package/SVF-doxygen/html/PointerAnalysis_8h_source.html +1 -1
  176. package/SVF-doxygen/html/PointsTo_8cpp_source.html +1 -1
  177. package/SVF-doxygen/html/PointsTo_8h_source.html +1 -1
  178. package/SVF-doxygen/html/ProgSlice_8cpp_source.html +1 -1
  179. package/SVF-doxygen/html/ProgSlice_8h_source.html +1 -1
  180. package/SVF-doxygen/html/RelExeState_8cpp_source.html +1 -1
  181. package/SVF-doxygen/html/RelExeState_8h_source.html +1 -1
  182. package/SVF-doxygen/html/RelationSolver_8cpp_source.html +1 -1
  183. package/SVF-doxygen/html/RelationSolver_8h_source.html +1 -1
  184. package/SVF-doxygen/html/SCC_8h_source.html +1 -1
  185. package/SVF-doxygen/html/SVFBugReport_8cpp_source.html +2 -2
  186. package/SVF-doxygen/html/SVFBugReport_8h_source.html +2 -2
  187. package/SVF-doxygen/html/SVFFileSystem_8cpp.html +1 -1
  188. package/SVF-doxygen/html/SVFFileSystem_8cpp_source.html +1 -1
  189. package/SVF-doxygen/html/SVFFileSystem_8h_source.html +1 -1
  190. package/SVF-doxygen/html/SVFGBuilder_8cpp_source.html +1 -1
  191. package/SVF-doxygen/html/SVFGBuilder_8h_source.html +1 -1
  192. package/SVF-doxygen/html/SVFGEdge_8h_source.html +1 -1
  193. package/SVF-doxygen/html/SVFGNode_8h_source.html +1 -1
  194. package/SVF-doxygen/html/SVFGOPT_8cpp_source.html +1 -1
  195. package/SVF-doxygen/html/SVFGOPT_8h_source.html +1 -1
  196. package/SVF-doxygen/html/SVFGReadWrite_8cpp_source.html +1 -1
  197. package/SVF-doxygen/html/SVFGStat_8cpp_source.html +1 -1
  198. package/SVF-doxygen/html/SVFGStat_8h_source.html +1 -1
  199. package/SVF-doxygen/html/SVFG_8cpp_source.html +1 -1
  200. package/SVF-doxygen/html/SVFG_8h_source.html +1 -1
  201. package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +1 -1
  202. package/SVF-doxygen/html/SVFIR2ConsExeState_8h_source.html +1 -1
  203. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +1 -1
  204. package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +1 -1
  205. package/SVF-doxygen/html/SVFIR2Relation_8cpp_source.html +1 -1
  206. package/SVF-doxygen/html/SVFIRBuilder_8cpp_source.html +41 -41
  207. package/SVF-doxygen/html/SVFIRBuilder_8h_source.html +47 -47
  208. package/SVF-doxygen/html/SVFIRExtAPI_8cpp_source.html +8 -8
  209. package/SVF-doxygen/html/SVFIR_8cpp_source.html +1 -1
  210. package/SVF-doxygen/html/SVFIR_8h_source.html +1 -1
  211. package/SVF-doxygen/html/SVFLoop_8h_source.html +1 -1
  212. package/SVF-doxygen/html/SVFModule_8cpp_source.html +1 -1
  213. package/SVF-doxygen/html/SVFModule_8h_source.html +1 -1
  214. package/SVF-doxygen/html/SVFStat_8cpp_source.html +1 -1
  215. package/SVF-doxygen/html/SVFStat_8h_source.html +1 -1
  216. package/SVF-doxygen/html/SVFStatements_8cpp_source.html +1 -1
  217. package/SVF-doxygen/html/SVFStatements_8h_source.html +1 -1
  218. package/SVF-doxygen/html/SVFType_8cpp_source.html +1 -1
  219. package/SVF-doxygen/html/SVFType_8h_source.html +1 -1
  220. package/SVF-doxygen/html/SVFUtil_8cpp_source.html +1 -1
  221. package/SVF-doxygen/html/SVFUtil_8h_source.html +1 -1
  222. package/SVF-doxygen/html/SVFValue_8cpp_source.html +1 -1
  223. package/SVF-doxygen/html/SVFValue_8h_source.html +1 -1
  224. package/SVF-doxygen/html/SVFVariables_8cpp_source.html +1 -1
  225. package/SVF-doxygen/html/SVFVariables_8h_source.html +1 -1
  226. package/SVF-doxygen/html/SaberCheckerAPI_8cpp_source.html +1 -1
  227. package/SVF-doxygen/html/SaberCheckerAPI_8h_source.html +1 -1
  228. package/SVF-doxygen/html/SaberCondAllocator_8cpp_source.html +1 -1
  229. package/SVF-doxygen/html/SaberCondAllocator_8h_source.html +1 -1
  230. package/SVF-doxygen/html/SaberSVFGBuilder_8cpp_source.html +1 -1
  231. package/SVF-doxygen/html/SaberSVFGBuilder_8h_source.html +1 -1
  232. package/SVF-doxygen/html/SingleAbsValue_8h_source.html +1 -1
  233. package/SVF-doxygen/html/SparseBitVector_8h_source.html +2 -2
  234. package/SVF-doxygen/html/SrcSnkDDA_8cpp_source.html +1 -1
  235. package/SVF-doxygen/html/SrcSnkDDA_8h_source.html +1 -1
  236. package/SVF-doxygen/html/SrcSnkSolver_8h_source.html +1 -1
  237. package/SVF-doxygen/html/Steensgaard_8cpp_source.html +1 -1
  238. package/SVF-doxygen/html/Steensgaard_8h_source.html +1 -1
  239. package/SVF-doxygen/html/SymState_8cpp_source.html +1 -1
  240. package/SVF-doxygen/html/SymState_8h_source.html +1 -1
  241. package/SVF-doxygen/html/SymbolTableBuilder_8cpp_source.html +34 -34
  242. package/SVF-doxygen/html/SymbolTableBuilder_8h_source.html +7 -7
  243. package/SVF-doxygen/html/SymbolTableInfo_8cpp_source.html +1 -1
  244. package/SVF-doxygen/html/SymbolTableInfo_8h_source.html +1 -1
  245. package/SVF-doxygen/html/TCT_8cpp_source.html +1 -1
  246. package/SVF-doxygen/html/TCT_8h_source.html +1 -1
  247. package/SVF-doxygen/html/ThreadAPI_8cpp_source.html +1 -1
  248. package/SVF-doxygen/html/ThreadAPI_8h_source.html +1 -1
  249. package/SVF-doxygen/html/ThreadCallGraph_8cpp_source.html +1 -1
  250. package/SVF-doxygen/html/ThreadCallGraph_8h_source.html +1 -1
  251. package/SVF-doxygen/html/TypeAnalysis_8cpp_source.html +1 -1
  252. package/SVF-doxygen/html/TypeAnalysis_8h_source.html +1 -1
  253. package/SVF-doxygen/html/VFGEdge_8h_source.html +1 -1
  254. package/SVF-doxygen/html/VFGNode_8h_source.html +1 -1
  255. package/SVF-doxygen/html/VFG_8cpp_source.html +1 -1
  256. package/SVF-doxygen/html/VFG_8h_source.html +1 -1
  257. package/SVF-doxygen/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
  258. package/SVF-doxygen/html/VersionedFlowSensitive_8cpp_source.html +1 -1
  259. package/SVF-doxygen/html/VersionedFlowSensitive_8h_source.html +1 -1
  260. package/SVF-doxygen/html/WPAFSSolver_8h_source.html +1 -1
  261. package/SVF-doxygen/html/WPAPass_8cpp_source.html +1 -1
  262. package/SVF-doxygen/html/WPAPass_8h_source.html +1 -1
  263. package/SVF-doxygen/html/WPASolver_8h_source.html +1 -1
  264. package/SVF-doxygen/html/WPAStat_8h_source.html +1 -1
  265. package/SVF-doxygen/html/WTO_8h_source.html +1 -1
  266. package/SVF-doxygen/html/WorkList_8h_source.html +1 -1
  267. package/SVF-doxygen/html/Z3Expr_8cpp_source.html +1 -1
  268. package/SVF-doxygen/html/Z3Expr_8h_source.html +1 -1
  269. package/SVF-doxygen/html/ae_8cpp_source.html +1 -1
  270. package/SVF-doxygen/html/cfl_8cpp_source.html +1 -1
  271. package/SVF-doxygen/html/classSVF_1_1Annotator.html +1 -1
  272. package/SVF-doxygen/html/classSVF_1_1BreakConstantGEPs.html +4 -4
  273. package/SVF-doxygen/html/classSVF_1_1CHGBuilder.html +299 -298
  274. package/SVF-doxygen/html/classSVF_1_1DCHGraph.html +20 -20
  275. package/SVF-doxygen/html/classSVF_1_1ICFGBuilder.html +7 -7
  276. package/SVF-doxygen/html/classSVF_1_1LLVMLoopAnalysis.html +6 -6
  277. package/SVF-doxygen/html/classSVF_1_1LLVMModuleSet.html +36 -36
  278. package/SVF-doxygen/html/classSVF_1_1LockResultValidator.html +11 -11
  279. package/SVF-doxygen/html/classSVF_1_1MTAAnnotator.html +5 -5
  280. package/SVF-doxygen/html/classSVF_1_1MTAResultValidator.html +10 -10
  281. package/SVF-doxygen/html/classSVF_1_1MergeFunctionRets.html +2 -2
  282. package/SVF-doxygen/html/classSVF_1_1ObjTypeInference.html +509 -485
  283. package/SVF-doxygen/html/classSVF_1_1RaceResultValidator.html +7 -7
  284. package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +22 -22
  285. package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +35 -35
  286. package/SVF-doxygen/html/classllvm_1_1generic__bridge__gep__type__iterator.html +2 -2
  287. package/SVF-doxygen/html/dda_8cpp_source.html +1 -1
  288. package/SVF-doxygen/html/iterator_8h_source.html +1 -1
  289. package/SVF-doxygen/html/iterator__range_8h_source.html +1 -1
  290. package/SVF-doxygen/html/llvm2svf_8cpp_source.html +1 -1
  291. package/SVF-doxygen/html/mta_8cpp_source.html +1 -1
  292. package/SVF-doxygen/html/namespaceSVF.html +115 -115
  293. package/SVF-doxygen/html/namespaceSVF_1_1LLVMUtil.html +33 -33
  294. package/SVF-doxygen/html/namespaceSVF_1_1cppUtil.html +12 -12
  295. package/SVF-doxygen/html/saber_8cpp_source.html +1 -1
  296. package/SVF-doxygen/html/structSVF_1_1PopulationCounter.html +1 -1
  297. package/SVF-doxygen/html/structSVF_1_1PopulationCounter_3_01T_00_018_01_4.html +1 -1
  298. package/SVF-doxygen/html/svf-ex_8cpp_source.html +1 -1
  299. package/SVF-doxygen/html/svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html +5 -5
  300. package/SVF-doxygen/html/svf_2include_2MTA_2MTAResultValidator_8h_source.html +8 -8
  301. package/SVF-doxygen/html/wpa_8cpp_source.html +1 -1
  302. package/package.json +1 -1
  303. package/svf-llvm/include/SVF-LLVM/BasicTypes.h +1 -0
  304. package/svf-llvm/lib/CHGBuilder.cpp +1 -0
  305. package/svf-llvm/lib/ObjTypeInference.cpp +51 -27
@@ -386,124 +386,124 @@ Private Attributes</h2></td></tr>
386
386
  </dl>
387
387
  <dl class="section return"><dt>Returns</dt><dd></dd></dl>
388
388
 
389
- <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00386">386</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
390
- <div class="fragment"><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;{</div>
391
- <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; </div>
392
- <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="comment">// consult cache</span></div>
393
- <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keyword">auto</span> tIt = <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.find(var);</div>
394
- <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">if</span> (tIt != <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.end())</div>
395
- <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; {</div>
396
- <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">return</span> tIt-&gt;second;</div>
397
- <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; }</div>
398
- <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; </div>
399
- <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="comment">// simulate the call stack, the second element indicates whether we should update sources for current value</span></div>
400
- <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <a class="code" href="classSVF_1_1FILOWorkList.html">FILOWorkList&lt;ValueBoolPair&gt;</a> workList;</div>
401
- <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;ValueBoolPair&gt;</a> visited;</div>
402
- <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; workList.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>({var, <span class="keyword">false</span>});</div>
403
- <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">while</span> (!workList.<a class="code" href="classSVF_1_1FILOWorkList.html#a071a624c91def82a4bbbf3806c7b7eea">empty</a>())</div>
404
- <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; {</div>
405
- <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keyword">auto</span> curPair = workList.<a class="code" href="classSVF_1_1FILOWorkList.html#a3fd9acb6d09fd142bfd402fdf8cac93b">pop</a>();</div>
406
- <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">if</span> (visited.count(curPair)) <span class="keywordflow">continue</span>;</div>
407
- <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; visited.insert(curPair);</div>
408
- <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *curValue = curPair.first;</div>
409
- <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordtype">bool</span> canUpdate = curPair.second;</div>
410
- <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; </div>
411
- <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Value *&gt;</a> sources;</div>
412
- <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keyword">auto</span> insertAllocs = [&amp;sources, &amp;canUpdate](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *source)</div>
413
- <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; {</div>
414
- <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">if</span> (canUpdate) sources.insert(source);</div>
415
- <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; };</div>
416
- <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keyword">auto</span> insertAllocsOrPushWorklist = [<span class="keyword">this</span>, &amp;sources, &amp;workList, &amp;canUpdate](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;pUser)</div>
417
- <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div>
418
- <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keyword">auto</span> vIt = <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.find(pUser);</div>
419
- <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">if</span> (canUpdate)</div>
420
- <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; {</div>
421
- <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">if</span> (vIt != <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.end())</div>
422
- <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; {</div>
423
- <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; sources.insert(vIt-&gt;second.begin(), vIt-&gt;second.end());</div>
424
- <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div>
425
- <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; }</div>
426
- <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">else</span></div>
427
- <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; {</div>
428
- <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">if</span> (vIt == <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.end()) workList.push({pUser, <span class="keyword">false</span>});</div>
429
- <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; }</div>
430
- <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; };</div>
431
- <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; </div>
432
- <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">if</span> (!canUpdate &amp;&amp; !<a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.count(curValue))</div>
433
- <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; {</div>
434
- <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; workList.push({curValue, <span class="keyword">true</span>});</div>
435
- <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; }</div>
436
- <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; </div>
437
- <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ObjTypeInference.html#a62020ece25ac660f1adb41bd0cf40be7">isAlloc</a>(curValue))</div>
438
- <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; {</div>
439
- <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; insertAllocs(curValue);</div>
440
- <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div>
441
- <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitCastInst = SVFUtil::dyn_cast&lt;BitCastInst&gt;(curValue))</div>
442
- <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; {</div>
443
- <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *prevVal = bitCastInst-&gt;getOperand(0);</div>
444
- <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; insertAllocsOrPushWorklist(prevVal);</div>
445
- <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; }</div>
446
- <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *phiNode = SVFUtil::dyn_cast&lt;PHINode&gt;(curValue))</div>
447
- <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; {</div>
448
- <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> i = 0; i &lt; phiNode-&gt;getNumOperands(); ++i)</div>
449
- <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; {</div>
450
- <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; insertAllocsOrPushWorklist(phiNode-&gt;getOperand(i));</div>
451
- <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; }</div>
452
- <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; }</div>
453
- <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *loadInst = SVFUtil::dyn_cast&lt;LoadInst&gt;(curValue))</div>
454
- <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; {</div>
455
- <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;use: loadInst-&gt;getPointerOperand()-&gt;uses())</div>
456
- <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; {</div>
457
- <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> *storeInst = SVFUtil::dyn_cast&lt;StoreInst&gt;(use.getUser()))</div>
458
- <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; {</div>
459
- <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">if</span> (storeInst-&gt;getPointerOperand() == loadInst-&gt;getPointerOperand())</div>
460
- <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; {</div>
461
- <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; insertAllocsOrPushWorklist(storeInst-&gt;getValueOperand());</div>
462
- <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; }</div>
463
- <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; }</div>
464
- <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; }</div>
465
- <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div>
466
- <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *argument = SVFUtil::dyn_cast&lt;Argument&gt;(curValue))</div>
467
- <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; {</div>
468
- <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;use: argument-&gt;getParent()-&gt;uses())</div>
469
- <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; {</div>
470
- <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *callBase = SVFUtil::dyn_cast&lt;CallBase&gt;(use.getUser()))</div>
471
- <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; {</div>
472
- <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="comment">// skip function as parameter</span></div>
473
- <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="comment">// e.g., call void @foo(%struct.ssl_ctx_st* %9, i32 (i8*, i32, i32, i8*)* @passwd_callback)</span></div>
474
- <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">if</span> (callBase-&gt;getCalledFunction() != argument-&gt;getParent()) <span class="keywordflow">continue</span>;</div>
475
- <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> pos = argument-&gt;getParent()-&gt;isVarArg() ? 0 : argument-&gt;getArgNo();</div>
476
- <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; insertAllocsOrPushWorklist(callBase-&gt;getArgOperand(pos));</div>
477
- <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; }</div>
478
- <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; }</div>
479
- <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; }</div>
480
- <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast&lt;CallBase&gt;(curValue))</div>
481
- <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; {</div>
482
- <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(!callBase-&gt;doesNotReturn(), <span class="stringliteral">&quot;callbase does not return:&quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(callBase));</div>
483
- <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *callee = callBase-&gt;getCalledFunction())</div>
484
- <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; {</div>
485
- <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">if</span> (!callee-&gt;isDeclaration())</div>
486
- <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; {</div>
487
- <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *svfFunc = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(callee);</div>
488
- <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *pValue = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#aaf9b679407f12b93afc53c157d37b444">getLLVMValue</a>(svfFunc-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4c28c8d205d354f3a982119f29f2aac">getExitBB</a>()-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#ad05f85ce931d4479f71d1947a25599dc">back</a>());</div>
489
- <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *retInst = SVFUtil::dyn_cast&lt;ReturnInst&gt;(pValue);</div>
490
- <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(retInst &amp;&amp; retInst-&gt;getReturnValue(), <span class="stringliteral">&quot;not return inst?&quot;</span>);</div>
491
- <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; insertAllocsOrPushWorklist(retInst-&gt;getReturnValue());</div>
492
- <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; }</div>
493
- <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div>
494
- <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</div>
495
- <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">if</span> (canUpdate)</div>
496
- <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; {</div>
497
- <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>[curValue] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVFUtil::move</a>(sources);</div>
498
- <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; }</div>
499
- <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; }</div>
500
- <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Value *&gt;</a> &amp;srcs = <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>[var];</div>
501
- <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordflow">if</span> (srcs.empty())</div>
502
- <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; {</div>
503
- <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#ac48ef12f2a6f605d6fa5d31e7623a826">WARN_MSG</a>(<span class="stringliteral">&quot;Cannot find allocation: &quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(var));</div>
504
- <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; }</div>
505
- <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">return</span> srcs;</div>
506
- <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;}</div>
389
+ <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00410">410</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
390
+ <div class="fragment"><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;{</div>
391
+ <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; </div>
392
+ <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="comment">// consult cache</span></div>
393
+ <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keyword">auto</span> tIt = <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.find(var);</div>
394
+ <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">if</span> (tIt != <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.end())</div>
395
+ <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; {</div>
396
+ <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordflow">return</span> tIt-&gt;second;</div>
397
+ <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; }</div>
398
+ <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; </div>
399
+ <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="comment">// simulate the call stack, the second element indicates whether we should update sources for current value</span></div>
400
+ <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <a class="code" href="classSVF_1_1FILOWorkList.html">FILOWorkList&lt;ValueBoolPair&gt;</a> workList;</div>
401
+ <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;ValueBoolPair&gt;</a> visited;</div>
402
+ <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; workList.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>({var, <span class="keyword">false</span>});</div>
403
+ <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">while</span> (!workList.<a class="code" href="classSVF_1_1FILOWorkList.html#a071a624c91def82a4bbbf3806c7b7eea">empty</a>())</div>
404
+ <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; {</div>
405
+ <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keyword">auto</span> curPair = workList.<a class="code" href="classSVF_1_1FILOWorkList.html#a3fd9acb6d09fd142bfd402fdf8cac93b">pop</a>();</div>
406
+ <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">if</span> (visited.count(curPair)) <span class="keywordflow">continue</span>;</div>
407
+ <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; visited.insert(curPair);</div>
408
+ <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *curValue = curPair.first;</div>
409
+ <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordtype">bool</span> canUpdate = curPair.second;</div>
410
+ <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; </div>
411
+ <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Value *&gt;</a> sources;</div>
412
+ <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keyword">auto</span> insertAllocs = [&amp;sources, &amp;canUpdate](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *source)</div>
413
+ <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; {</div>
414
+ <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordflow">if</span> (canUpdate) sources.insert(source);</div>
415
+ <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; };</div>
416
+ <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keyword">auto</span> insertAllocsOrPushWorklist = [<span class="keyword">this</span>, &amp;sources, &amp;workList, &amp;canUpdate](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;pUser)</div>
417
+ <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; {</div>
418
+ <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keyword">auto</span> vIt = <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.find(pUser);</div>
419
+ <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">if</span> (canUpdate)</div>
420
+ <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div>
421
+ <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">if</span> (vIt != <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.end())</div>
422
+ <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; {</div>
423
+ <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; sources.insert(vIt-&gt;second.begin(), vIt-&gt;second.end());</div>
424
+ <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div>
425
+ <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; }</div>
426
+ <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">else</span></div>
427
+ <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; {</div>
428
+ <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">if</span> (vIt == <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.end()) workList.push({pUser, <span class="keyword">false</span>});</div>
429
+ <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div>
430
+ <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; };</div>
431
+ <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; </div>
432
+ <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">if</span> (!canUpdate &amp;&amp; !<a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.count(curValue))</div>
433
+ <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; {</div>
434
+ <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; workList.push({curValue, <span class="keyword">true</span>});</div>
435
+ <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; }</div>
436
+ <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; </div>
437
+ <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ObjTypeInference.html#a62020ece25ac660f1adb41bd0cf40be7">isAlloc</a>(curValue))</div>
438
+ <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; {</div>
439
+ <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; insertAllocs(curValue);</div>
440
+ <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; }</div>
441
+ <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitCastInst = SVFUtil::dyn_cast&lt;BitCastInst&gt;(curValue))</div>
442
+ <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; {</div>
443
+ <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *prevVal = bitCastInst-&gt;getOperand(0);</div>
444
+ <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; insertAllocsOrPushWorklist(prevVal);</div>
445
+ <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; }</div>
446
+ <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *phiNode = SVFUtil::dyn_cast&lt;PHINode&gt;(curValue))</div>
447
+ <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; {</div>
448
+ <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> i = 0; i &lt; phiNode-&gt;getNumOperands(); ++i)</div>
449
+ <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; {</div>
450
+ <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; insertAllocsOrPushWorklist(phiNode-&gt;getOperand(i));</div>
451
+ <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; }</div>
452
+ <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; }</div>
453
+ <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *loadInst = SVFUtil::dyn_cast&lt;LoadInst&gt;(curValue))</div>
454
+ <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; {</div>
455
+ <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;use: loadInst-&gt;getPointerOperand()-&gt;users())</div>
456
+ <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; {</div>
457
+ <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> *storeInst = SVFUtil::dyn_cast&lt;StoreInst&gt;(use))</div>
458
+ <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; {</div>
459
+ <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">if</span> (storeInst-&gt;getPointerOperand() == loadInst-&gt;getPointerOperand())</div>
460
+ <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; {</div>
461
+ <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; insertAllocsOrPushWorklist(storeInst-&gt;getValueOperand());</div>
462
+ <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; }</div>
463
+ <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; }</div>
464
+ <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; }</div>
465
+ <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div>
466
+ <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *argument = SVFUtil::dyn_cast&lt;Argument&gt;(curValue))</div>
467
+ <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; {</div>
468
+ <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;use: argument-&gt;getParent()-&gt;users())</div>
469
+ <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; {</div>
470
+ <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *callBase = SVFUtil::dyn_cast&lt;CallBase&gt;(use))</div>
471
+ <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; {</div>
472
+ <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="comment">// skip function as parameter</span></div>
473
+ <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="comment">// e.g., call void @foo(%struct.ssl_ctx_st* %9, i32 (i8*, i32, i32, i8*)* @passwd_callback)</span></div>
474
+ <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">if</span> (callBase-&gt;getCalledFunction() != argument-&gt;getParent()) <span class="keywordflow">continue</span>;</div>
475
+ <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> pos = argument-&gt;getParent()-&gt;isVarArg() ? 0 : argument-&gt;getArgNo();</div>
476
+ <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; insertAllocsOrPushWorklist(callBase-&gt;getArgOperand(pos));</div>
477
+ <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; }</div>
478
+ <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; }</div>
479
+ <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; }</div>
480
+ <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast&lt;CallBase&gt;(curValue))</div>
481
+ <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; {</div>
482
+ <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(!callBase-&gt;doesNotReturn(), <span class="stringliteral">&quot;callbase does not return:&quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(callBase));</div>
483
+ <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *callee = callBase-&gt;getCalledFunction())</div>
484
+ <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; {</div>
485
+ <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">if</span> (!callee-&gt;isDeclaration())</div>
486
+ <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; {</div>
487
+ <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *svfFunc = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(callee);</div>
488
+ <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *pValue = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#aaf9b679407f12b93afc53c157d37b444">getLLVMValue</a>(svfFunc-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4c28c8d205d354f3a982119f29f2aac">getExitBB</a>()-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#ad05f85ce931d4479f71d1947a25599dc">back</a>());</div>
489
+ <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *retInst = SVFUtil::dyn_cast&lt;ReturnInst&gt;(pValue);</div>
490
+ <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(retInst &amp;&amp; retInst-&gt;getReturnValue(), <span class="stringliteral">&quot;not return inst?&quot;</span>);</div>
491
+ <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; insertAllocsOrPushWorklist(retInst-&gt;getReturnValue());</div>
492
+ <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; }</div>
493
+ <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; }</div>
494
+ <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; }</div>
495
+ <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">if</span> (canUpdate)</div>
496
+ <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; {</div>
497
+ <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>[curValue] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVFUtil::move</a>(sources);</div>
498
+ <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div>
499
+ <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; }</div>
500
+ <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Value *&gt;</a> &amp;srcs = <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>[var];</div>
501
+ <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">if</span> (srcs.empty())</div>
502
+ <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; {</div>
503
+ <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#ac48ef12f2a6f605d6fa5d31e7623a826">WARN_MSG</a>(<span class="stringliteral">&quot;Cannot find allocation: &quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(var));</div>
504
+ <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; }</div>
505
+ <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">return</span> srcs;</div>
506
+ <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;}</div>
507
507
  </div><!-- fragment -->
508
508
  </div>
509
509
  </div>
@@ -539,138 +539,138 @@ Private Attributes</h2></td></tr>
539
539
  </dl>
540
540
  <dl class="section return"><dt>Returns</dt><dd></dd></dl>
541
541
 
542
- <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00676">676</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
543
- <div class="fragment"><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160;{</div>
544
- <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; </div>
545
- <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="comment">// consult cache</span></div>
546
- <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keyword">auto</span> tIt = <a class="code" href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">_valueToAllocOrClsNameSources</a>.find(startValue);</div>
547
- <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">if</span> (tIt != <a class="code" href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">_valueToAllocOrClsNameSources</a>.end())</div>
548
- <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; {</div>
549
- <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">return</span> tIt-&gt;second;</div>
550
- <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div>
551
- <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; </div>
552
- <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="comment">// simulate the call stack, the second element indicates whether we should update sources for current value</span></div>
553
- <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <a class="code" href="classSVF_1_1FILOWorkList.html">FILOWorkList&lt;ValueBoolPair&gt;</a> workList;</div>
554
- <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;ValueBoolPair&gt;</a> visited;</div>
555
- <div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; workList.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>({startValue, <span class="keyword">false</span>});</div>
556
- <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keywordflow">while</span> (!workList.<a class="code" href="classSVF_1_1FILOWorkList.html#a071a624c91def82a4bbbf3806c7b7eea">empty</a>())</div>
557
- <div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; {</div>
558
- <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keyword">auto</span> curPair = workList.<a class="code" href="classSVF_1_1FILOWorkList.html#a3fd9acb6d09fd142bfd402fdf8cac93b">pop</a>();</div>
559
- <div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordflow">if</span> (visited.count(curPair)) <span class="keywordflow">continue</span>;</div>
560
- <div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; visited.insert(curPair);</div>
561
- <div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *curValue = curPair.first;</div>
562
- <div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordtype">bool</span> canUpdate = curPair.second;</div>
563
- <div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; </div>
564
- <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Value *&gt;</a> sources;</div>
565
- <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keyword">auto</span> insertSource = [&amp;sources, &amp;canUpdate](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *source)</div>
566
- <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; {</div>
567
- <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">if</span> (canUpdate) sources.insert(source);</div>
568
- <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; };</div>
569
- <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keyword">auto</span> insertSourcesOrPushWorklist = [<span class="keyword">this</span>, &amp;sources, &amp;workList, &amp;canUpdate](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;pUser)</div>
570
- <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; {</div>
571
- <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keyword">auto</span> vIt = <a class="code" href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">_valueToAllocOrClsNameSources</a>.find(pUser);</div>
572
- <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">if</span> (canUpdate)</div>
573
- <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; {</div>
574
- <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">if</span> (vIt != <a class="code" href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">_valueToAllocOrClsNameSources</a>.end() &amp;&amp; !vIt-&gt;second.empty())</div>
575
- <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; {</div>
576
- <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; sources.insert(vIt-&gt;second.begin(), vIt-&gt;second.end());</div>
577
- <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div>
578
- <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; }</div>
579
- <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keywordflow">else</span></div>
580
- <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; {</div>
581
- <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keywordflow">if</span> (vIt == <a class="code" href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">_valueToAllocOrClsNameSources</a>.end()) workList.push({pUser, <span class="keyword">false</span>});</div>
582
- <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; }</div>
583
- <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; };</div>
584
- <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; </div>
585
- <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keywordflow">if</span> (!canUpdate &amp;&amp; !<a class="code" href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">_valueToAllocOrClsNameSources</a>.count(curValue))</div>
586
- <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; {</div>
587
- <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; workList.push({curValue, <span class="keyword">true</span>});</div>
588
- <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; }</div>
589
- <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; </div>
590
- <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="comment">// If current value is an instruction inside a constructor/destructor/template, use it as a source</span></div>
591
- <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *inst = SVFUtil::dyn_cast&lt;Instruction&gt;(curValue))</div>
592
- <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; {</div>
593
- <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *parent = inst-&gt;getFunction())</div>
594
- <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; {</div>
595
- <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(parent)) insertSource(parent);</div>
596
- <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; }</div>
597
- <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; }</div>
598
- <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; </div>
599
- <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="comment">// If the current value is an object (global, heap, stack, etc) or name source (constructor/destructor,</span></div>
600
- <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="comment">// a C++ dynamic cast, or a template function), use it as a source</span></div>
601
- <div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ObjTypeInference.html#a62020ece25ac660f1adb41bd0cf40be7">isAlloc</a>(curValue) || <a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(curValue))</div>
602
- <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; {</div>
603
- <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; insertSource(curValue);</div>
604
- <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; }</div>
605
- <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; </div>
606
- <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="comment">// Explore the current value further depending on the type of the value; use cached values if possible</span></div>
607
- <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *getElementPtrInst = SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(curValue))</div>
608
- <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; {</div>
609
- <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; insertSourcesOrPushWorklist(getElementPtrInst-&gt;getPointerOperand());</div>
610
- <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; }</div>
611
- <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitCastInst = SVFUtil::dyn_cast&lt;BitCastInst&gt;(curValue))</div>
612
- <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; {</div>
613
- <div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; insertSourcesOrPushWorklist(bitCastInst-&gt;getOperand(0));</div>
614
- <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; }</div>
615
- <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *phiNode = SVFUtil::dyn_cast&lt;PHINode&gt;(curValue))</div>
542
+ <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00700">700</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
543
+ <div class="fragment"><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160;{</div>
544
+ <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; </div>
545
+ <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="comment">// consult cache</span></div>
546
+ <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keyword">auto</span> tIt = <a class="code" href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">_valueToAllocOrClsNameSources</a>.find(startValue);</div>
547
+ <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">if</span> (tIt != <a class="code" href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">_valueToAllocOrClsNameSources</a>.end())</div>
548
+ <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; {</div>
549
+ <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">return</span> tIt-&gt;second;</div>
550
+ <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; }</div>
551
+ <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; </div>
552
+ <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="comment">// simulate the call stack, the second element indicates whether we should update sources for current value</span></div>
553
+ <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <a class="code" href="classSVF_1_1FILOWorkList.html">FILOWorkList&lt;ValueBoolPair&gt;</a> workList;</div>
554
+ <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;ValueBoolPair&gt;</a> visited;</div>
555
+ <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; workList.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>({startValue, <span class="keyword">false</span>});</div>
556
+ <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keywordflow">while</span> (!workList.<a class="code" href="classSVF_1_1FILOWorkList.html#a071a624c91def82a4bbbf3806c7b7eea">empty</a>())</div>
557
+ <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; {</div>
558
+ <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="keyword">auto</span> curPair = workList.<a class="code" href="classSVF_1_1FILOWorkList.html#a3fd9acb6d09fd142bfd402fdf8cac93b">pop</a>();</div>
559
+ <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="keywordflow">if</span> (visited.count(curPair)) <span class="keywordflow">continue</span>;</div>
560
+ <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; visited.insert(curPair);</div>
561
+ <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *curValue = curPair.first;</div>
562
+ <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keywordtype">bool</span> canUpdate = curPair.second;</div>
563
+ <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; </div>
564
+ <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Value *&gt;</a> sources;</div>
565
+ <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keyword">auto</span> insertSource = [&amp;sources, &amp;canUpdate](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *source)</div>
566
+ <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; {</div>
567
+ <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">if</span> (canUpdate) sources.insert(source);</div>
568
+ <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; };</div>
569
+ <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keyword">auto</span> insertSourcesOrPushWorklist = [<span class="keyword">this</span>, &amp;sources, &amp;workList, &amp;canUpdate](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;pUser)</div>
570
+ <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; {</div>
571
+ <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keyword">auto</span> vIt = <a class="code" href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">_valueToAllocOrClsNameSources</a>.find(pUser);</div>
572
+ <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">if</span> (canUpdate)</div>
573
+ <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; {</div>
574
+ <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordflow">if</span> (vIt != <a class="code" href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">_valueToAllocOrClsNameSources</a>.end() &amp;&amp; !vIt-&gt;second.empty())</div>
575
+ <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; {</div>
576
+ <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; sources.insert(vIt-&gt;second.begin(), vIt-&gt;second.end());</div>
577
+ <div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; }</div>
578
+ <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; }</div>
579
+ <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">else</span></div>
580
+ <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; {</div>
581
+ <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">if</span> (vIt == <a class="code" href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">_valueToAllocOrClsNameSources</a>.end()) workList.push({pUser, <span class="keyword">false</span>});</div>
582
+ <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; }</div>
583
+ <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; };</div>
584
+ <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; </div>
585
+ <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">if</span> (!canUpdate &amp;&amp; !<a class="code" href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">_valueToAllocOrClsNameSources</a>.count(curValue))</div>
586
+ <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; {</div>
587
+ <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; workList.push({curValue, <span class="keyword">true</span>});</div>
588
+ <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; }</div>
589
+ <div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; </div>
590
+ <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="comment">// If current value is an instruction inside a constructor/destructor/template, use it as a source</span></div>
591
+ <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *inst = SVFUtil::dyn_cast&lt;Instruction&gt;(curValue))</div>
616
592
  <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; {</div>
617
- <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *op : phiNode-&gt;operand_values())</div>
593
+ <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *parent = inst-&gt;getFunction())</div>
618
594
  <div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; {</div>
619
- <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; insertSourcesOrPushWorklist(op);</div>
595
+ <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(parent)) insertSource(parent);</div>
620
596
  <div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; }</div>
621
597
  <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; }</div>
622
- <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *loadInst = SVFUtil::dyn_cast&lt;LoadInst&gt;(curValue))</div>
623
- <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; {</div>
624
- <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *user : loadInst-&gt;getPointerOperand()-&gt;users())</div>
625
- <div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; {</div>
626
- <div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *storeInst = SVFUtil::dyn_cast&lt;StoreInst&gt;(user))</div>
627
- <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; {</div>
628
- <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="keywordflow">if</span> (storeInst-&gt;getPointerOperand() == loadInst-&gt;getPointerOperand())</div>
629
- <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; {</div>
630
- <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; insertSourcesOrPushWorklist(storeInst-&gt;getValueOperand());</div>
631
- <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; }</div>
632
- <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; }</div>
633
- <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; }</div>
598
+ <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; </div>
599
+ <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="comment">// If the current value is an object (global, heap, stack, etc) or name source (constructor/destructor,</span></div>
600
+ <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="comment">// a C++ dynamic cast, or a template function), use it as a source</span></div>
601
+ <div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ObjTypeInference.html#a62020ece25ac660f1adb41bd0cf40be7">isAlloc</a>(curValue) || <a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(curValue))</div>
602
+ <div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; {</div>
603
+ <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; insertSource(curValue);</div>
604
+ <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; }</div>
605
+ <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; </div>
606
+ <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <span class="comment">// Explore the current value further depending on the type of the value; use cached values if possible</span></div>
607
+ <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *getElementPtrInst = SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(curValue))</div>
608
+ <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; {</div>
609
+ <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; insertSourcesOrPushWorklist(getElementPtrInst-&gt;getPointerOperand());</div>
634
610
  <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; }</div>
635
- <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *argument = SVFUtil::dyn_cast&lt;Argument&gt;(curValue))</div>
611
+ <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitCastInst = SVFUtil::dyn_cast&lt;BitCastInst&gt;(curValue))</div>
636
612
  <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; {</div>
637
- <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *user: argument-&gt;getParent()-&gt;users())</div>
638
- <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; {</div>
639
- <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast&lt;CallBase&gt;(user))</div>
640
- <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; {</div>
641
- <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="comment">// skip function as parameter</span></div>
642
- <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="comment">// e.g., call void @foo(%struct.ssl_ctx_st* %9, i32 (i8*, i32, i32, i8*)* @passwd_callback)</span></div>
643
- <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <span class="keywordflow">if</span> (callBase-&gt;getCalledFunction() != argument-&gt;getParent()) <span class="keywordflow">continue</span>;</div>
644
- <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> pos = argument-&gt;getParent()-&gt;isVarArg() ? 0 : argument-&gt;getArgNo();</div>
645
- <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; insertSourcesOrPushWorklist(callBase-&gt;getArgOperand(pos));</div>
646
- <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; }</div>
647
- <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; }</div>
648
- <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; }</div>
649
- <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast&lt;CallBase&gt;(curValue))</div>
650
- <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; {</div>
651
- <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(!callBase-&gt;doesNotReturn(), <span class="stringliteral">&quot;callbase does not return:&quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(callBase));</div>
652
- <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callee = callBase-&gt;getCalledFunction())</div>
653
- <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; {</div>
654
- <div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keywordflow">if</span> (!callee-&gt;isDeclaration())</div>
655
- <div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; {</div>
656
- <div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *svfFunc = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(callee);</div>
657
- <div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *pValue = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#aaf9b679407f12b93afc53c157d37b444">getLLVMValue</a>(svfFunc-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4c28c8d205d354f3a982119f29f2aac">getExitBB</a>()-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#ad05f85ce931d4479f71d1947a25599dc">back</a>());</div>
658
- <div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *retInst = SVFUtil::dyn_cast&lt;ReturnInst&gt;(pValue);</div>
659
- <div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(retInst &amp;&amp; retInst-&gt;getReturnValue(), <span class="stringliteral">&quot;not return inst?&quot;</span>);</div>
660
- <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; insertSourcesOrPushWorklist(retInst-&gt;getReturnValue());</div>
661
- <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; }</div>
662
- <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; }</div>
663
- <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; }</div>
664
- <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; </div>
665
- <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="comment">// If updating is allowed; store the gathered sources as sources for the current value in the cache</span></div>
666
- <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="keywordflow">if</span> (canUpdate)</div>
667
- <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; {</div>
668
- <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <a class="code" href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">_valueToAllocOrClsNameSources</a>[curValue] = sources;</div>
669
- <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; }</div>
670
- <div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; }</div>
671
- <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; </div>
672
- <div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">_valueToAllocOrClsNameSources</a>[startValue];</div>
673
- <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160;}</div>
613
+ <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; insertSourcesOrPushWorklist(bitCastInst-&gt;getOperand(0));</div>
614
+ <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; }</div>
615
+ <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *phiNode = SVFUtil::dyn_cast&lt;PHINode&gt;(curValue))</div>
616
+ <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; {</div>
617
+ <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *op : phiNode-&gt;operand_values())</div>
618
+ <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; {</div>
619
+ <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; insertSourcesOrPushWorklist(op);</div>
620
+ <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; }</div>
621
+ <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; }</div>
622
+ <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *loadInst = SVFUtil::dyn_cast&lt;LoadInst&gt;(curValue))</div>
623
+ <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; {</div>
624
+ <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *user : loadInst-&gt;getPointerOperand()-&gt;users())</div>
625
+ <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; {</div>
626
+ <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *storeInst = SVFUtil::dyn_cast&lt;StoreInst&gt;(user))</div>
627
+ <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; {</div>
628
+ <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <span class="keywordflow">if</span> (storeInst-&gt;getPointerOperand() == loadInst-&gt;getPointerOperand())</div>
629
+ <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; {</div>
630
+ <div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; insertSourcesOrPushWorklist(storeInst-&gt;getValueOperand());</div>
631
+ <div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; }</div>
632
+ <div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; }</div>
633
+ <div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; }</div>
634
+ <div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; }</div>
635
+ <div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *argument = SVFUtil::dyn_cast&lt;Argument&gt;(curValue))</div>
636
+ <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; {</div>
637
+ <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *user: argument-&gt;getParent()-&gt;users())</div>
638
+ <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; {</div>
639
+ <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast&lt;CallBase&gt;(user))</div>
640
+ <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; {</div>
641
+ <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="comment">// skip function as parameter</span></div>
642
+ <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="comment">// e.g., call void @foo(%struct.ssl_ctx_st* %9, i32 (i8*, i32, i32, i8*)* @passwd_callback)</span></div>
643
+ <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="keywordflow">if</span> (callBase-&gt;getCalledFunction() != argument-&gt;getParent()) <span class="keywordflow">continue</span>;</div>
644
+ <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> pos = argument-&gt;getParent()-&gt;isVarArg() ? 0 : argument-&gt;getArgNo();</div>
645
+ <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; insertSourcesOrPushWorklist(callBase-&gt;getArgOperand(pos));</div>
646
+ <div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; }</div>
647
+ <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; }</div>
648
+ <div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; }</div>
649
+ <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast&lt;CallBase&gt;(curValue))</div>
650
+ <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; {</div>
651
+ <div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(!callBase-&gt;doesNotReturn(), <span class="stringliteral">&quot;callbase does not return:&quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(callBase));</div>
652
+ <div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callee = callBase-&gt;getCalledFunction())</div>
653
+ <div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; {</div>
654
+ <div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keywordflow">if</span> (!callee-&gt;isDeclaration())</div>
655
+ <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; {</div>
656
+ <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *svfFunc = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(callee);</div>
657
+ <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *pValue = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#aaf9b679407f12b93afc53c157d37b444">getLLVMValue</a>(svfFunc-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4c28c8d205d354f3a982119f29f2aac">getExitBB</a>()-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#ad05f85ce931d4479f71d1947a25599dc">back</a>());</div>
658
+ <div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *retInst = SVFUtil::dyn_cast&lt;ReturnInst&gt;(pValue);</div>
659
+ <div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(retInst &amp;&amp; retInst-&gt;getReturnValue(), <span class="stringliteral">&quot;not return inst?&quot;</span>);</div>
660
+ <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; insertSourcesOrPushWorklist(retInst-&gt;getReturnValue());</div>
661
+ <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; }</div>
662
+ <div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; }</div>
663
+ <div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; }</div>
664
+ <div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; </div>
665
+ <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="comment">// If updating is allowed; store the gathered sources as sources for the current value in the cache</span></div>
666
+ <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordflow">if</span> (canUpdate)</div>
667
+ <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; {</div>
668
+ <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <a class="code" href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">_valueToAllocOrClsNameSources</a>[curValue] = sources;</div>
669
+ <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; }</div>
670
+ <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; }</div>
671
+ <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; </div>
672
+ <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">_valueToAllocOrClsNameSources</a>[startValue];</div>
673
+ <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160;}</div>
674
674
  </div><!-- fragment -->
675
675
  </div>
676
676
  </div>
@@ -731,48 +731,48 @@ Private Attributes</h2></td></tr>
731
731
 
732
732
  <p>forward find class name sources starting from an allocation </p>
733
733
 
734
- <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00809">809</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
735
- <div class="fragment"><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;{</div>
736
- <div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; assert(startValue &amp;&amp; <span class="stringliteral">&quot;startValue was null?&quot;</span>);</div>
737
- <div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; </div>
738
- <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="comment">// consult cache</span></div>
739
- <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keyword">auto</span> tIt = <a class="code" href="classSVF_1_1ObjTypeInference.html#af1bd0b800558eb5e3bcc6fae9c86a874">_objToClsNameSources</a>.find(startValue);</div>
740
- <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keywordflow">if</span> (tIt != <a class="code" href="classSVF_1_1ObjTypeInference.html#af1bd0b800558eb5e3bcc6fae9c86a874">_objToClsNameSources</a>.end())</div>
741
- <div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; {</div>
742
- <div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="keywordflow">return</span> tIt-&gt;second;</div>
743
- <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; }</div>
744
- <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; </div>
745
- <div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const CallBase *&gt;</a> sources;</div>
746
- <div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; </div>
747
- <div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="comment">// Lambda for adding a callee to the sources iff it is a constructor/destructor/template/dyncast</span></div>
748
- <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keyword">auto</span> inferViaCppCall = [&amp;sources](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *caller)</div>
749
- <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; {</div>
750
- <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="keywordflow">if</span> (!caller) <span class="keywordflow">return</span>;</div>
751
- <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(caller)) sources.insert(caller);</div>
752
- <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; };</div>
753
- <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; </div>
754
- <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="comment">// Find all calls of starting val (or through cast); add as potential source iff applicable</span></div>
755
- <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *user : startValue-&gt;users())</div>
756
- <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; {</div>
757
- <div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *caller = SVFUtil::dyn_cast&lt;CallBase&gt;(user))</div>
758
- <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; {</div>
759
- <div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; inferViaCppCall(caller);</div>
760
- <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; }</div>
761
- <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitcast = SVFUtil::dyn_cast&lt;BitCastInst&gt;(user))</div>
762
- <div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; {</div>
763
- <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *cast_user : bitcast-&gt;users())</div>
764
- <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; {</div>
765
- <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *caller = SVFUtil::dyn_cast&lt;CallBase&gt;(cast_user))</div>
766
- <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; {</div>
767
- <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; inferViaCppCall(caller);</div>
768
- <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; }</div>
769
- <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; }</div>
770
- <div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; }</div>
771
- <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; }</div>
772
- <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; </div>
773
- <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="comment">// Store sources in cache for starting value &amp; return the found sources</span></div>
774
- <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ObjTypeInference.html#af1bd0b800558eb5e3bcc6fae9c86a874">_objToClsNameSources</a>[startValue] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVFUtil::move</a>(sources);</div>
775
- <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160;}</div>
734
+ <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00833">833</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
735
+ <div class="fragment"><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160;{</div>
736
+ <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; assert(startValue &amp;&amp; <span class="stringliteral">&quot;startValue was null?&quot;</span>);</div>
737
+ <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; </div>
738
+ <div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="comment">// consult cache</span></div>
739
+ <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keyword">auto</span> tIt = <a class="code" href="classSVF_1_1ObjTypeInference.html#af1bd0b800558eb5e3bcc6fae9c86a874">_objToClsNameSources</a>.find(startValue);</div>
740
+ <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="keywordflow">if</span> (tIt != <a class="code" href="classSVF_1_1ObjTypeInference.html#af1bd0b800558eb5e3bcc6fae9c86a874">_objToClsNameSources</a>.end())</div>
741
+ <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; {</div>
742
+ <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="keywordflow">return</span> tIt-&gt;second;</div>
743
+ <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; }</div>
744
+ <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; </div>
745
+ <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const CallBase *&gt;</a> sources;</div>
746
+ <div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; </div>
747
+ <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="comment">// Lambda for adding a callee to the sources iff it is a constructor/destructor/template/dyncast</span></div>
748
+ <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="keyword">auto</span> inferViaCppCall = [&amp;sources](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *caller)</div>
749
+ <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; {</div>
750
+ <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="keywordflow">if</span> (!caller) <span class="keywordflow">return</span>;</div>
751
+ <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(caller)) sources.insert(caller);</div>
752
+ <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; };</div>
753
+ <div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; </div>
754
+ <div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="comment">// Find all calls of starting val (or through cast); add as potential source iff applicable</span></div>
755
+ <div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *user : startValue-&gt;users())</div>
756
+ <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; {</div>
757
+ <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *caller = SVFUtil::dyn_cast&lt;CallBase&gt;(user))</div>
758
+ <div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; {</div>
759
+ <div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; inferViaCppCall(caller);</div>
760
+ <div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; }</div>
761
+ <div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitcast = SVFUtil::dyn_cast&lt;BitCastInst&gt;(user))</div>
762
+ <div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; {</div>
763
+ <div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *cast_user : bitcast-&gt;users())</div>
764
+ <div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; {</div>
765
+ <div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *caller = SVFUtil::dyn_cast&lt;CallBase&gt;(cast_user))</div>
766
+ <div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; {</div>
767
+ <div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; inferViaCppCall(caller);</div>
768
+ <div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; }</div>
769
+ <div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; }</div>
770
+ <div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; }</div>
771
+ <div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; }</div>
772
+ <div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; </div>
773
+ <div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="comment">// Store sources in cache for starting value &amp; return the found sources</span></div>
774
+ <div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ObjTypeInference.html#af1bd0b800558eb5e3bcc6fae9c86a874">_objToClsNameSources</a>[startValue] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVFUtil::move</a>(sources);</div>
775
+ <div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160;}</div>
776
776
  </div><!-- fragment -->
777
777
  </div>
778
778
  </div>
@@ -856,9 +856,9 @@ Private Attributes</h2></td></tr>
856
856
  <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div>
857
857
  <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *gepInst = SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(curValue))</div>
858
858
  <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; insertInferSite(gepInst);</div>
859
- <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;it: curValue-&gt;uses())</div>
859
+ <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;it: curValue-&gt;users())</div>
860
860
  <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div>
861
- <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *loadInst = SVFUtil::dyn_cast&lt;LoadInst&gt;(it.getUser()))</div>
861
+ <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *loadInst = SVFUtil::dyn_cast&lt;LoadInst&gt;(it))</div>
862
862
  <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; {</div>
863
863
  <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="comment">/*</span></div>
864
864
  <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="comment"> * infer based on load, e.g.,</span></div>
@@ -868,7 +868,7 @@ Private Attributes</h2></td></tr>
868
868
  <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="comment"> */</span></div>
869
869
  <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; insertInferSite(loadInst);</div>
870
870
  <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div>
871
- <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *storeInst = SVFUtil::dyn_cast&lt;StoreInst&gt;(it.getUser()))</div>
871
+ <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *storeInst = SVFUtil::dyn_cast&lt;StoreInst&gt;(it))</div>
872
872
  <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; {</div>
873
873
  <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">if</span> (storeInst-&gt;getPointerOperand() == curValue)</div>
874
874
  <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; {</div>
@@ -882,7 +882,7 @@ Private Attributes</h2></td></tr>
882
882
  <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; }</div>
883
883
  <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">else</span></div>
884
884
  <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; {</div>
885
- <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;nit: storeInst-&gt;getPointerOperand()-&gt;uses())</div>
885
+ <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;nit: storeInst-&gt;getPointerOperand()-&gt;users())</div>
886
886
  <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; {</div>
887
887
  <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="comment">/*</span></div>
888
888
  <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="comment"> * propagate across store (value operand) and load</span></div>
@@ -891,8 +891,8 @@ Private Attributes</h2></td></tr>
891
891
  <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="comment"> %q = load i8*, i8** %p</span></div>
892
892
  <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="comment"> ..infer based on %q..</span></div>
893
893
  <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="comment"> */</span></div>
894
- <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;LoadInst&gt;(nit.getUser()))</div>
895
- <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; insertInferSitesOrPushWorklist(nit.getUser());</div>
894
+ <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;LoadInst&gt;(nit))</div>
895
+ <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; insertInferSitesOrPushWorklist(nit);</div>
896
896
  <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div>
897
897
  <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">/*</span></div>
898
898
  <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;<span class="comment"> * infer based on store (value operand) &lt;- gep (result element)</span></div>
@@ -912,18 +912,18 @@ Private Attributes</h2></td></tr>
912
912
  <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *gepBase = gepInst-&gt;getPointerOperand();</div>
913
913
  <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;LoadInst&gt;(gepBase)) <span class="keywordflow">continue</span>;</div>
914
914
  <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *load = SVFUtil::dyn_cast&lt;LoadInst&gt;(gepBase);</div>
915
- <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;loadUse: load-&gt;getPointerOperand()-&gt;uses())</div>
915
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;loadUse: load-&gt;getPointerOperand()-&gt;users())</div>
916
916
  <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; {</div>
917
- <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">if</span> (loadUse.getUser() == load || !SVFUtil::isa&lt;LoadInst&gt;(loadUse.getUser()))</div>
917
+ <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">if</span> (loadUse == load || !SVFUtil::isa&lt;LoadInst&gt;(loadUse))</div>
918
918
  <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">continue</span>;</div>
919
- <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;gepUse: loadUse.getUser()-&gt;uses())</div>
919
+ <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;gepUse: loadUse-&gt;users())</div>
920
920
  <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; {</div>
921
- <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;GetElementPtrInst&gt;(gepUse.getUser())) <span class="keywordflow">continue</span>;</div>
922
- <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;loadUse2: gepUse.getUser()-&gt;uses())</div>
921
+ <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;GetElementPtrInst&gt;(gepUse)) <span class="keywordflow">continue</span>;</div>
922
+ <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;loadUse2: gepUse-&gt;users())</div>
923
923
  <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; {</div>
924
- <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;LoadInst&gt;(loadUse2.getUser()))</div>
924
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;LoadInst&gt;(loadUse2))</div>
925
925
  <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div>
926
- <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; insertInferSitesOrPushWorklist(loadUse2.getUser());</div>
926
+ <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; insertInferSitesOrPushWorklist(loadUse2);</div>
927
927
  <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div>
928
928
  <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div>
929
929
  <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; }</div>
@@ -933,7 +933,7 @@ Private Attributes</h2></td></tr>
933
933
  <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }</div>
934
934
  <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; </div>
935
935
  <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div>
936
- <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *gepInst = SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(it.getUser()))</div>
936
+ <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *gepInst = SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(it))</div>
937
937
  <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; {</div>
938
938
  <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="comment">/*</span></div>
939
939
  <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;<span class="comment"> * infer based on gep (pointer operand)</span></div>
@@ -944,17 +944,17 @@ Private Attributes</h2></td></tr>
944
944
  <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">if</span> (gepInst-&gt;getPointerOperand() == curValue)</div>
945
945
  <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; insertInferSite(gepInst);</div>
946
946
  <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; }</div>
947
- <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitcast = SVFUtil::dyn_cast&lt;BitCastInst&gt;(it.getUser()))</div>
947
+ <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitcast = SVFUtil::dyn_cast&lt;BitCastInst&gt;(it))</div>
948
948
  <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; {</div>
949
949
  <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="comment">// continue on bitcast</span></div>
950
950
  <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; insertInferSitesOrPushWorklist(bitcast);</div>
951
951
  <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; }</div>
952
- <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *phiNode = SVFUtil::dyn_cast&lt;PHINode&gt;(it.getUser()))</div>
952
+ <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *phiNode = SVFUtil::dyn_cast&lt;PHINode&gt;(it))</div>
953
953
  <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div>
954
954
  <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">// continue on bitcast</span></div>
955
955
  <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; insertInferSitesOrPushWorklist(phiNode);</div>
956
956
  <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div>
957
- <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *retInst = SVFUtil::dyn_cast&lt;ReturnInst&gt;(it.getUser()))</div>
957
+ <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *retInst = SVFUtil::dyn_cast&lt;ReturnInst&gt;(it))</div>
958
958
  <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {</div>
959
959
  <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="comment">/*</span></div>
960
960
  <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="comment"> * propagate from return to caller</span></div>
@@ -967,9 +967,9 @@ Private Attributes</h2></td></tr>
967
967
  <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;<span class="comment"> %call = call i8* @malloc_wrapper()</span></div>
968
968
  <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="comment"> ..infer based on %call..</span></div>
969
969
  <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;<span class="comment"> */</span></div>
970
- <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;callsite: retInst-&gt;getFunction()-&gt;uses())</div>
970
+ <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;callsite: retInst-&gt;getFunction()-&gt;users())</div>
971
971
  <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; {</div>
972
- <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast&lt;CallBase&gt;(callsite.getUser()))</div>
972
+ <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast&lt;CallBase&gt;(callsite))</div>
973
973
  <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; {</div>
974
974
  <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="comment">// skip function as parameter</span></div>
975
975
  <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="comment">// e.g., call void @foo(%struct.ssl_ctx_st* %9, i32 (i8*, i32, i32, i8*)* @passwd_callback)</span></div>
@@ -978,7 +978,7 @@ Private Attributes</h2></td></tr>
978
978
  <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; }</div>
979
979
  <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div>
980
980
  <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; }</div>
981
- <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast&lt;CallBase&gt;(it.getUser()))</div>
981
+ <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast&lt;CallBase&gt;(it))</div>
982
982
  <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; {</div>
983
983
  <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="comment">/*</span></div>
984
984
  <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;<span class="comment"> * propagate from callsite to callee</span></div>
@@ -999,33 +999,57 @@ Private Attributes</h2></td></tr>
999
999
  <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *calleeFunc = callBase-&gt;getCalledFunction())</div>
1000
1000
  <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; {</div>
1001
1001
  <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> pos = <a class="code" href="classSVF_1_1ObjTypeInference.html#a72da2d7f06e8fee67dc5b3c451fa5dee">getArgPosInCall</a>(callBase, curValue);</div>
1002
- <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="comment">// for variable argument, conservatively collect all params</span></div>
1003
- <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">if</span> (calleeFunc-&gt;isVarArg()) pos = 0;</div>
1004
- <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">if</span> (!calleeFunc-&gt;isDeclaration())</div>
1005
- <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; {</div>
1006
- <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; insertInferSitesOrPushWorklist(calleeFunc-&gt;getArg(pos));</div>
1007
- <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; }</div>
1008
- <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; }</div>
1009
- <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div>
1010
- <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; }</div>
1011
- <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">if</span> (canUpdate)</div>
1012
- <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; {</div>
1013
- <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Type *&gt;</a> types;</div>
1014
- <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; std::transform(infersites.begin(), infersites.end(), std::inserter(types, types.begin()),</div>
1015
- <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a19b8626948c43f4ce19dbc69742d309e">infersiteToType</a>);</div>
1016
- <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <a class="code" href="classSVF_1_1ObjTypeInference.html#a0e34e7ea20e9ff7650f89750c53f4671">_valueToInferSites</a>[curValue] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVFUtil::move</a>(infersites);</div>
1017
- <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="classSVF_1_1ObjTypeInference.html#ad9ceac3c884a08ce0ae4fef4b488a7c5">_valueToType</a>[curValue] = <a class="code" href="classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319">selectLargestSizedType</a>(types);</div>
1018
- <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; }</div>
1019
- <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; }</div>
1020
- <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1ObjTypeInference.html#ad9ceac3c884a08ce0ae4fef4b488a7c5">_valueToType</a>[var];</div>
1021
- <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <span class="keyword">nullptr</span>)</div>
1022
- <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; {</div>
1023
- <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1ObjTypeInference.html#aee4383a13cda421acb034ea147e33a6d">defaultType</a>(var);</div>
1024
- <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#ac48ef12f2a6f605d6fa5d31e7623a826">WARN_MSG</a>(<span class="stringliteral">&quot;Using default type, trace ID is &quot;</span> + std::to_string(traceId) + <span class="stringliteral">&quot;:&quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(var));</div>
1025
- <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div>
1026
- <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, <span class="stringliteral">&quot;type cannot be a null ptr&quot;</span>);</div>
1027
- <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">return</span> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>;</div>
1028
- <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;}</div>
1002
+ <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="comment">// for varargs function, we cannot directly get the value-flow between actual and formal args</span></div>
1003
+ <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="comment">// e.g., consider the following vararg function @callee</span></div>
1004
+ <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="comment">// 1: call void @callee(%arg)</span></div>
1005
+ <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">// 2: define dso_local i32 @callee(...) #0 !dbg !17 {</span></div>
1006
+ <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="comment">// 3: .......</span></div>
1007
+ <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="comment">// 4: %5 = load i32, ptr %vaarg.addr, align 4, !dbg !55</span></div>
1008
+ <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="comment">// 5: .......</span></div>
1009
+ <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="comment">// 6: }</span></div>
1010
+ <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="comment">// it is challenging to precisely identify the forward value-flow of %arg (Line 2)</span></div>
1011
+ <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="comment">// because the function definition of callee (Line 2) does not have any formal args related to the actual arg %arg</span></div>
1012
+ <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="comment">// therefore we track all possible instructions like ``load i32, ptr %vaarg.addr&#39;&#39;</span></div>
1013
+ <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordflow">if</span> (calleeFunc-&gt;isVarArg())</div>
1014
+ <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; {</div>
1015
+ <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="comment">// conservatively track all var args</span></div>
1016
+ <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;I: instructions(calleeFunc))</div>
1017
+ <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; {</div>
1018
+ <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">auto</span> *load = llvm::dyn_cast&lt;llvm::LoadInst&gt;(&amp;I))</div>
1019
+ <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; {</div>
1020
+ <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">llvm::Value</a>* loadPointer = load-&gt;getPointerOperand();</div>
1021
+ <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">if</span> (loadPointer-&gt;getName().compare(<span class="stringliteral">&quot;vaarg.addr&quot;</span>) == 0)</div>
1022
+ <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; {</div>
1023
+ <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; insertInferSitesOrPushWorklist(load);</div>
1024
+ <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</div>
1025
+ <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div>
1026
+ <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; }</div>
1027
+ <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; }</div>
1028
+ <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!calleeFunc-&gt;isDeclaration())</div>
1029
+ <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; {</div>
1030
+ <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; insertInferSitesOrPushWorklist(calleeFunc-&gt;getArg(pos));</div>
1031
+ <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; }</div>
1032
+ <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; }</div>
1033
+ <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; }</div>
1034
+ <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; }</div>
1035
+ <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">if</span> (canUpdate)</div>
1036
+ <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; {</div>
1037
+ <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Type *&gt;</a> types;</div>
1038
+ <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; std::transform(infersites.begin(), infersites.end(), std::inserter(types, types.begin()),</div>
1039
+ <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a19b8626948c43f4ce19dbc69742d309e">infersiteToType</a>);</div>
1040
+ <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="classSVF_1_1ObjTypeInference.html#a0e34e7ea20e9ff7650f89750c53f4671">_valueToInferSites</a>[curValue] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVFUtil::move</a>(infersites);</div>
1041
+ <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <a class="code" href="classSVF_1_1ObjTypeInference.html#ad9ceac3c884a08ce0ae4fef4b488a7c5">_valueToType</a>[curValue] = <a class="code" href="classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319">selectLargestSizedType</a>(types);</div>
1042
+ <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; }</div>
1043
+ <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; }</div>
1044
+ <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1ObjTypeInference.html#ad9ceac3c884a08ce0ae4fef4b488a7c5">_valueToType</a>[var];</div>
1045
+ <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <span class="keyword">nullptr</span>)</div>
1046
+ <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; {</div>
1047
+ <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1ObjTypeInference.html#aee4383a13cda421acb034ea147e33a6d">defaultType</a>(var);</div>
1048
+ <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#ac48ef12f2a6f605d6fa5d31e7623a826">WARN_MSG</a>(<span class="stringliteral">&quot;Using default type, trace ID is &quot;</span> + std::to_string(traceId) + <span class="stringliteral">&quot;:&quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(var));</div>
1049
+ <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; }</div>
1050
+ <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, <span class="stringliteral">&quot;type cannot be a null ptr&quot;</span>);</div>
1051
+ <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">return</span> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>;</div>
1052
+ <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;}</div>
1029
1053
  </div><!-- fragment -->
1030
1054
  </div>
1031
1055
  </div>
@@ -1055,13 +1079,13 @@ Private Attributes</h2></td></tr>
1055
1079
  </table>
1056
1080
  </div><div class="memdoc">
1057
1081
 
1058
- <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00553">553</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
1059
- <div class="fragment"><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;{</div>
1060
- <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; assert(callBase-&gt;hasArgument(arg) &amp;&amp; <span class="stringliteral">&quot;callInst does not have argument arg?&quot;</span>);</div>
1061
- <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keyword">auto</span> it = std::find(callBase-&gt;arg_begin(), callBase-&gt;arg_end(), arg);</div>
1062
- <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; assert(it != callBase-&gt;arg_end() &amp;&amp; <span class="stringliteral">&quot;Didn&#39;t find argument?&quot;</span>);</div>
1063
- <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keywordflow">return</span> std::distance(callBase-&gt;arg_begin(), it);</div>
1064
- <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;}</div>
1082
+ <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00577">577</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
1083
+ <div class="fragment"><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;{</div>
1084
+ <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; assert(callBase-&gt;hasArgument(arg) &amp;&amp; <span class="stringliteral">&quot;callInst does not have argument arg?&quot;</span>);</div>
1085
+ <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keyword">auto</span> it = std::find(callBase-&gt;arg_begin(), callBase-&gt;arg_end(), arg);</div>
1086
+ <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; assert(it != callBase-&gt;arg_end() &amp;&amp; <span class="stringliteral">&quot;Didn&#39;t find argument?&quot;</span>);</div>
1087
+ <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">return</span> std::distance(callBase-&gt;arg_begin(), it);</div>
1088
+ <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;}</div>
1065
1089
  </div><!-- fragment -->
1066
1090
  </div>
1067
1091
  </div>
@@ -1160,71 +1184,71 @@ Private Attributes</h2></td></tr>
1160
1184
  </dl>
1161
1185
  <dl class="section return"><dt>Returns</dt><dd>a set of all possible type names that :param:<code>thisPtr</code> could point to </dd></dl>
1162
1186
 
1163
- <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00603">603</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
1164
- <div class="fragment"><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;{</div>
1165
- <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1ObjTypeInference.html#a82a1d348f80d3034fab1c32b8ff9637b">_thisPtrClassNames</a>.find(thisPtr);</div>
1166
- <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="classSVF_1_1ObjTypeInference.html#a82a1d348f80d3034fab1c32b8ff9637b">_thisPtrClassNames</a>.end()) <span class="keywordflow">return</span> it-&gt;second;</div>
1167
- <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; </div>
1168
- <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> names;</div>
1169
- <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; </div>
1170
- <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="comment">// Lambda for checking a function is a valid name source &amp; extracting a class name from it</span></div>
1171
- <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keyword">auto</span> addNamesFromFunc = [&amp;names](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *func) -&gt; <span class="keywordtype">void</span></div>
1172
- <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; {</div>
1173
- <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(<a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(func), <span class="stringliteral">&quot;Func is invalid class name source: &quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(func));</div>
1174
- <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;<a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a> : <a class="code" href="namespaceSVF_1_1cppUtil.html#ae97bb256f20aa617f21a49c98d46177a">extractClsNamesFromFunc</a>(func)) names.insert(<a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>);</div>
1175
- <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; };</div>
1176
- <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; </div>
1177
- <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="comment">// Lambda for getting callee &amp; extracting class name for calls to constructors/destructors/template funcs</span></div>
1178
- <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keyword">auto</span> addNamesFromCall = [&amp;names, &amp;addNamesFromFunc](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *call) -&gt; <span class="keywordtype">void</span></div>
1179
- <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; {</div>
1180
- <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(<a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(call), <span class="stringliteral">&quot;Call is invalid class name source: &quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(call));</div>
1181
- <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; </div>
1182
- <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *func = call-&gt;getCalledFunction();</div>
1183
- <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#afd5fcc8fe98df5f057ff2e04c68b49b5">isDynCast</a>(func)) names.insert(<a class="code" href="namespaceSVF_1_1cppUtil.html#a26ccd6abf127a7ccc34a973f7b13161b">extractClsNameFromDynCast</a>(call));</div>
1184
- <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordflow">else</span> addNamesFromFunc(func);</div>
1185
- <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; };</div>
1186
- <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; </div>
1187
- <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="comment">// Walk backwards to find all valid source sites for the pointer (e.g. stack/global/heap variables)</span></div>
1188
- <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;val: <a class="code" href="classSVF_1_1ObjTypeInference.html#a744de27c13a045108c834c9484d7271c">bwFindAllocOrClsNameSources</a>(thisPtr))</div>
1189
- <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; {</div>
1190
- <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="comment">// A source site is either a constructor/destructor/template function from which the class name can be</span></div>
1191
- <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="comment">// extracted; a call to a C++ constructor/destructor/template function from which the class name can be</span></div>
1192
- <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="comment">// extracted; or an allocation site of an object (i.e. a stack/global/heap variable), from which a</span></div>
1193
- <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="comment">// forward walk can be performed to find calls to C++ constructor/destructor/template functions from</span></div>
1194
- <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="comment">// which the class&#39; name can then be extracted; skip starting pointer</span></div>
1195
- <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">if</span> (val == thisPtr) <span class="keywordflow">continue</span>;</div>
1196
- <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; </div>
1197
- <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *func = SVFUtil::dyn_cast&lt;Function&gt;(val))</div>
1198
- <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; {</div>
1199
- <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="comment">// Constructor/destructor/template func; extract name from func directly</span></div>
1200
- <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; addNamesFromFunc(func);</div>
1201
- <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; }</div>
1202
- <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(val))</div>
1203
- <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; {</div>
1204
- <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="comment">// Call to constructor/destructor/template func; get callee; extract name from callee</span></div>
1205
- <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(SVFUtil::isa&lt;CallBase&gt;(val), <span class="stringliteral">&quot;Call source site is not a callbase: &quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(val));</div>
1206
- <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; addNamesFromCall(SVFUtil::cast&lt;CallBase&gt;(val));</div>
1207
- <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; }</div>
1208
- <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ObjTypeInference.html#a62020ece25ac660f1adb41bd0cf40be7">isAlloc</a>(val))</div>
1209
- <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; {</div>
1210
- <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="comment">// Stack/global/heap allocation site; walk forward; find constructor/destructor/template calls</span></div>
1211
- <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>((SVFUtil::isa&lt;AllocaInst, CallBase, GlobalVariable&gt;(val)),</div>
1212
- <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="stringliteral">&quot;Alloc site source is not a stack/heap/global variable: &quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(val));</div>
1213
- <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *src : <a class="code" href="classSVF_1_1ObjTypeInference.html#af44dd44401384a8e50b0cbe288152ab5">fwFindClsNameSources</a>(val))</div>
1214
- <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; {</div>
1215
- <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *func = SVFUtil::dyn_cast&lt;Function&gt;(src)) addNamesFromFunc(func);</div>
1216
- <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *call = SVFUtil::dyn_cast&lt;CallBase&gt;(src)) addNamesFromCall(call);</div>
1217
- <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keywordflow">else</span> <a class="code" href="ObjTypeInference_8cpp.html#a54176d0866e198769367b0dc65e049b5">ABORT_MSG</a>(<span class="stringliteral">&quot;Source site from forward walk is invalid: &quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(src));</div>
1218
- <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; }</div>
1219
- <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div>
1220
- <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">else</span></div>
1221
- <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; {</div>
1222
- <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#aa73dde570491da218d3ef11359f16955">ERR_MSG</a>(<span class="stringliteral">&quot;Unsupported source type found:&quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(val));</div>
1223
- <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; }</div>
1224
- <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; }</div>
1225
- <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; </div>
1226
- <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ObjTypeInference.html#a82a1d348f80d3034fab1c32b8ff9637b">_thisPtrClassNames</a>[thisPtr] = names;</div>
1227
- <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;}</div>
1187
+ <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00627">627</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
1188
+ <div class="fragment"><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;{</div>
1189
+ <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1ObjTypeInference.html#a82a1d348f80d3034fab1c32b8ff9637b">_thisPtrClassNames</a>.find(thisPtr);</div>
1190
+ <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="classSVF_1_1ObjTypeInference.html#a82a1d348f80d3034fab1c32b8ff9637b">_thisPtrClassNames</a>.end()) <span class="keywordflow">return</span> it-&gt;second;</div>
1191
+ <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; </div>
1192
+ <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> names;</div>
1193
+ <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; </div>
1194
+ <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="comment">// Lambda for checking a function is a valid name source &amp; extracting a class name from it</span></div>
1195
+ <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keyword">auto</span> addNamesFromFunc = [&amp;names](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *func) -&gt; <span class="keywordtype">void</span></div>
1196
+ <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; {</div>
1197
+ <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(<a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(func), <span class="stringliteral">&quot;Func is invalid class name source: &quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(func));</div>
1198
+ <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;<a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a> : <a class="code" href="namespaceSVF_1_1cppUtil.html#ae97bb256f20aa617f21a49c98d46177a">extractClsNamesFromFunc</a>(func)) names.insert(<a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>);</div>
1199
+ <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; };</div>
1200
+ <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; </div>
1201
+ <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="comment">// Lambda for getting callee &amp; extracting class name for calls to constructors/destructors/template funcs</span></div>
1202
+ <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keyword">auto</span> addNamesFromCall = [&amp;names, &amp;addNamesFromFunc](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *call) -&gt; <span class="keywordtype">void</span></div>
1203
+ <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; {</div>
1204
+ <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(<a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(call), <span class="stringliteral">&quot;Call is invalid class name source: &quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(call));</div>
1205
+ <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; </div>
1206
+ <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *func = call-&gt;getCalledFunction();</div>
1207
+ <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#afd5fcc8fe98df5f057ff2e04c68b49b5">isDynCast</a>(func)) names.insert(<a class="code" href="namespaceSVF_1_1cppUtil.html#a26ccd6abf127a7ccc34a973f7b13161b">extractClsNameFromDynCast</a>(call));</div>
1208
+ <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">else</span> addNamesFromFunc(func);</div>
1209
+ <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; };</div>
1210
+ <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; </div>
1211
+ <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="comment">// Walk backwards to find all valid source sites for the pointer (e.g. stack/global/heap variables)</span></div>
1212
+ <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;val: <a class="code" href="classSVF_1_1ObjTypeInference.html#a744de27c13a045108c834c9484d7271c">bwFindAllocOrClsNameSources</a>(thisPtr))</div>
1213
+ <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; {</div>
1214
+ <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="comment">// A source site is either a constructor/destructor/template function from which the class name can be</span></div>
1215
+ <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="comment">// extracted; a call to a C++ constructor/destructor/template function from which the class name can be</span></div>
1216
+ <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="comment">// extracted; or an allocation site of an object (i.e. a stack/global/heap variable), from which a</span></div>
1217
+ <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="comment">// forward walk can be performed to find calls to C++ constructor/destructor/template functions from</span></div>
1218
+ <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="comment">// which the class&#39; name can then be extracted; skip starting pointer</span></div>
1219
+ <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keywordflow">if</span> (val == thisPtr) <span class="keywordflow">continue</span>;</div>
1220
+ <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; </div>
1221
+ <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *func = SVFUtil::dyn_cast&lt;Function&gt;(val))</div>
1222
+ <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; {</div>
1223
+ <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="comment">// Constructor/destructor/template func; extract name from func directly</span></div>
1224
+ <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; addNamesFromFunc(func);</div>
1225
+ <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; }</div>
1226
+ <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(val))</div>
1227
+ <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; {</div>
1228
+ <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="comment">// Call to constructor/destructor/template func; get callee; extract name from callee</span></div>
1229
+ <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(SVFUtil::isa&lt;CallBase&gt;(val), <span class="stringliteral">&quot;Call source site is not a callbase: &quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(val));</div>
1230
+ <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; addNamesFromCall(SVFUtil::cast&lt;CallBase&gt;(val));</div>
1231
+ <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; }</div>
1232
+ <div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ObjTypeInference.html#a62020ece25ac660f1adb41bd0cf40be7">isAlloc</a>(val))</div>
1233
+ <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; {</div>
1234
+ <div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="comment">// Stack/global/heap allocation site; walk forward; find constructor/destructor/template calls</span></div>
1235
+ <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>((SVFUtil::isa&lt;AllocaInst, CallBase, GlobalVariable&gt;(val)),</div>
1236
+ <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="stringliteral">&quot;Alloc site source is not a stack/heap/global variable: &quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(val));</div>
1237
+ <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *src : <a class="code" href="classSVF_1_1ObjTypeInference.html#af44dd44401384a8e50b0cbe288152ab5">fwFindClsNameSources</a>(val))</div>
1238
+ <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; {</div>
1239
+ <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *func = SVFUtil::dyn_cast&lt;Function&gt;(src)) addNamesFromFunc(func);</div>
1240
+ <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *call = SVFUtil::dyn_cast&lt;CallBase&gt;(src)) addNamesFromCall(call);</div>
1241
+ <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">else</span> <a class="code" href="ObjTypeInference_8cpp.html#a54176d0866e198769367b0dc65e049b5">ABORT_MSG</a>(<span class="stringliteral">&quot;Source site from forward walk is invalid: &quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(src));</div>
1242
+ <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; }</div>
1243
+ <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; }</div>
1244
+ <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">else</span></div>
1245
+ <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; {</div>
1246
+ <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#aa73dde570491da218d3ef11359f16955">ERR_MSG</a>(<span class="stringliteral">&quot;Unsupported source type found:&quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(val));</div>
1247
+ <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; }</div>
1248
+ <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; }</div>
1249
+ <div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; </div>
1250
+ <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ObjTypeInference.html#a82a1d348f80d3034fab1c32b8ff9637b">_thisPtrClassNames</a>[thisPtr] = names;</div>
1251
+ <div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;}</div>
1228
1252
  </div><!-- fragment -->
1229
1253
  </div>
1230
1254
  </div>
@@ -1286,10 +1310,10 @@ Private Attributes</h2></td></tr>
1286
1310
 
1287
1311
  <p>is allocation (stack, static, heap) </p>
1288
1312
 
1289
- <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00505">505</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
1290
- <div class="fragment"><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;{</div>
1291
- <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aca11801ed6ef6ff8d2a1e85bc0fc5794">LLVMUtil::isObject</a>(val);</div>
1292
- <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;}</div>
1313
+ <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00529">529</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
1314
+ <div class="fragment"><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;{</div>
1315
+ <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aca11801ed6ef6ff8d2a1e85bc0fc5794">LLVMUtil::isObject</a>(val);</div>
1316
+ <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;}</div>
1293
1317
  </div><!-- fragment -->
1294
1318
  </div>
1295
1319
  </div>
@@ -1310,18 +1334,18 @@ Private Attributes</h2></td></tr>
1310
1334
  </div><div class="memdoc">
1311
1335
  <p>For an C++ class, it can have variant elements depending on the vtable size, Hence we only handle non-cpp-class object, the type of the cpp class is treated as default PointerType</p>
1312
1336
 
1313
- <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00578">578</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
1314
- <div class="fragment"><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;{</div>
1315
- <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> num = <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>();</div>
1316
- <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ArrayType&gt;(objTy))</div>
1317
- <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; num = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab5b55fce942ab6d7995541f3fe0503f8">getNumOfElements</a>(objTy);</div>
1318
- <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *st = SVFUtil::dyn_cast&lt;StructType&gt;(objTy))</div>
1319
- <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; {</div>
1320
- <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1cppUtil.html#a4e1785295e2695fae72758d8bbe4f7ac">classTyHasVTable</a>(st))</div>
1321
- <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; num = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab5b55fce942ab6d7995541f3fe0503f8">getNumOfElements</a>(st);</div>
1322
- <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; }</div>
1323
- <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">return</span> num;</div>
1324
- <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;}</div>
1337
+ <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00602">602</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
1338
+ <div class="fragment"><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160;{</div>
1339
+ <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> num = <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>();</div>
1340
+ <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ArrayType&gt;(objTy))</div>
1341
+ <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; num = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab5b55fce942ab6d7995541f3fe0503f8">getNumOfElements</a>(objTy);</div>
1342
+ <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *st = SVFUtil::dyn_cast&lt;StructType&gt;(objTy))</div>
1343
+ <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; {</div>
1344
+ <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1cppUtil.html#a4e1785295e2695fae72758d8bbe4f7ac">classTyHasVTable</a>(st))</div>
1345
+ <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; num = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab5b55fce942ab6d7995541f3fe0503f8">getNumOfElements</a>(st);</div>
1346
+ <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; }</div>
1347
+ <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordflow">return</span> num;</div>
1348
+ <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;}</div>
1325
1349
  </div><!-- fragment -->
1326
1350
  </div>
1327
1351
  </div>
@@ -1375,21 +1399,21 @@ Private Attributes</h2></td></tr>
1375
1399
 
1376
1400
  <p>select the largest (conservative) type from all types </p>
1377
1401
 
1378
- <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00562">562</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
1379
- <div class="fragment"><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;{</div>
1380
- <div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">if</span> (objTys.empty()) <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
1381
- <div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="comment">// map type size to types from with key in descending order</span></div>
1382
- <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;u32_t, OrderedSet&lt;const Type *&gt;</a>, std::greater&lt;int&gt;&gt; typeSzToTypes;</div>
1383
- <div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *ty: objTys)</div>
1384
- <div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; {</div>
1385
- <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; typeSzToTypes[<a class="code" href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">objTyToNumFields</a>(ty)].insert(ty);</div>
1386
- <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; }</div>
1387
- <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; assert(!typeSzToTypes.empty() &amp;&amp; <span class="stringliteral">&quot;typeSzToTypes cannot be empty&quot;</span>);</div>
1388
- <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <a class="code" href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">OrderedSet&lt;const Type *&gt;</a> largestTypes;</div>
1389
- <div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; std::tie(std::ignore, largestTypes) = *typeSzToTypes.begin();</div>
1390
- <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; assert(!largestTypes.empty() &amp;&amp; <span class="stringliteral">&quot;largest element cannot be empty&quot;</span>);</div>
1391
- <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keywordflow">return</span> *largestTypes.begin();</div>
1392
- <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;}</div>
1402
+ <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00586">586</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
1403
+ <div class="fragment"><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;{</div>
1404
+ <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">if</span> (objTys.empty()) <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
1405
+ <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="comment">// map type size to types from with key in descending order</span></div>
1406
+ <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;u32_t, OrderedSet&lt;const Type *&gt;</a>, std::greater&lt;int&gt;&gt; typeSzToTypes;</div>
1407
+ <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *ty: objTys)</div>
1408
+ <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; {</div>
1409
+ <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; typeSzToTypes[<a class="code" href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">objTyToNumFields</a>(ty)].insert(ty);</div>
1410
+ <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; }</div>
1411
+ <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; assert(!typeSzToTypes.empty() &amp;&amp; <span class="stringliteral">&quot;typeSzToTypes cannot be empty&quot;</span>);</div>
1412
+ <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <a class="code" href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">OrderedSet&lt;const Type *&gt;</a> largestTypes;</div>
1413
+ <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; std::tie(std::ignore, largestTypes) = *typeSzToTypes.begin();</div>
1414
+ <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; assert(!largestTypes.empty() &amp;&amp; <span class="stringliteral">&quot;largest element cannot be empty&quot;</span>);</div>
1415
+ <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">return</span> *largestTypes.begin();</div>
1416
+ <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;}</div>
1393
1417
  </div><!-- fragment -->
1394
1418
  </div>
1395
1419
  </div>
@@ -1425,19 +1449,19 @@ Private Attributes</h2></td></tr>
1425
1449
  </table>
1426
1450
  </div><div class="memdoc">
1427
1451
 
1428
- <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00539">539</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
1429
- <div class="fragment"><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;{</div>
1430
- <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;<span class="preprocessor">#if TYPE_DEBUG</span></div>
1431
- <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *oTy = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(oPTy);</div>
1432
- <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> iTyNum = <a class="code" href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">objTyToNumFields</a>(iTy);</div>
1433
- <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab5b55fce942ab6d7995541f3fe0503f8">getNumOfElements</a>(oTy) &gt; iTyNum)</div>
1434
- <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; {</div>
1435
- <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#aa73dde570491da218d3ef11359f16955">ERR_MSG</a>(<span class="stringliteral">&quot;original type is:&quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">dumpType</a>(oTy));</div>
1436
- <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#aa73dde570491da218d3ef11359f16955">ERR_MSG</a>(<span class="stringliteral">&quot;infered type is:&quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">dumpType</a>(iTy));</div>
1437
- <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a54176d0866e198769367b0dc65e049b5">ABORT_MSG</a>(<span class="stringliteral">&quot;wrong type, trace ID is &quot;</span> + std::to_string(traceId) + <span class="stringliteral">&quot;:&quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(val));</div>
1438
- <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; }</div>
1439
- <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;<span class="preprocessor">#endif</span></div>
1440
- <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;}</div>
1452
+ <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00563">563</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
1453
+ <div class="fragment"><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;{</div>
1454
+ <div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160;<span class="preprocessor">#if TYPE_DEBUG</span></div>
1455
+ <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *oTy = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(oPTy);</div>
1456
+ <div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> iTyNum = <a class="code" href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">objTyToNumFields</a>(iTy);</div>
1457
+ <div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab5b55fce942ab6d7995541f3fe0503f8">getNumOfElements</a>(oTy) &gt; iTyNum)</div>
1458
+ <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; {</div>
1459
+ <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#aa73dde570491da218d3ef11359f16955">ERR_MSG</a>(<span class="stringliteral">&quot;original type is:&quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">dumpType</a>(oTy));</div>
1460
+ <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#aa73dde570491da218d3ef11359f16955">ERR_MSG</a>(<span class="stringliteral">&quot;infered type is:&quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">dumpType</a>(iTy));</div>
1461
+ <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <a class="code" href="ObjTypeInference_8cpp.html#a54176d0866e198769367b0dc65e049b5">ABORT_MSG</a>(<span class="stringliteral">&quot;wrong type, trace ID is &quot;</span> + std::to_string(traceId) + <span class="stringliteral">&quot;:&quot;</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(val));</div>
1462
+ <div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; }</div>
1463
+ <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160;<span class="preprocessor">#endif</span></div>
1464
+ <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;}</div>
1441
1465
  </div><!-- fragment -->
1442
1466
  </div>
1443
1467
  </div>
@@ -1465,30 +1489,30 @@ Private Attributes</h2></td></tr>
1465
1489
  </dd>
1466
1490
  </dl>
1467
1491
 
1468
- <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00514">514</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
1469
- <div class="fragment"><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;{</div>
1470
- <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *func = cs-&gt;getCalledFunction())</div>
1471
- <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; {</div>
1472
- <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keywordflow">if</span> (func-&gt;getName().find(<a class="code" href="ObjTypeInference_8cpp.html#a5f334de99eb942058f27a1025c346f70">TYPEMALLOC</a>) != std::string::npos)</div>
1473
- <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; {</div>
1474
- <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *objType = <a class="code" href="classSVF_1_1ObjTypeInference.html#a9d99aa95a862bc1434c6fbc3dec67a64">fwInferObjType</a>(cs);</div>
1475
- <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *pInt =</div>
1476
- <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; SVFUtil::dyn_cast&lt;llvm::ConstantInt&gt;(cs-&gt;getOperand(1));</div>
1477
- <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; assert(pInt &amp;&amp; <span class="stringliteral">&quot;the second argument is a integer&quot;</span>);</div>
1478
- <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> iTyNum = <a class="code" href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">objTyToNumFields</a>(objType);</div>
1479
- <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordflow">if</span> (iTyNum &gt;= pInt-&gt;getZExtValue())</div>
1480
- <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a05dc00b2bd9a8176aae31b6cfffe725d">SVFUtil::sucMsg</a>(<span class="stringliteral">&quot;\t SUCCESS :&quot;</span>) &lt;&lt; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(cs)</div>
1481
- <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot; TYPE: &quot;</span>)</div>
1482
- <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; &lt;&lt; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">dumpType</a>(objType) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
1483
- <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">else</span></div>
1484
- <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; {</div>
1485
- <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7655b13bbfe720ca2b8a25e0a72528e6">SVFUtil::errMsg</a>(<span class="stringliteral">&quot;\t FAILURE :&quot;</span>) &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(cs) &lt;&lt; <span class="stringliteral">&quot; TYPE: &quot;</span></div>
1486
- <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; &lt;&lt; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">dumpType</a>(objType) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
1487
- <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; abort();</div>
1488
- <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; }</div>
1489
- <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div>
1490
- <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; }</div>
1491
- <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;}</div>
1492
+ <p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00538">538</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
1493
+ <div class="fragment"><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;{</div>
1494
+ <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *func = cs-&gt;getCalledFunction())</div>
1495
+ <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; {</div>
1496
+ <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">if</span> (func-&gt;getName().find(<a class="code" href="ObjTypeInference_8cpp.html#a5f334de99eb942058f27a1025c346f70">TYPEMALLOC</a>) != std::string::npos)</div>
1497
+ <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; {</div>
1498
+ <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *objType = <a class="code" href="classSVF_1_1ObjTypeInference.html#a9d99aa95a862bc1434c6fbc3dec67a64">fwInferObjType</a>(cs);</div>
1499
+ <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *pInt =</div>
1500
+ <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; SVFUtil::dyn_cast&lt;llvm::ConstantInt&gt;(cs-&gt;getOperand(1));</div>
1501
+ <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; assert(pInt &amp;&amp; <span class="stringliteral">&quot;the second argument is a integer&quot;</span>);</div>
1502
+ <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> iTyNum = <a class="code" href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">objTyToNumFields</a>(objType);</div>
1503
+ <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">if</span> (iTyNum &gt;= pInt-&gt;getZExtValue())</div>
1504
+ <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a05dc00b2bd9a8176aae31b6cfffe725d">SVFUtil::sucMsg</a>(<span class="stringliteral">&quot;\t SUCCESS :&quot;</span>) &lt;&lt; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(cs)</div>
1505
+ <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot; TYPE: &quot;</span>)</div>
1506
+ <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; &lt;&lt; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">dumpType</a>(objType) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
1507
+ <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">else</span></div>
1508
+ <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; {</div>
1509
+ <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7655b13bbfe720ca2b8a25e0a72528e6">SVFUtil::errMsg</a>(<span class="stringliteral">&quot;\t FAILURE :&quot;</span>) &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(cs) &lt;&lt; <span class="stringliteral">&quot; TYPE: &quot;</span></div>
1510
+ <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; &lt;&lt; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">dumpType</a>(objType) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
1511
+ <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; abort();</div>
1512
+ <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; }</div>
1513
+ <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; }</div>
1514
+ <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; }</div>
1515
+ <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;}</div>
1492
1516
  </div><!-- fragment -->
1493
1517
  </div>
1494
1518
  </div>
@@ -1643,15 +1667,15 @@ Private Attributes</h2></td></tr>
1643
1667
  </ul>
1644
1668
  </div><!-- contents -->
1645
1669
  <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a82a1d348f80d3034fab1c32b8ff9637b"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a82a1d348f80d3034fab1c32b8ff9637b">SVF::ObjTypeInference::_thisPtrClassNames</a></div><div class="ttdeci">ValueToClassNames _thisPtrClassNames</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8h_source.html#l00058">ObjTypeInference.h:58</a></div></div>
1646
- <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a744de27c13a045108c834c9484d7271c"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a744de27c13a045108c834c9484d7271c">SVF::ObjTypeInference::bwFindAllocOrClsNameSources</a></div><div class="ttdeci">Set&lt; const Value * &gt; &amp; bwFindAllocOrClsNameSources(const Value *startValue)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00676">ObjTypeInference.cpp:676</a></div></div>
1670
+ <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a744de27c13a045108c834c9484d7271c"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a744de27c13a045108c834c9484d7271c">SVF::ObjTypeInference::bwFindAllocOrClsNameSources</a></div><div class="ttdeci">Set&lt; const Value * &gt; &amp; bwFindAllocOrClsNameSources(const Value *startValue)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00700">ObjTypeInference.cpp:700</a></div></div>
1647
1671
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00105">LLVMModule.h:105</a></div></div>
1648
1672
  <div class="ttc" id="aObjTypeInference_8cpp_html_ac48ef12f2a6f605d6fa5d31e7623a826"><div class="ttname"><a href="ObjTypeInference_8cpp.html#ac48ef12f2a6f605d6fa5d31e7623a826">WARN_MSG</a></div><div class="ttdeci">#define WARN_MSG(msg)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00071">ObjTypeInference.cpp:71</a></div></div>
1649
1673
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a7655b13bbfe720ca2b8a25e0a72528e6"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a7655b13bbfe720ca2b8a25e0a72528e6">SVF::SVFUtil::errMsg</a></div><div class="ttdeci">std::string errMsg(const std::string &amp;msg)</div><div class="ttdoc">Print error message by converting a string into red string output.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00076">SVFUtil.cpp:76</a></div></div>
1650
1674
  <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a172d2e9ab858fc7cd145721e175c4deb"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a172d2e9ab858fc7cd145721e175c4deb">SVF::ObjTypeInference::int8Type</a></div><div class="ttdeci">const IntegerType * int8Type()</div><div class="ttdoc">int8 type</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8h_source.html#l00088">ObjTypeInference.h:88</a></div></div>
1651
1675
  <div class="ttc" id="anamespaceSVF_html_aedf0d6718ca176e0b9e17ab4b30729c6"><div class="ttname"><a href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">SVF::OrderedMap</a></div><div class="ttdeci">std::map&lt; Key, Value, Compare, Allocator &gt; OrderedMap</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00105">GeneralType.h:105</a></div></div>
1652
- <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_af44dd44401384a8e50b0cbe288152ab5"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#af44dd44401384a8e50b0cbe288152ab5">SVF::ObjTypeInference::fwFindClsNameSources</a></div><div class="ttdeci">Set&lt; const CallBase * &gt; &amp; fwFindClsNameSources(const Value *startValue)</div><div class="ttdoc">forward find class name sources starting from an allocation</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00809">ObjTypeInference.cpp:809</a></div></div>
1676
+ <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_af44dd44401384a8e50b0cbe288152ab5"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#af44dd44401384a8e50b0cbe288152ab5">SVF::ObjTypeInference::fwFindClsNameSources</a></div><div class="ttdeci">Set&lt; const CallBase * &gt; &amp; fwFindClsNameSources(const Value *startValue)</div><div class="ttdoc">forward find class name sources starting from an allocation</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00833">ObjTypeInference.cpp:833</a></div></div>
1653
1677
  <div class="ttc" id="aCommandLine_8h_html_a2429346d37bd4c40889bd7c6d319d9da"><div class="ttname"><a href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00018">CommandLine.h:18</a></div></div>
1654
- <div class="ttc" id="anamespaceSVF_html_ab696aab940eb187dc81217efe8649af5"><div class="ttname"><a href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">SVF::StoreInst</a></div><div class="ttdeci">llvm::StoreInst StoreInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00147">BasicTypes.h:147</a></div></div>
1678
+ <div class="ttc" id="anamespaceSVF_html_ab696aab940eb187dc81217efe8649af5"><div class="ttname"><a href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">SVF::StoreInst</a></div><div class="ttdeci">llvm::StoreInst StoreInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00148">BasicTypes.h:148</a></div></div>
1655
1679
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_aca11801ed6ef6ff8d2a1e85bc0fc5794"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#aca11801ed6ef6ff8d2a1e85bc0fc5794">SVF::LLVMUtil::isObject</a></div><div class="ttdeci">bool isObject(const Value *ref)</div><div class="ttdoc">Return true if this value refers to a object.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00069">LLVMUtil.cpp:69</a></div></div>
1656
1680
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a86c0a0cb4ada72bd4f42c77558e6a350"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">SVF::LLVMUtil::dumpValueAndDbgInfo</a></div><div class="ttdeci">std::string dumpValueAndDbgInfo(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00917">LLVMUtil.cpp:917</a></div></div>
1657
1681
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_aaf9b679407f12b93afc53c157d37b444"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#aaf9b679407f12b93afc53c157d37b444">SVF::LLVMModuleSet::getLLVMValue</a></div><div class="ttdeci">const Value * getLLVMValue(const SVFValue *value) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00198">LLVMModule.h:198</a></div></div>
@@ -1660,13 +1684,13 @@ Private Attributes</h2></td></tr>
1660
1684
  <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_afefdc78a399a653f1b408a62eafeaab9"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#afefdc78a399a653f1b408a62eafeaab9">SVF::ObjTypeInference::_valueToAllocOrClsNameSources</a></div><div class="ttdeci">ValueToSources _valueToAllocOrClsNameSources</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8h_source.html#l00059">ObjTypeInference.h:59</a></div></div>
1661
1685
  <div class="ttc" id="anamespaceSVF_1_1cppUtil_html_a26ccd6abf127a7ccc34a973f7b13161b"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a26ccd6abf127a7ccc34a973f7b13161b">SVF::cppUtil::extractClsNameFromDynCast</a></div><div class="ttdeci">std::string extractClsNameFromDynCast(const CallBase *callBase)</div><div class="ttdoc">extract class name from cpp dyncast function</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8cpp_source.html#l00853">CppUtil.cpp:853</a></div></div>
1662
1686
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a50fc24901350df9db890ba16a9b87e33"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">SVF::LLVMModuleSet::getSVFFunction</a></div><div class="ttdeci">SVFFunction * getSVFFunction(const Function *fun) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00205">LLVMModule.h:205</a></div></div>
1663
- <div class="ttc" id="anamespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdoc">LLVM Basic classes.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00081">BasicTypes.h:81</a></div></div>
1687
+ <div class="ttc" id="anamespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdoc">LLVM Basic classes.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00082">BasicTypes.h:82</a></div></div>
1664
1688
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ab2064cb70c76f399ce115f2621adea35"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVF::SVFUtil::isHeapAllocExtCallViaRet</a></div><div class="ttdeci">bool isHeapAllocExtCallViaRet(const CallSite cs)</div><div class="ttdoc">interfaces to be used externally</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00442">SVFUtil.h:442</a></div></div>
1665
1689
  <div class="ttc" id="acJSON_8h_html_a25d22ecc7e656d2c59332072684e8766"><div class="ttname"><a href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a></div><div class="ttdeci">const char *const name</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00264">cJSON.h:264</a></div></div>
1666
- <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a205fa59a7250270b216f47df78ef2319"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319">SVF::ObjTypeInference::selectLargestSizedType</a></div><div class="ttdeci">const Type * selectLargestSizedType(Set&lt; const Type * &gt; &amp;objTys)</div><div class="ttdoc">select the largest (conservative) type from all types</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00562">ObjTypeInference.cpp:562</a></div></div>
1667
- <div class="ttc" id="anamespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00084">BasicTypes.h:84</a></div></div>
1668
- <div class="ttc" id="anamespaceSVF_html_a1f4624771922dc8c2447ad7433588c73"><div class="ttname"><a href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">SVF::CallBase</a></div><div class="ttdeci">llvm::CallBase CallBase</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00145">BasicTypes.h:145</a></div></div>
1669
- <div class="ttc" id="anamespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00082">BasicTypes.h:82</a></div></div>
1690
+ <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a205fa59a7250270b216f47df78ef2319"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319">SVF::ObjTypeInference::selectLargestSizedType</a></div><div class="ttdeci">const Type * selectLargestSizedType(Set&lt; const Type * &gt; &amp;objTys)</div><div class="ttdoc">select the largest (conservative) type from all types</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00586">ObjTypeInference.cpp:586</a></div></div>
1691
+ <div class="ttc" id="anamespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00085">BasicTypes.h:85</a></div></div>
1692
+ <div class="ttc" id="anamespaceSVF_html_a1f4624771922dc8c2447ad7433588c73"><div class="ttname"><a href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">SVF::CallBase</a></div><div class="ttdeci">llvm::CallBase CallBase</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00146">BasicTypes.h:146</a></div></div>
1693
+ <div class="ttc" id="anamespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00083">BasicTypes.h:83</a></div></div>
1670
1694
  <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a0e34e7ea20e9ff7650f89750c53f4671"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a0e34e7ea20e9ff7650f89750c53f4671">SVF::ObjTypeInference::_valueToInferSites</a></div><div class="ttdeci">ValueToInferSites _valueToInferSites</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8h_source.html#l00055">ObjTypeInference.h:55</a></div></div>
1671
1695
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a6e8682537cf5bed808df439bd7e1add9"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">SVF::LLVMUtil::dumpType</a></div><div class="ttdeci">std::string dumpType(const Type *type)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00906">LLVMUtil.cpp:906</a></div></div>
1672
1696
  <div class="ttc" id="aclassSVF_1_1SVFBasicBlock_html_ad05f85ce931d4479f71d1947a25599dc"><div class="ttname"><a href="classSVF_1_1SVFBasicBlock.html#ad05f85ce931d4479f71d1947a25599dc">SVF::SVFBasicBlock::back</a></div><div class="ttdeci">const SVFInstruction * back() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00603">SVFValue.h:603</a></div></div>
@@ -1676,11 +1700,11 @@ Private Attributes</h2></td></tr>
1676
1700
  <div class="ttc" id="anamespaceSVF_1_1cppUtil_html_a985a32c8324d559a87e4ee6e5a1e1efd"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">SVF::cppUtil::isClsNameSource</a></div><div class="ttdeci">bool isClsNameSource(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8cpp_source.html#l00793">CppUtil.cpp:793</a></div></div>
1677
1701
  <div class="ttc" id="acJSON_8cpp_html_a3f9a0d3265a6254722587175dac3e4dc"><div class="ttname"><a href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a></div><div class="ttdeci">newitem type</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02739">cJSON.cpp:2739</a></div></div>
1678
1702
  <div class="ttc" id="anamespaceSVF_1_1cppUtil_html_ae97bb256f20aa617f21a49c98d46177a"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#ae97bb256f20aa617f21a49c98d46177a">SVF::cppUtil::extractClsNamesFromFunc</a></div><div class="ttdeci">Set&lt; std::string &gt; extractClsNamesFromFunc(const Function *foo)</div><div class="ttdoc">extract class name from the c++ function name, e.g., constructor/destructors</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8cpp_source.html#l00641">CppUtil.cpp:641</a></div></div>
1679
- <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a5eae038a7bffb0549ca75cd9c850ff1e"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">SVF::ObjTypeInference::objTyToNumFields</a></div><div class="ttdeci">u32_t objTyToNumFields(const Type *objTy)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00578">ObjTypeInference.cpp:578</a></div></div>
1703
+ <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a5eae038a7bffb0549ca75cd9c850ff1e"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">SVF::ObjTypeInference::objTyToNumFields</a></div><div class="ttdeci">u32_t objTyToNumFields(const Type *objTy)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00602">ObjTypeInference.cpp:602</a></div></div>
1680
1704
  <div class="ttc" id="aclassSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00297">SVFValue.h:297</a></div></div>
1681
1705
  <div class="ttc" id="aclassSVF_1_1FILOWorkList_html_afcf3fcda18e8d3e2bad70a51376c0ce1"><div class="ttname"><a href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">SVF::FILOWorkList::push</a></div><div class="ttdeci">bool push(const Data &amp;data)</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00257">WorkList.h:257</a></div></div>
1682
- <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a42149ece87a178241ef1ef0cce7ec554"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a42149ece87a178241ef1ef0cce7ec554">SVF::ObjTypeInference::bwfindAllocOfVar</a></div><div class="ttdeci">Set&lt; const Value * &gt; &amp; bwfindAllocOfVar(const Value *var)</div><div class="ttdoc">backward collect all possible allocation sites (stack, static, heap) of var</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00386">ObjTypeInference.cpp:386</a></div></div>
1683
- <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a62020ece25ac660f1adb41bd0cf40be7"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a62020ece25ac660f1adb41bd0cf40be7">SVF::ObjTypeInference::isAlloc</a></div><div class="ttdeci">bool isAlloc(const SVF::Value *val)</div><div class="ttdoc">is allocation (stack, static, heap)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00505">ObjTypeInference.cpp:505</a></div></div>
1706
+ <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a42149ece87a178241ef1ef0cce7ec554"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a42149ece87a178241ef1ef0cce7ec554">SVF::ObjTypeInference::bwfindAllocOfVar</a></div><div class="ttdeci">Set&lt; const Value * &gt; &amp; bwfindAllocOfVar(const Value *var)</div><div class="ttdoc">backward collect all possible allocation sites (stack, static, heap) of var</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00410">ObjTypeInference.cpp:410</a></div></div>
1707
+ <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a62020ece25ac660f1adb41bd0cf40be7"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a62020ece25ac660f1adb41bd0cf40be7">SVF::ObjTypeInference::isAlloc</a></div><div class="ttdeci">bool isAlloc(const SVF::Value *val)</div><div class="ttdoc">is allocation (stack, static, heap)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00529">ObjTypeInference.cpp:529</a></div></div>
1684
1708
  <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a18edeb47fb7734eb17ba3a84181cbc16"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">SVF::ObjTypeInference::_valueToAllocs</a></div><div class="ttdeci">ValueToSources _valueToAllocs</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8h_source.html#l00057">ObjTypeInference.h:57</a></div></div>
1685
1709
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a72502f7f536418621485e90ab98c2016"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVF::SVFUtil::move</a></div><div class="ttdeci">constexpr std::remove_reference&lt; T &gt;::type &amp;&amp; move(T &amp;&amp;t) noexcept</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00621">SVFUtil.h:621</a></div></div>
1686
1710
  <div class="ttc" id="aclassSVF_1_1SVFFunction_html_ac4c28c8d205d354f3a982119f29f2aac"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ac4c28c8d205d354f3a982119f29f2aac">SVF::SVFFunction::getExitBB</a></div><div class="ttdeci">const SVFBasicBlock * getExitBB() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8cpp_source.html#l00192">SVFValue.cpp:192</a></div></div>
@@ -1699,7 +1723,7 @@ Private Attributes</h2></td></tr>
1699
1723
  <div class="ttc" id="aclassSVF_1_1FILOWorkList_html_a3fd9acb6d09fd142bfd402fdf8cac93b"><div class="ttname"><a href="classSVF_1_1FILOWorkList.html#a3fd9acb6d09fd142bfd402fdf8cac93b">SVF::FILOWorkList::pop</a></div><div class="ttdeci">Data pop()</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00272">WorkList.h:272</a></div></div>
1700
1724
  <div class="ttc" id="aclassSVF_1_1FILOWorkList_html"><div class="ttname"><a href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a></div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00044">AbstractExecution.h:44</a></div></div>
1701
1725
  <div class="ttc" id="aclassSVF_1_1Options_html_aaab923c093730b1670a54f09340b1bd5"><div class="ttname"><a href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">SVF::Options::MaxFieldLimit</a></div><div class="ttdeci">static const Option&lt; u32_t &gt; MaxFieldLimit</div><div class="ttdoc">Maximum number of field derivations for an object.</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00038">Options.h:38</a></div></div>
1702
- <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a72da2d7f06e8fee67dc5b3c451fa5dee"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a72da2d7f06e8fee67dc5b3c451fa5dee">SVF::ObjTypeInference::getArgPosInCall</a></div><div class="ttdeci">u32_t getArgPosInCall(const CallBase *callBase, const Value *arg)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00553">ObjTypeInference.cpp:553</a></div></div>
1726
+ <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a72da2d7f06e8fee67dc5b3c451fa5dee"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a72da2d7f06e8fee67dc5b3c451fa5dee">SVF::ObjTypeInference::getArgPosInCall</a></div><div class="ttdeci">u32_t getArgPosInCall(const CallBase *callBase, const Value *arg)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00577">ObjTypeInference.cpp:577</a></div></div>
1703
1727
  <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_ad9ceac3c884a08ce0ae4fef4b488a7c5"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#ad9ceac3c884a08ce0ae4fef4b488a7c5">SVF::ObjTypeInference::_valueToType</a></div><div class="ttdeci">ValueToType _valueToType</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8h_source.html#l00056">ObjTypeInference.h:56</a></div></div>
1704
1728
  <div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a172f97ff9c9a7c90dbec6329c89775ad"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a172f97ff9c9a7c90dbec6329c89775ad">SVF::ObjTypeInference::getLLVMCtx</a></div><div class="ttdeci">LLVMContext &amp; getLLVMCtx()</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00125">ObjTypeInference.cpp:125</a></div></div>
1705
1729
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_abba4111230f6009bbf50518ee36a9870"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">SVF::LLVMUtil::getPtrElementType</a></div><div class="ttdeci">static Type * getPtrElementType(const PointerType *pty)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00099">LLVMUtil.h:99</a></div></div>