svf-tools 1.0.461 → 1.0.464

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 (382) hide show
  1. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +2 -2
  3. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +5 -5
  4. package/SVF-doxygen/html/html/Andersen_8h_source.html +2 -2
  5. package/SVF-doxygen/html/html/Annotator_8h_source.html +1 -1
  6. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp.html +1 -1
  7. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +3 -3
  8. package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +3 -3
  9. package/SVF-doxygen/html/html/CFLAlias_8h_source.html +3 -3
  10. package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/html/CFLGraph_8cpp_source.html +1 -1
  12. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +16 -16
  13. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +5 -5
  14. package/SVF-doxygen/html/html/CHG_8cpp.html +2 -2
  15. package/SVF-doxygen/html/html/CHG_8cpp_source.html +9 -9
  16. package/SVF-doxygen/html/html/CHG_8h_source.html +3 -3
  17. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +17 -17
  18. package/SVF-doxygen/html/html/CPPUtil_8h_source.html +1 -1
  19. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +3 -3
  20. package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +1 -1
  21. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
  22. package/SVF-doxygen/html/html/ConsG_8h_source.html +5 -5
  23. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +2 -2
  24. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
  25. package/SVF-doxygen/html/html/CxtStmt_8h_source.html +3 -3
  26. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +23 -23
  27. package/SVF-doxygen/html/html/DCHG_8h_source.html +11 -11
  28. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
  29. package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
  30. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +3 -3
  31. package/SVF-doxygen/html/html/DDAPass_8h_source.html +1 -1
  32. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +3 -3
  33. package/SVF-doxygen/html/html/DPItem_8h_source.html +1 -1
  34. package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +5 -5
  35. package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +7 -7
  36. package/SVF-doxygen/html/html/ExeState_8cpp_source.html +2 -2
  37. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +3 -3
  38. package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
  39. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
  40. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
  41. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +2 -2
  42. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp.html +7 -6
  43. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +51 -50
  44. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +28 -28
  45. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +2 -2
  46. package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +1 -1
  47. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
  48. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +6 -6
  49. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
  50. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +1 -1
  51. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +3 -3
  52. package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
  53. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +6 -6
  54. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +2 -2
  55. package/SVF-doxygen/html/html/IRGraph_8h_source.html +2 -2
  56. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +6 -6
  57. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +5 -5
  58. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +16 -16
  59. package/SVF-doxygen/html/html/LLVMUtil_8h.html +1 -1
  60. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +12 -12
  61. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
  62. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +1 -1
  63. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +3 -3
  64. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +6 -6
  65. package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +1 -1
  66. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +10 -10
  67. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +1 -1
  68. package/SVF-doxygen/html/html/MHP_8cpp.html +2 -2
  69. package/SVF-doxygen/html/html/MHP_8cpp_source.html +10 -10
  70. package/SVF-doxygen/html/html/MHP_8h_source.html +2 -2
  71. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +1 -1
  72. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +5 -5
  73. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +2 -2
  74. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +12 -12
  75. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +4 -4
  76. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +3 -3
  77. package/SVF-doxygen/html/html/MTA_8cpp_source.html +5 -5
  78. package/SVF-doxygen/html/html/MTA_8h_source.html +4 -4
  79. package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +1 -1
  80. package/SVF-doxygen/html/html/MemPartition_8h_source.html +1 -1
  81. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +5 -5
  82. package/SVF-doxygen/html/html/MemRegion_8h_source.html +1 -1
  83. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +6 -6
  84. package/SVF-doxygen/html/html/MemSSA_8h_source.html +3 -3
  85. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
  86. package/SVF-doxygen/html/html/Options_8cpp_source.html +11 -12
  87. package/SVF-doxygen/html/html/Options_8h_source.html +11 -12
  88. package/SVF-doxygen/html/html/PCG_8cpp_source.html +4 -4
  89. package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
  90. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +2 -2
  91. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
  92. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +6 -6
  93. package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +4 -4
  94. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +3 -3
  95. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +2 -2
  96. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +10 -10
  97. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +6 -6
  98. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +1 -1
  99. package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h.html +157 -67
  100. package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h_source.html +72 -67
  101. package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +1 -1
  102. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +3 -3
  103. package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +2 -2
  104. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
  105. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +1 -1
  106. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +4 -4
  107. package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
  108. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +50 -43
  109. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +43 -42
  110. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +20 -22
  111. package/SVF-doxygen/html/html/SVFIR_8h_source.html +45 -46
  112. package/SVF-doxygen/html/html/SVFModule_8h_source.html +3 -3
  113. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
  114. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +7 -7
  115. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +5 -5
  116. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
  117. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +2 -2
  118. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +2 -2
  119. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +1 -1
  120. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +4 -4
  121. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +1 -1
  122. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
  123. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +28 -28
  124. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +2 -2
  125. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +7 -7
  126. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +2 -2
  127. package/SVF-doxygen/html/html/TCT_8cpp_source.html +11 -11
  128. package/SVF-doxygen/html/html/TCT_8h_source.html +8 -8
  129. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +2 -2
  130. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +4 -4
  131. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
  132. package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +2 -2
  133. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +4 -4
  134. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp.html +3 -2
  135. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +45 -44
  136. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +33 -33
  137. package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +0 -12
  138. package/SVF-doxygen/html/html/Util_2BasicTypes_8h_source.html +71 -76
  139. package/SVF-doxygen/html/html/VFGNode_8h_source.html +1 -1
  140. package/SVF-doxygen/html/html/VFG_8cpp_source.html +3 -3
  141. package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
  142. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
  143. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
  144. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +6 -6
  145. package/SVF-doxygen/html/html/WPAPass_8h_source.html +3 -3
  146. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  148. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
  149. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
  150. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
  151. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +1 -1
  152. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +7 -7
  153. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +1 -1
  154. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +1 -1
  155. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
  156. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +2 -2
  157. package/SVF-doxygen/html/html/classSVF_1_1Annotator.html +1 -1
  158. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +1 -1
  159. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +7 -7
  160. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
  161. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  162. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +1 -1
  163. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +1 -1
  164. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +3 -3
  165. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +3 -3
  166. package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +1 -1
  167. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +26 -26
  168. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +7 -7
  169. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +1 -1
  170. package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +1 -1
  171. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +2 -2
  172. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +1 -1
  173. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +1 -1
  174. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  175. package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +41 -41
  176. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +1 -1
  177. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +1 -1
  178. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +1 -1
  179. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
  180. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
  181. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +2 -2
  182. package/SVF-doxygen/html/html/classSVF_1_1CondStdSet.html +1 -1
  183. package/SVF-doxygen/html/html/classSVF_1_1CondVar.html +1 -1
  184. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +4 -4
  185. package/SVF-doxygen/html/html/classSVF_1_1ContextCond.html +1 -1
  186. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +4 -4
  187. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
  188. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +1 -1
  189. package/SVF-doxygen/html/html/classSVF_1_1CxtProc.html +1 -1
  190. package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
  191. package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
  192. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +152 -152
  193. package/SVF-doxygen/html/html/classSVF_1_1DCHNode.html +12 -12
  194. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +2 -2
  195. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +4 -4
  196. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +2 -2
  197. package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +1 -1
  198. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +1 -1
  199. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +1 -1
  200. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +1 -1
  201. package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +4 -4
  202. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
  203. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +6 -6
  204. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +3 -3
  205. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +117 -117
  206. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +11 -11
  207. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
  208. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
  209. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
  210. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
  211. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +2 -2
  212. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +2 -2
  213. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +1 -1
  214. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
  215. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +1 -1
  216. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +1 -1
  217. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +1 -1
  218. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +1 -1
  219. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +9 -9
  220. package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +1 -1
  221. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
  222. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -1
  223. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +1 -1
  224. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +1 -1
  225. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  226. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  227. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +1 -1
  228. package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +1 -1
  229. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +1 -1
  230. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +1 -1
  231. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +1 -1
  232. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
  233. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  234. package/SVF-doxygen/html/html/classSVF_1_1IteratedDominanceFrontier.html +2 -2
  235. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +11 -11
  236. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
  237. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
  238. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +1 -1
  239. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +4 -4
  240. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +17 -17
  241. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +10 -10
  242. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +15 -15
  243. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +8 -8
  244. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
  245. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
  246. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +5 -5
  247. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +8 -8
  248. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +18 -18
  249. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +3 -3
  250. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +1 -1
  251. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +9 -9
  252. package/SVF-doxygen/html/html/classSVF_1_1MemSSADF.html +1 -1
  253. package/SVF-doxygen/html/html/classSVF_1_1MergeFunctionRets.html +1 -1
  254. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +1 -1
  255. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +1 -1
  256. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
  257. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
  258. package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +79 -80
  259. package/SVF-doxygen/html/html/classSVF_1_1Options.html +11 -37
  260. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +4 -4
  261. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +9 -9
  262. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
  263. package/SVF-doxygen/html/html/classSVF_1_1PTACFInfoBuilder.html +4 -4
  264. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +1 -1
  265. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +1 -1
  266. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +1 -1
  267. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +10 -10
  268. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
  269. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +20 -20
  270. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +1 -1
  271. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +4 -4
  272. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +1 -1
  273. package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +1 -1
  274. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +1 -1
  275. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +1 -1
  276. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  277. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +1 -1
  278. package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +3 -3
  279. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +27 -27
  280. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +2 -2
  281. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +3 -3
  282. package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal.html +3 -3
  283. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +94 -95
  284. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +119 -160
  285. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +56 -55
  286. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +125 -81
  287. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +1 -1
  288. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +2 -2
  289. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +5 -5
  290. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +4 -4
  291. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
  292. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -1
  293. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +1 -1
  294. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
  295. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +1 -1
  296. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +32 -32
  297. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +9 -9
  298. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +18 -18
  299. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  300. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  301. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
  302. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
  303. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +1 -1
  304. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +1 -1
  305. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +1 -1
  306. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +1 -1
  307. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +4 -4
  308. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +129 -129
  309. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
  310. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  311. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +4 -4
  312. package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +1 -1
  313. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
  314. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
  315. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +1 -1
  316. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +3 -3
  317. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +2 -2
  318. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +11 -11
  319. package/SVF-doxygen/html/html/functions_func_g.html +1 -1
  320. package/SVF-doxygen/html/html/functions_g.html +12 -15
  321. package/SVF-doxygen/html/html/functions_i.html +3 -3
  322. package/SVF-doxygen/html/html/functions_l.html +6 -6
  323. package/SVF-doxygen/html/html/functions_n.html +3 -3
  324. package/SVF-doxygen/html/html/functions_p.html +18 -14
  325. package/SVF-doxygen/html/html/functions_s.html +13 -15
  326. package/SVF-doxygen/html/html/functions_t.html +1 -3
  327. package/SVF-doxygen/html/html/functions_v.html +3 -3
  328. package/SVF-doxygen/html/html/functions_vars_g.html +0 -3
  329. package/SVF-doxygen/html/html/functions_w.html +10 -6
  330. package/SVF-doxygen/html/html/globals_d.html +12 -0
  331. package/SVF-doxygen/html/html/globals_g.html +5 -2
  332. package/SVF-doxygen/html/html/globals_s.html +3 -3
  333. package/SVF-doxygen/html/html/globals_type.html +15 -0
  334. package/SVF-doxygen/html/html/namespaceSVF.html +35 -131
  335. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +42 -42
  336. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +29 -29
  337. package/SVF-doxygen/html/html/namespacemembers_d.html +2 -14
  338. package/SVF-doxygen/html/html/namespacemembers_g.html +2 -5
  339. package/SVF-doxygen/html/html/namespacemembers_type.html +0 -15
  340. package/SVF-doxygen/html/html/search/all_10.js +6 -6
  341. package/SVF-doxygen/html/html/search/all_13.js +12 -12
  342. package/SVF-doxygen/html/html/search/all_14.js +3 -3
  343. package/SVF-doxygen/html/html/search/all_16.js +1 -1
  344. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  345. package/SVF-doxygen/html/html/search/all_4.js +4 -4
  346. package/SVF-doxygen/html/html/search/all_7.js +2 -3
  347. package/SVF-doxygen/html/html/search/all_9.js +1 -1
  348. package/SVF-doxygen/html/html/search/all_b.js +1 -1
  349. package/SVF-doxygen/html/html/search/all_c.js +2 -2
  350. package/SVF-doxygen/html/html/search/all_d.js +1 -1
  351. package/SVF-doxygen/html/html/search/all_e.js +3 -3
  352. package/SVF-doxygen/html/html/search/functions_10.js +1 -1
  353. package/SVF-doxygen/html/html/search/functions_6.js +1 -1
  354. package/SVF-doxygen/html/html/search/typedefs_3.js +4 -4
  355. package/SVF-doxygen/html/html/search/typedefs_6.js +1 -1
  356. package/SVF-doxygen/html/html/search/variables_14.js +3 -3
  357. package/SVF-doxygen/html/html/search/variables_7.js +0 -1
  358. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  359. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4.html +3 -3
  360. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  361. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +2 -2
  362. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +1 -1
  363. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
  364. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PTACallGraph_01_5_01_4.html +2 -2
  365. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +4 -4
  366. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +4 -4
  367. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CallSite_01_4.html +3 -3
  368. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtProc_01_4.html +1 -1
  369. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  370. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  371. package/include/MemoryModel/SVFIR.h +0 -1
  372. package/include/SVF-FE/BasicTypes.h +6 -1
  373. package/include/SVF-FE/SVFIRBuilder.h +1 -0
  374. package/include/Util/BasicTypes.h +1 -9
  375. package/include/Util/Options.h +0 -3
  376. package/lib/MemoryModel/SVFIR.cpp +4 -28
  377. package/lib/SVF-FE/SVFIRBuilder.cpp +25 -2
  378. package/lib/Util/Options.cpp +0 -8
  379. package/lib/WPA/FlowSensitiveTBHC.cpp +1 -0
  380. package/lib/WPA/TypeAnalysis.cpp +1 -1
  381. package/lib/WPA/TypeBasedHeapCloning.cpp +1 -0
  382. package/package.json +1 -1
@@ -66,53 +66,51 @@ $(function() {
66
66
  <div class="title">TypeBasedHeapCloning.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="TypeBasedHeapCloning_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- TypeBasedHeapCloning.cpp -- Type filter/type-based heap cloning base ------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * TypeBasedHeapCloning.cpp</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * Created on: Feb 08, 2020</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * Author: Mohamad Barbar</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CPPUtil_8h.html">SVF-FE/CPPUtil.h</a>&quot;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="TypeBasedHeapCloning_8h.html">WPA/TypeBasedHeapCloning.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">TypeBasedHeapCloning::undefType</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a03ef2decb80ba07f4d98cae0a4497212">TypeBasedHeapCloning::derefFnName</a> = <span class="stringliteral">&quot;deref&quot;</span>;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ab1467e374b238b0f68d3fdd8f3ef6596">TypeBasedHeapCloning::mangledDerefFnName</a> = <span class="stringliteral">&quot;_Z5derefv&quot;</span>;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#af4d0abf53755a070478c142add3322d8"> 21</a></span>&#160;<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af4d0abf53755a070478c142add3322d8">TypeBasedHeapCloning::TypeBasedHeapCloning</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a> *pta)</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; this-&gt;pta = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#aaaf50870e50b45b44d4ecaaaab662770"> 26</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aaaf50870e50b45b44d4ecaaaab662770">TypeBasedHeapCloning::setDCHG</a>(<a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a> *<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>)</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; this-&gt;dchg = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a0890235fa3725c23435ea3245c52c038"> 31</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0890235fa3725c23435ea3245c52c038">TypeBasedHeapCloning::setPAG</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a> *pag)</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a> = pag;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;}</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a59a9c7b8a7ec392ac609f10c8dac8d7f"> 36</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a59a9c7b8a7ec392ac609f10c8dac8d7f">TypeBasedHeapCloning::isBlkObjOrConstantObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o)<span class="keyword"> const</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#abce2ba326af69312c5971246cc4c10dc">isClone</a>(o)) o = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#accbf71007be662ee2436ca3d76b903ed">cloneToOriginalObj</a>.at(o);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> SVFUtil::isa&lt;ObjVar&gt;(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(o)) &amp;&amp; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ad9895f2d075eb402390e3b01ed68e001">isBlkObjOrConstantObj</a>(o);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;}</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638"> 42</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638">TypeBasedHeapCloning::isBase</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *a, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *b)<span class="keyword"> const</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a> &amp;&amp; <span class="stringliteral">&quot;TBHC: DCHG not set!&quot;</span>);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#ab33f9af6ad22eb99dd0d9950fb0e50e6">isBase</a>(a, b, <span class="keyword">true</span>);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#abce2ba326af69312c5971246cc4c10dc"> 48</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#abce2ba326af69312c5971246cc4c10dc">TypeBasedHeapCloning::isClone</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o)<span class="keyword"> const</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#accbf71007be662ee2436ca3d76b903ed">cloneToOriginalObj</a>.find(o) != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#accbf71007be662ee2436ca3d76b903ed">cloneToOriginalObj</a>.end();</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;}</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ac51cd735739a2499196a87323172a6a6"> 53</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac51cd735739a2499196a87323172a6a6">TypeBasedHeapCloning::setType</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t)</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;{</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a477492fb699d742c33007a6ca934b5c1">objToType</a>.insert({o, t});</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;}</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de"> 58</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">TypeBasedHeapCloning::getType</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o)<span class="keyword"> const</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a477492fb699d742c33007a6ca934b5c1">objToType</a>.find(o) != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a477492fb699d742c33007a6ca934b5c1">objToType</a>.end() &amp;&amp; <span class="stringliteral">&quot;TBHC: object has no type?&quot;</span>);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a477492fb699d742c33007a6ca934b5c1">objToType</a>.at(o);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a006243a1416f4950de254d0d62ba40b0"> 64</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a006243a1416f4950de254d0d62ba40b0">TypeBasedHeapCloning::setAllocationSite</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> site)</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;{</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0a768e179a3a0c8c213ecca6f71a64c1">objToAllocation</a>.insert({o, site});</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;}</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a5681d78630ca8770dd493ef3841ec683"> 69</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a5681d78630ca8770dd493ef3841ec683">TypeBasedHeapCloning::getAllocationSite</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o)<span class="keyword"> const</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0a768e179a3a0c8c213ecca6f71a64c1">objToAllocation</a>.find(o) != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0a768e179a3a0c8c213ecca6f71a64c1">objToAllocation</a>.end() &amp;&amp; <span class="stringliteral">&quot;TBHC: object has no allocation site?&quot;</span>);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0a768e179a3a0c8c213ecca6f71a64c1">objToAllocation</a>.at(o);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;}</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ad1c67da3aac128ca8a69907fdad53fcd"> 75</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad1c67da3aac128ca8a69907fdad53fcd">TypeBasedHeapCloning::getObjsWithClones</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;{</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> objs;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">for</span> (std::pair&lt;NodeID, NodeBS&gt; oc : <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a36d5f03d899dd21392c327115ff2f9d9">objToClones</a>)</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; objs.set(oc.first);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">return</span> objs;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ae83ef821386b3fd4b86f29477cdda3e1"> 86</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae83ef821386b3fd4b86f29477cdda3e1">TypeBasedHeapCloning::addClone</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> c)</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a36d5f03d899dd21392c327115ff2f9d9">objToClones</a>[o].set(c);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#af127bed600087b1ace26088a76ca8998"> 91</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af127bed600087b1ace26088a76ca8998">TypeBasedHeapCloning::getClones</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o)</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;{</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a36d5f03d899dd21392c327115ff2f9d9">objToClones</a>[o];</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;}</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a14027d92c4f8e33d7487fe81acce6a85"> 96</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a14027d92c4f8e33d7487fe81acce6a85">TypeBasedHeapCloning::setOriginalObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> c, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o)</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;{</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#accbf71007be662ee2436ca3d76b903ed">cloneToOriginalObj</a>.insert({c, o});</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;}</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6"> 101</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">TypeBasedHeapCloning::getOriginalObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> c)<span class="keyword"> const</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#abce2ba326af69312c5971246cc4c10dc">isClone</a>(c))</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#accbf71007be662ee2436ca3d76b903ed">cloneToOriginalObj</a>.find(c) != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#accbf71007be662ee2436ca3d76b903ed">cloneToOriginalObj</a>.end()</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; &amp;&amp; <span class="stringliteral">&quot;TBHC: original object not set for clone?&quot;</span>);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#accbf71007be662ee2436ca3d76b903ed">cloneToOriginalObj</a>.at(c);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> c;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;}</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356"> 113</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">TypeBasedHeapCloning::getFilterSet</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> loc)</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;{</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a848e59ab22069367a97009f1fdebc4d9">locToFilterSet</a>[loc];</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;}</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ad07fb204258fccda89053514338e3804"> 118</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad07fb204258fccda89053514338e3804">TypeBasedHeapCloning::addGepToObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gep, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base, <span class="keywordtype">unsigned</span> offset)</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;{</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aa9977ed15f500848b23d4df7a44cd204">objToGeps</a>[base].set(gep);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *baseNode = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(base);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(baseNode &amp;&amp; <span class="stringliteral">&quot;TBHC: given bad base node?&quot;</span>);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a> *baseObj = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>&gt;(baseNode);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(baseObj &amp;&amp; <span class="stringliteral">&quot;TBHC: non-object given for base?&quot;</span>);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">// We can use the base or the gep mem. obj.; should be identical.</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a> *baseMemObj = baseObj-&gt;<a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>();</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aa9977ed15f500848b23d4df7a44cd204">objToGeps</a>[base].set(gep);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a882afb13844ed039d18d325e92819f77">memObjToGeps</a>[baseMemObj][offset].set(gep);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;}</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;</div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ad043ab95900849a5a894ca4bada4e032"> 132</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad043ab95900849a5a894ca4bada4e032">TypeBasedHeapCloning::getGepObjsFromMemObj</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a> *memObj, <span class="keywordtype">unsigned</span> offset)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;{</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a882afb13844ed039d18d325e92819f77">memObjToGeps</a>[memObj][offset];</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;}</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#afe416f9ec57923f34ef1db3890a3f9e1"> 137</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#afe416f9ec57923f34ef1db3890a3f9e1">TypeBasedHeapCloning::getGepObjs</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base)</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;{</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aa9977ed15f500848b23d4df7a44cd204">objToGeps</a>[base];</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;}</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#aa175b5db473eb57c03b6f908791d1133"> 142</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aa175b5db473eb57c03b6f908791d1133">TypeBasedHeapCloning::getGepObjClones</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base, <span class="keywordtype">unsigned</span> offset)</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;{</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a> &amp;&amp; <span class="stringliteral">&quot;TBHC: DCHG not set!&quot;</span>);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">// Set of GEP objects we will return.</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> geps;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *node = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(base);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(node &amp;&amp; <span class="stringliteral">&quot;TBHC: base object node does not exist.&quot;</span>);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a> *baseNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>&gt;(node);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(baseNode &amp;&amp; <span class="stringliteral">&quot;TBHC: base \&quot;object\&quot; node is not an object.&quot;</span>);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="comment">// totalOffset is the offset from the real base (i.e. base of base),</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">// offset is the offset into base, whether it is a field itself or not.</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> totalOffset = offset;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *baseGep = SVFUtil::dyn_cast&lt;GepObjVar&gt;(baseNode))</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; totalOffset += baseGep-&gt;getConstantFieldIdx();</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *baseType = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(base);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="comment">// First field? Just return the whole object; same thing.</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="comment">// For arrays, we want things to work as normal because an array *object* is more</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="comment">// like a pointer than a struct object.</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">if</span> (offset == 0 &amp;&amp; baseType-&gt;getTag() != dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="comment">// The base object is the 0 gep object.</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad07fb204258fccda89053514338e3804">addGepToObj</a>(base, base, 0);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; geps.set(base);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span> geps;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">if</span> (baseNode-&gt;<a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>()-&gt;<a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>())</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="comment">// If it&#39;s field-insensitive, the base represents everything.</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; geps.set(base);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">return</span> geps;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="comment">// Caching on offset would improve performance but it seems minimal.</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;gepObjs = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#afe416f9ec57923f34ef1db3890a3f9e1">getGepObjs</a>(base);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gep : gepObjs)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *node = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(gep);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(node &amp;&amp; <span class="stringliteral">&quot;TBHC: expected gep node doesn&#39;t exist.&quot;</span>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((SVFUtil::isa&lt;GepObjVar&gt;(node) || SVFUtil::isa&lt;FIObjVar&gt;(node))</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; &amp;&amp; <span class="stringliteral">&quot;TBHC: expected a GEP or FI object.&quot;</span>);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepNode = SVFUtil::dyn_cast&lt;GepObjVar&gt;(node))</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">if</span> (gepNode-&gt;getConstantFieldIdx() == totalOffset)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; geps.set(gep);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="comment">// Definitely a FIObj (asserted), but we don&#39;t want to add it if</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="comment">// the object is field-sensitive because in that case it actually</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="comment">// represents the 0th field, not the whole object.</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">if</span> (baseNode-&gt;<a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>()-&gt;<a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>())</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; {</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; geps.set(gep);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> (geps.empty())</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="comment">// No gep node has even be created, so create one.</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newGep;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> newLS;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="comment">// fldIdx is what is returned by getConstantFieldIdx.</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; newLS.<a class="code" href="classSVF_1_1LocationSet.html#abe990543374ebd8c1b3ee0d37c83eb8f">setFldIdx</a>(totalOffset);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#abce2ba326af69312c5971246cc4c10dc">isClone</a>(base))</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="comment">// Don&#39;t use ppag-&gt;getGepObjVar because base and it&#39;s original object</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="comment">// have the same memory object which is the key SVFIR uses.</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; newGep = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a16ad9c601a044731b982305a177dbda3">addCloneGepObjNode</a>(baseNode-&gt;<a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>(), newLS);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; {</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; newGep = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(base, newLS);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; }</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gep = SVFUtil::dyn_cast&lt;GepObjVar&gt;(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(newGep)))</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; gep-&gt;setBaseNode(base);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad07fb204258fccda89053514338e3804">addGepToObj</a>(newGep, base, totalOffset);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *newGepType = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">if</span> (baseType-&gt;getTag() == dwarf::DW_TAG_array_type || baseType-&gt;getTag() == dwarf::DW_TAG_pointer_type)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *arrayType = SVFUtil::dyn_cast&lt;DICompositeType&gt;(baseType))</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="comment">// Array access.</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; newGepType = arrayType-&gt;getBaseType();</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *ptrType = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(baseType))</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; {</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="comment">// Pointer access.</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; newGepType = ptrType-&gt;getBaseType();</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; }</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(newGepType &amp;&amp; <span class="stringliteral">&quot;TBHC: newGepType is neither DIComposite nor DIDerived&quot;</span>);</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// Get the canonical type because we got the type from the DIType infrastructure directly.</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; newGepType = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(newGepType);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; }</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="comment">// Must be a struct/class.</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="comment">// Don&#39;t use totalOffset because we&#39;re operating on the Gep object which is our parent</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// (i.e. field of some base, not the base itself).</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; newGepType = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#acaff636e6a9cf59363d6ee00435c04ff">getFieldType</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(base), offset);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; }</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac51cd735739a2499196a87323172a6a6">setType</a>(newGep, newGepType);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="comment">// We call the object created in the non-TBHC analysis the original object.</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a14027d92c4f8e33d7487fe81acce6a85">setOriginalObj</a>(newGep, <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(baseNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), offset));</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a006243a1416f4950de254d0d62ba40b0">setAllocationSite</a>(newGep, 0);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; geps.set(newGep);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; }</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">return</span> geps;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;}</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a34064efe336ada815b31050f683c7ce1"> 271</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a34064efe336ada815b31050f683c7ce1">TypeBasedHeapCloning::init</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> loc, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *tildet, <span class="keywordtype">bool</span> reuse, <span class="keywordtype">bool</span> gep)</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;{</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a> &amp;&amp; <span class="stringliteral">&quot;TBHC: DCHG not set!&quot;</span>);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;pPt = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(p);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="comment">// The points-to set we will populate in the loop to fill pPt.</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pNewPt;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;filterSet = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">getFilterSet</a>(loc);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pPt)</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; {</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="comment">// If it&#39;s been filtered before, it&#39;ll be filtered again.</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">if</span> (filterSet.<a class="code" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">test</a>(o)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *obj = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(o);</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj &amp;&amp; <span class="stringliteral">&quot;TBHC: pointee object does not exist in SVFIR?&quot;</span>);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *tp = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(o); <span class="comment">// tp is t&#39;</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="comment">// When an object is field-insensitive, we can&#39;t filter on any of the fields&#39; types.</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="comment">// i.e. a pointer of the field type can safely access an object of the base/struct</span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="comment">// type if that object is field-insensitive.</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordtype">bool</span> fieldInsensitive = <span class="keyword">false</span>;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; std::vector&lt;const DIType *&gt; fieldTypes;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a> *obj = SVFUtil::dyn_cast&lt;ObjVar&gt;(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(o)))</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; {</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; fieldInsensitive = obj-&gt;getMemObj()-&gt;isFieldInsensitive();</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">if</span> (tp != <span class="keyword">nullptr</span> &amp;&amp; (tp-&gt;getTag() == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; || tp-&gt;getTag() == dwarf::DW_TAG_class_type))</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; fieldTypes = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">getFieldTypes</a>(tp);</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; }</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const DIType *&gt;</a> &amp;aggs = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">isAgg</a>(tp)</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; ? <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#a159e158c794fff115d5642b85963f43b">getAggs</a>(tp) : <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const DIType *&gt;</a>();</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> prop;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordtype">bool</span> filter = <span class="keyword">false</span>;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">if</span> (tp == <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a>)</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; {</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="comment">// o is uninitialised.</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="comment">// GEP objects should never be uninitialised; type assigned at creation.</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a724cdfa6fbf6b2b401332ea83265c4c2">isGep</a>(obj) &amp;&amp; <span class="stringliteral">&quot;TBHC: GEP object is untyped!&quot;</span>);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; prop = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">cloneObject</a>(o, tildet, <span class="keyword">false</span>);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a4c658be1ade99ad1e848cd80332e38ce">numInit</a>;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a4d6fc7852fc4bfe1d7ba3c0b8602bc8a">numSGInit</a>;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fieldInsensitive &amp;&amp; tp &amp;&amp; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#af0534356b4a8c68507e1237f1d7a8c11">isFieldOf</a>(tildet, tp))</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; {</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="comment">// Field-insensitive object but the instruction is operating on a field.</span></div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; prop = o;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad971bec1a044bbb979b96b0d91278afd">numTBWU</a>;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#afca6afa06a1072e7a452ed42bcd666d3">numSGTBWU</a>;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; }</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (gep &amp;&amp; aggs.find(tildet) != aggs.end())</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; {</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="comment">// SVF treats two consecutive GEPs as children to the same load/store.</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="comment">// Special case for aggregates.</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="comment">// SVF will transform (for example)</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="comment">// `1: s = get struct element X from array a; 2: f = get field of struct Y from s;`</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="comment">// to `1: s = get struct element X from array a; 2: f = get field of struct Y from a;`</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="comment">// so we want the second instruction to be operating on an object of type</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="comment">// &#39;Struct S&#39;, not &#39;Array of S&#39;.</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; prop = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">cloneObject</a>(o, tildet, <span class="keyword">false</span>);</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a891a5873205bb98ad494a1c07231dc8a">numAgg</a>;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a28653c7757fc31c4b8c1b31ace17eb50">numSGAgg</a>;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638">isBase</a>(tp, tildet) &amp;&amp; tp != tildet</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; &amp;&amp; (reuse || <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#a2b2dbc52089696854a8339f2e83fc333">isFirstField</a>(tp, tildet) || (!reuse &amp;&amp; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o))))</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; {</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="comment">// Downcast.</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="comment">// One of three conditions:</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="comment">// - !reuse &amp;&amp; heap: because downcasts should not happen to stack/globals.</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="comment">// - isFirstField because ^ can happen because when we take the field of a</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="comment">// struct that is a struct, we get its first field, then it may downcast</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="comment">// back to the struct at another GEP.</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="comment">// TODO: this can probably be solved more cleanly.</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="comment">// - reuse: because it can happen to stack/heap objects.</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; prop = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">cloneObject</a>(o, tildet, reuse);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af5cf059dea30a0b422321e3a792ea447">numTBSSU</a>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a86a51362c35c4a67fc1d4af655504493">numSGTBSSU</a>;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; }</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638">isBase</a>(tildet, tp))</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">// Upcast.</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; prop = o;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad971bec1a044bbb979b96b0d91278afd">numTBWU</a>;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#afca6afa06a1072e7a452ed42bcd666d3">numSGTBWU</a>;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tildet != tp &amp;&amp; reuse)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="comment">// Reuse.</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; prop = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">cloneObject</a>(o, tildet, <span class="keyword">true</span>);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0b14eb60ddc73654bec24cd8142e447b">numReuse</a>;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac44c7746d774af420ff2bc5ce98f5add">numSGReuse</a>;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; }</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; {</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="comment">// Some spurious objects will be filtered.</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; filter = <span class="keyword">true</span>;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; prop = o;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ab3fa2223ad8d8b23d78aa02892f0be2c">numTBSU</a>;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a51d2baff54d05cba59fa270c32cce87c">numSGTBSU</a>;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">if</span> (prop != o)</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="comment">// If we cloned, we want to keep o in p&#39;s PTS but filter it (ignore it later).</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; pNewPt.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; filterSet.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="comment">// TODO: hack, sound but imprecise and unclean.</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="comment">// In the aggs case there is a difference between it being good for</span></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="comment">// arrays and structs. For now, just propagate both the clone and the original</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="comment">// object till a cleaner solution is found.</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">if</span> (gep &amp;&amp; aggs.find(tildet) != aggs.end())</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; filterSet.<a class="code" href="classSVF_1_1PointsTo.html#a1ef805e714cfc29f0f3fa56c5ee964f6">reset</a>(o);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; pNewPt.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(prop);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">if</span> (filter)</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; {</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; filterSet.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; }</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">if</span> (pPt != pNewPt)</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="comment">// Seems fast enough to perform in the naive way.</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#afdb10c2cce4935156566ea1c2daf9ea9">clearFullPts</a>(p);</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae7073c07bfd7912f888d54d4652c7cc2">unionPts</a>(p, pNewPt);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; }</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;}</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;</div><div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5"> 411</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">TypeBasedHeapCloning::cloneObject</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *type, <span class="keywordtype">bool</span>)</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;{</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> clone;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *obj = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(o);</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepObj = SVFUtil::dyn_cast&lt;GepObjVar&gt;(obj))</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; {</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;clones = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aa175b5db473eb57c03b6f908791d1133">getGepObjClones</a>(gepObj-&gt;getBaseNode(), gepObj-&gt;getConstantFieldIdx());</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="comment">// TODO: a bit of repetition.</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> clone : clones)</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; {</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(clone) == type)</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; {</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">return</span> clone;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; }</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; clone = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a16ad9c601a044731b982305a177dbda3">addCloneGepObjNode</a>(gepObj-&gt;getMemObj(), gepObj-&gt;getLocationSet());</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="comment">// The base needs to know about the new clone.</span></div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad07fb204258fccda89053514338e3804">addGepToObj</a>(clone, gepObj-&gt;getBaseNode(), gepObj-&gt;getConstantFieldIdx());</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae83ef821386b3fd4b86f29477cdda3e1">addClone</a>(o, clone);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae83ef821386b3fd4b86f29477cdda3e1">addClone</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(o), clone);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="comment">// The only instance of original object of a Gep object being retrieved is for</span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="comment">// IN sets and gepToSVFGRetriever in FSTBHC, so we don&#39;t care that clone comes</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="comment">// from o (we can get that by checking the base and offset).</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a14027d92c4f8e33d7487fe81acce6a85">setOriginalObj</a>(clone, <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(o));</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="classSVF_1_1CloneGepObjVar.html">CloneGepObjVar</a> *cloneGepObj = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1CloneGepObjVar.html">CloneGepObjVar</a>&gt;(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(clone));</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; cloneGepObj-&gt;<a class="code" href="classSVF_1_1GepObjVar.html#a5e371fae7592d763661a7cb777107ff4">setBaseNode</a>(gepObj-&gt;getBaseNode());</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;FIObjVar&gt;(obj) || SVFUtil::isa&lt;DummyObjVar&gt;(obj))</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; o = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(o);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="comment">// Check there isn&#39;t an appropriate clone already.</span></div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;clones = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af127bed600087b1ace26088a76ca8998">getClones</a>(o);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> clone : clones)</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; {</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(clone) == type)</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">return</span> clone;</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; }</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; }</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;</div><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="classSVF_1_1FIObjVar.html">FIObjVar</a> *fiObj = SVFUtil::dyn_cast&lt;FIObjVar&gt;(obj))</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; {</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; clone = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a83fb1e2a7b66d5f33fa34698a52250af">addCloneFIObjNode</a>(fiObj-&gt;getMemObj());</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; {</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1DummyObjVar.html">DummyObjVar</a> *dummyObj = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1DummyObjVar.html">DummyObjVar</a>&gt;(obj);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; clone = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac6ebb2fd24fc4272faf5db6ddd1e464b">addCloneDummyObjNode</a>(dummyObj-&gt;<a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>());</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="comment">// We checked above that it&#39;s an FIObj or a DummyObj.</span></div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="comment">// Tracking object&lt;-&gt;clone mappings.</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae83ef821386b3fd4b86f29477cdda3e1">addClone</a>(o, clone);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a14027d92c4f8e33d7487fe81acce6a85">setOriginalObj</a>(clone, o);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; }</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;FSTBHC: trying to clone unhandled object&quot;</span>);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; }</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="comment">// Clone&#39;s metadata. This can be shared between Geps/otherwise.</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac51cd735739a2499196a87323172a6a6">setType</a>(clone, type);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a006243a1416f4950de254d0d62ba40b0">setAllocationSite</a>(clone, <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a5681d78630ca8770dd493ef3841ec683">getAllocationSite</a>(o));</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a1d48cd7ccbcd9bdf1470a5d9aca3298d">backPropagate</a>(clone);</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">return</span> clone;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;}</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;</div><div class="line"><a name="l00483"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a21d2fd8bbef0c6f6ddddb5387569a7fa"> 483</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a21d2fd8bbef0c6f6ddddb5387569a7fa">TypeBasedHeapCloning::getRawCTirMetadata</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *v)</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;{</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(v != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;TBHC: trying to get metadata from nullptr!&quot;</span>);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *mdNode = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = SVFUtil::dyn_cast&lt;Instruction&gt;(v))</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; mdNode = inst-&gt;getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#a0cd5347bc8043d4306e66a4a96005ace">cppUtil::ctir::derefMDName</a>);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af157dc77830b6cc804338df7430cbbb3">GlobalObject</a> *go = SVFUtil::dyn_cast&lt;GlobalObject&gt;(v))</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; mdNode = go-&gt;getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#a0cd5347bc8043d4306e66a4a96005ace">cppUtil::ctir::derefMDName</a>);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; }</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="comment">// Will be nullptr if metadata isn&#39;t there.</span></div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordflow">return</span> mdNode;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;}</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;</div><div class="line"><a name="l00501"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ac6ebb2fd24fc4272faf5db6ddd1e464b"> 501</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac6ebb2fd24fc4272faf5db6ddd1e464b">TypeBasedHeapCloning::addCloneDummyObjNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a> *mem)</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;{</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()-&gt;<a class="code" href="classSVF_1_1NodeIDAllocator.html#a6ce6b40b8291c6378dda07d943d66e53">allocateObjectId</a>();</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(<span class="keyword">nullptr</span>, <span class="keyword">new</span> <a class="code" href="classSVF_1_1CloneDummyObjVar.html">CloneDummyObjVar</a>(<span class="keywordtype">id</span>, mem), <span class="keywordtype">id</span>);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;}</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;</div><div class="line"><a name="l00507"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a16ad9c601a044731b982305a177dbda3"> 507</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a16ad9c601a044731b982305a177dbda3">TypeBasedHeapCloning::addCloneGepObjNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a> *mem, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> &amp;l)</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;{</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()-&gt;<a class="code" href="classSVF_1_1NodeIDAllocator.html#a6ce6b40b8291c6378dda07d943d66e53">allocateObjectId</a>();</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(mem-&gt;<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>(), <span class="keyword">new</span> <a class="code" href="classSVF_1_1CloneGepObjVar.html">CloneGepObjVar</a>(mem, <span class="keywordtype">id</span>, l), id);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;}</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;</div><div class="line"><a name="l00513"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a83fb1e2a7b66d5f33fa34698a52250af"> 513</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a83fb1e2a7b66d5f33fa34698a52250af">TypeBasedHeapCloning::addCloneFIObjNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a> *mem)</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;{</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()-&gt;<a class="code" href="classSVF_1_1NodeIDAllocator.html#a6ce6b40b8291c6378dda07d943d66e53">allocateObjectId</a>();</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(mem-&gt;<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>(), <span class="keyword">new</span> <a class="code" href="classSVF_1_1CloneFIObjVar.html">CloneFIObjVar</a>(mem-&gt;<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>(), id, mem), <span class="keywordtype">id</span>);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;}</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;</div><div class="line"><a name="l00519"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ac4565775cced4444ba007e310c4a02d8"> 519</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac4565775cced4444ba007e310c4a02d8">TypeBasedHeapCloning::getTypeFromCTirMetadata</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *v)</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;{</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(v != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;TBHC: trying to get type from nullptr!&quot;</span>);</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *mdNode = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a21d2fd8bbef0c6f6ddddb5387569a7fa">getRawCTirMetadata</a>(v);</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">if</span> (mdNode == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; {</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *type = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a>&gt;(mdNode);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">if</span> (type == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;TBHC: bad ctir metadata type\n&quot;</span>;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; }</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type);</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;}</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a724cdfa6fbf6b2b401332ea83265c4c2"> 539</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a724cdfa6fbf6b2b401332ea83265c4c2">TypeBasedHeapCloning::isGep</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *n)<span class="keyword"> const</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(n != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;TBHC: testing if null is a GEP object!&quot;</span>);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">return</span> SVFUtil::isa&lt;GepObjVar&gt;(n);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;}</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;</div><div class="line"><a name="l00546"></a><span class="lineno"><a class="line" href="TypeBasedHeapCloning_8cpp.html#a2be9728908f88e4e16b1e6218801fa06"> 546</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="TypeBasedHeapCloning_8cpp.html#a2be9728908f88e4e16b1e6218801fa06">isAliasTestFunction</a>(std::string name)</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;{</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">return</span> name == <a class="code" href="classSVF_1_1PointerAnalysis.html#a7648a0358e2c0798db1c547ec7aa7c64">PointerAnalysis::aliasTestMayAlias</a></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#a13ce6b930a35877f17bffd4b89e22654">PointerAnalysis::aliasTestMayAliasMangled</a></div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#ac353221cc7aced590dcf3550a24b1570">PointerAnalysis::aliasTestNoAlias</a></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0e68883e2ee328315af29e59bb2008cd">PointerAnalysis::aliasTestNoAliasMangled</a></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#a83b0a51d88fa7aadff6e9267765d07a5">PointerAnalysis::aliasTestPartialAlias</a></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#acbb517523fd30708ed1a93f306cd3545">PointerAnalysis::aliasTestPartialAliasMangled</a></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#a7477a4301d548b93958e57df389cbba0">PointerAnalysis::aliasTestMustAlias</a></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#aec884481726cfaf19c4ab8ec8d9195b7">PointerAnalysis::aliasTestMustAliasMangled</a></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#a32c6f12ce8bc0554dbb6aafa36f9a235">PointerAnalysis::aliasTestFailMayAlias</a></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#a651cc82379c2d18cc2f69f25b2ae08db">PointerAnalysis::aliasTestFailMayAliasMangled</a></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#a18347e41bc66b16e3f42c7c52811ad42">PointerAnalysis::aliasTestFailNoAlias</a></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#aefd4e9ea66da5ad84a45efead823eb22">PointerAnalysis::aliasTestFailNoAliasMangled</a>;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;}</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;</div><div class="line"><a name="l00562"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ae42ec334a7dfc96a5ead2d2845ca3b22"> 562</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae42ec334a7dfc96a5ead2d2845ca3b22">TypeBasedHeapCloning::validateTBHCTests</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>*)</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;{</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a> *llvmModuleSet = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>();</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; llvmModuleSet-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFIR.html#a2b237e55fd8d7fd61eb3ac6968e4a76e">SVFIR::CallSiteSet</a> &amp;callSites = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa530e33657f68fc2e8eae9435ce430cb">getCallSiteSet</a>();</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *cbn : callSites)</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> &amp;cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cbn-&gt;getCallSite());</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fn = cs.<a class="code" href="classSVF_1_1CallSite.html#ae9b0172e29199f2a938d7cf9e42241cf">getCalledFunction</a>();</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">if</span> (fn == <span class="keyword">nullptr</span> || !<a class="code" href="TypeBasedHeapCloning_8cpp.html#a2be9728908f88e4e16b1e6218801fa06">isAliasTestFunction</a>(fn-&gt;getName().str()))</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; {</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; }</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="comment">// We have a test call,</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="comment">// We want the store which stores to the pointer in question (i.e. operand of the</span></div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="comment">// store is the pointer, and the store itself is the dereference).</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> *ps = <span class="keyword">nullptr</span>, *qs = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="comment">// Check: currInst is a deref call, so p/q is prevInst.</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="comment">// Find p.</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *prevInst = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *currInst = cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>();</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">do</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a> *ci = SVFUtil::dyn_cast&lt;CallInst&gt;(currInst))</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; {</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; std::string calledFnName = ci-&gt;getCalledFunction()-&gt;getName().str();</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordflow">if</span> (calledFnName == <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a03ef2decb80ba07f4d98cae0a4497212">derefFnName</a> || calledFnName == <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ab1467e374b238b0f68d3fdd8f3ef6596">mangledDerefFnName</a>)</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; {</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> *si = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a>&gt;(prevInst);</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(si &amp;&amp; <span class="stringliteral">&quot;TBHC: validation macro not producing stores?&quot;</span>);</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; ps = si;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; }</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; prevInst = currInst;</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; currInst = currInst-&gt;getNextNonDebugInstruction();</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; }</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordflow">while</span> (currInst != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="comment">// Repeat for q.</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">while</span> (currInst != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; {</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="comment">// while loop, not do-while, because we need to the next instruction (current</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">// instruction is the first deref()).</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; prevInst = currInst;</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; currInst = currInst-&gt;getNextNonDebugInstruction();</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a> *ci = SVFUtil::dyn_cast&lt;CallInst&gt;(currInst))</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; {</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; std::string calledFnName = ci-&gt;getCalledFunction()-&gt;getName().str();</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="keywordflow">if</span> (calledFnName == <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a03ef2decb80ba07f4d98cae0a4497212">derefFnName</a> || calledFnName == <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ab1467e374b238b0f68d3fdd8f3ef6596">mangledDerefFnName</a>)</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; {</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> *si = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a>&gt;(prevInst);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(si &amp;&amp; <span class="stringliteral">&quot;TBHC: validation macro not producing stores?&quot;</span>);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; qs = si;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; }</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; }</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; }</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(ps != <span class="keyword">nullptr</span> &amp;&amp; qs != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;TBHC: malformed alias test?&quot;</span>);</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(ps-&gt;getPointerOperand()),</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; q = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(qs-&gt;getPointerOperand());</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *pt = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac4565775cced4444ba007e310c4a02d8">getTypeFromCTirMetadata</a>(ps), *qt = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac4565775cced4444ba007e310c4a02d8">getTypeFromCTirMetadata</a>(qs);</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="comment">// Now filter both points-to sets according to the type of the value.</span></div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;pPts = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(p), &amp;qPts = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(q);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pPtsFiltered, qPtsFiltered;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pPts)</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; {</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(o) != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a> &amp;&amp; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638">isBase</a>(pt, <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(o)))</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; {</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; pPtsFiltered.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; }</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; }</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : qPts)</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; {</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(o) != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a> &amp;&amp; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638">isBase</a>(qt, <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(o)))</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; {</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; qPtsFiltered.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; }</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; }</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a> *bvpta = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>&gt;(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(bvpta &amp;&amp; <span class="stringliteral">&quot;TBHC: need a BVDataPTAImpl for TBHC alias testing.&quot;</span>);</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">AliasResult</a> res = bvpta-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df">alias</a>(pPtsFiltered, qPtsFiltered);</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordtype">bool</span> passed = <span class="keyword">false</span>;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; std::string testName = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">if</span> (fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a7648a0358e2c0798db1c547ec7aa7c64">PointerAnalysis::aliasTestMayAlias</a></div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; || fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a13ce6b930a35877f17bffd4b89e22654">PointerAnalysis::aliasTestMayAliasMangled</a>)</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; {</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; passed = res == <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">AliasResult::MayAlias</a> || res == <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943ab58a0391f037031a51016ebfe2a752b2">AliasResult::MustAlias</a>;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; testName = <a class="code" href="classSVF_1_1PointerAnalysis.html#a7648a0358e2c0798db1c547ec7aa7c64">PointerAnalysis::aliasTestMayAlias</a>;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; }</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#ac353221cc7aced590dcf3550a24b1570">PointerAnalysis::aliasTestNoAlias</a></div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; || fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0e68883e2ee328315af29e59bb2008cd">PointerAnalysis::aliasTestNoAliasMangled</a>)</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; {</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; passed = res == <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239">AliasResult::NoAlias</a>;</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; testName = <a class="code" href="classSVF_1_1PointerAnalysis.html#ac353221cc7aced590dcf3550a24b1570">PointerAnalysis::aliasTestNoAlias</a>;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; }</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a7477a4301d548b93958e57df389cbba0">PointerAnalysis::aliasTestMustAlias</a></div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; || fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#aec884481726cfaf19c4ab8ec8d9195b7">PointerAnalysis::aliasTestMustAliasMangled</a>)</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; {</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; passed = res == <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943ab58a0391f037031a51016ebfe2a752b2">AliasResult::MustAlias</a> || res == <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">AliasResult::MayAlias</a>;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; testName = <a class="code" href="classSVF_1_1PointerAnalysis.html#a7477a4301d548b93958e57df389cbba0">PointerAnalysis::aliasTestMustAlias</a>;</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a83b0a51d88fa7aadff6e9267765d07a5">PointerAnalysis::aliasTestPartialAlias</a></div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; || fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#acbb517523fd30708ed1a93f306cd3545">PointerAnalysis::aliasTestPartialAliasMangled</a>)</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; {</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; passed = res == <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">AliasResult::MayAlias</a> || res == <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aa03eb20fd81629154d6c346763ea64d6">AliasResult::PartialAlias</a>;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; testName = <a class="code" href="classSVF_1_1PointerAnalysis.html#a83b0a51d88fa7aadff6e9267765d07a5">PointerAnalysis::aliasTestPartialAlias</a>;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; }</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a32c6f12ce8bc0554dbb6aafa36f9a235">PointerAnalysis::aliasTestFailMayAlias</a></div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; || fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a651cc82379c2d18cc2f69f25b2ae08db">PointerAnalysis::aliasTestFailMayAliasMangled</a>)</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; passed = res != <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">AliasResult::MayAlias</a> &amp;&amp; res != <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943ab58a0391f037031a51016ebfe2a752b2">AliasResult::MustAlias</a> &amp;&amp; res != <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aa03eb20fd81629154d6c346763ea64d6">AliasResult::PartialAlias</a>;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; testName = <a class="code" href="classSVF_1_1PointerAnalysis.html#a32c6f12ce8bc0554dbb6aafa36f9a235">PointerAnalysis::aliasTestFailMayAlias</a>;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; }</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a18347e41bc66b16e3f42c7c52811ad42">PointerAnalysis::aliasTestFailNoAlias</a></div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; || fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#aefd4e9ea66da5ad84a45efead823eb22">PointerAnalysis::aliasTestFailNoAliasMangled</a>)</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; {</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; passed = res != <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239">AliasResult::NoAlias</a>;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; testName = <a class="code" href="classSVF_1_1PointerAnalysis.html#a18347e41bc66b16e3f42c7c52811ad42">PointerAnalysis::aliasTestFailNoAlias</a>;</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; }</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;[&quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#aed4e5066f6ddef83afaf60adbcc11de0">PTAName</a>() &lt;&lt; <span class="stringliteral">&quot;] Checking &quot;</span> &lt;&lt; testName &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <a class="code" href="namespaceSVF.html#a8bd74fdcb0e58d0249003df9c3fb8b31">OutStream</a> &amp;msgStream = passed ? <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() : <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>();</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; msgStream &lt;&lt; (passed ? <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6a55f1f8598998a3ffbbc67d32eaf8c4">SVFUtil::sucMsg</a>(<span class="stringliteral">&quot;\t SUCCESS&quot;</span>) : <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5d4bb92f5df30417f414397f8e58cf01">SVFUtil::errMsg</a>(<span class="stringliteral">&quot;\t FAILURE&quot;</span>))</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; &lt;&lt; <span class="stringliteral">&quot; : &quot;</span> &lt;&lt; testName</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; &lt;&lt; <span class="stringliteral">&quot; check &lt;id:&quot;</span> &lt;&lt; p &lt;&lt; <span class="stringliteral">&quot;, id:&quot;</span> &lt;&lt; q &lt;&lt; <span class="stringliteral">&quot;&gt; &quot;</span></div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; &lt;&lt; <span class="stringliteral">&quot;at (&quot;</span> &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">SVFUtil::getSourceLoc</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>()) &lt;&lt; <span class="stringliteral">&quot;)\n&quot;</span>;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keywordflow">if</span> (!passed)</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;test case failed!&quot;</span>);</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160;</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keywordflow">if</span> (pPtsFiltered.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; {</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; msgStream &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6c06020737f7dff22a666b75c28c5e7d">SVFUtil::wrnMsg</a>(<span class="stringliteral">&quot;\t WARNING&quot;</span>)</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; &lt;&lt; <span class="stringliteral">&quot; : pts(&quot;</span> &lt;&lt; p &lt;&lt; <span class="stringliteral">&quot;) is empty\n&quot;</span>;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">if</span> (qPtsFiltered.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; {</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; msgStream &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6c06020737f7dff22a666b75c28c5e7d">SVFUtil::wrnMsg</a>(<span class="stringliteral">&quot;\t WARNING&quot;</span>)</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; &lt;&lt; <span class="stringliteral">&quot; : pts(&quot;</span> &lt;&lt; q &lt;&lt; <span class="stringliteral">&quot;) is empty\n&quot;</span>;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; }</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160;</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keywordflow">if</span> (testName == <a class="code" href="classSVF_1_1PointerAnalysis.html#a7477a4301d548b93958e57df389cbba0">PointerAnalysis::aliasTestMustAlias</a>)</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; {</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; msgStream &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6c06020737f7dff22a666b75c28c5e7d">SVFUtil::wrnMsg</a>(<span class="stringliteral">&quot;\t WARNING&quot;</span>)</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; &lt;&lt; <span class="stringliteral">&quot; : MUSTALIAS tests are actually MAYALIAS tests\n&quot;</span>;</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; }</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keywordflow">if</span> (testName == <a class="code" href="classSVF_1_1PointerAnalysis.html#a83b0a51d88fa7aadff6e9267765d07a5">PointerAnalysis::aliasTestPartialAlias</a>)</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; {</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; msgStream &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6c06020737f7dff22a666b75c28c5e7d">SVFUtil::wrnMsg</a>(<span class="stringliteral">&quot;\t WARNING&quot;</span>)</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; &lt;&lt; <span class="stringliteral">&quot; : PARTIALALIAS tests are actually MAYALIAS tests\n&quot;</span>;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; }</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160;</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; msgStream.flush();</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; }</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; }</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;}</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;</div><div class="line"><a name="l00731"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a1a7b51e7d959795c00383721b013834d"> 731</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a1a7b51e7d959795c00383721b013834d">TypeBasedHeapCloning::dumpStats</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160;{</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; std::string <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a> = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;@@@@@@@@@ TBHC STATISTICS @@@@@@@@@\n&quot;</span>;</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; indent = <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160;</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="comment">// Print clones with their types.</span></div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;=== Original objects to clones ===\n&quot;</span>;</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; indent = <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keywordtype">unsigned</span> totalClones = 0;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> objs = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad1c67da3aac128ca8a69907fdad53fcd">getObjsWithClones</a>();</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : objs)</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; {</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;clones = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af127bed600087b1ace26088a76ca8998">getClones</a>(o);</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">if</span> (clones.count() == 0) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; totalClones += clones.count();</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; o &lt;&lt; <span class="stringliteral">&quot; : &quot;</span></div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; clones.count() &lt;&lt; <span class="stringliteral">&quot;)&quot;</span></div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; &lt;&lt; <span class="stringliteral">&quot;[ &quot;</span>;</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="keywordtype">bool</span> first = <span class="keyword">true</span>;</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> c : clones)</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; {</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="keywordflow">if</span> (!first)</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; {</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; }</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160;</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; c</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; &lt;&lt; <span class="stringliteral">&quot;{&quot;</span></div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(c))</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; &lt;&lt; <span class="stringliteral">&quot;}&quot;</span>;</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; first = <span class="keyword">false</span>;</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; }</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot; ]\n&quot;</span>;</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; }</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; indent = <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Total: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a82528aff779ccf8f723f57507dd2d991">getObjectNodeNum</a>() + <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a3bbaafd80dfcae6ccc82c3d8b9d303ea">getFieldObjNodeNum</a>() + totalClones</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; &lt;&lt; <span class="stringliteral">&quot; (&quot;</span> &lt;&lt; totalClones &lt;&lt; <span class="stringliteral">&quot; clones)\n&quot;</span>;</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;==================================\n&quot;</span>;</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160;</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;INITIALISE : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a4c658be1ade99ad1e848cd80332e38ce">numInit</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;TBWU : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad971bec1a044bbb979b96b0d91278afd">numTBWU</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;TBSSU : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af5cf059dea30a0b422321e3a792ea447">numTBSSU</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;TBSU : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ab3fa2223ad8d8b23d78aa02892f0be2c">numTBSU</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;REUSE : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0b14eb60ddc73654bec24cd8142e447b">numReuse</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;AGG CASE : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a891a5873205bb98ad494a1c07231dc8a">numAgg</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;STACK/GLOBAL OBJECTS\n&quot;</span>;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; indent = <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;INITIALISE : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a4d6fc7852fc4bfe1d7ba3c0b8602bc8a">numSGInit</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;TBWU : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#afca6afa06a1072e7a452ed42bcd666d3">numSGTBWU</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;TBSSU : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a86a51362c35c4a67fc1d4af655504493">numSGTBSSU</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;TBSU : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a51d2baff54d05cba59fa270c32cce87c">numSGTBSU</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;REUSE : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac44c7746d774af420ff2bc5ce98f5add">numSGReuse</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;AGG CASE : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a28653c7757fc31c4b8c1b31ace17eb50">numSGAgg</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160;</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n&quot;</span>;</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;}</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html">SVF::BVDataPTAImpl</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00042">PointerAnalysisImpl.h:42</a></div></div>
70
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a14027d92c4f8e33d7487fe81acce6a85"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a14027d92c4f8e33d7487fe81acce6a85">SVF::TypeBasedHeapCloning::setOriginalObj</a></div><div class="ttdeci">void setOriginalObj(NodeID c, NodeID o)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00096">TypeBasedHeapCloning.cpp:96</a></div></div>
69
+ <a href="TypeBasedHeapCloning_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- TypeBasedHeapCloning.cpp -- Type filter/type-based heap cloning base ------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * TypeBasedHeapCloning.cpp</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * Created on: Feb 08, 2020</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * Author: Mohamad Barbar</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CPPUtil_8h.html">SVF-FE/CPPUtil.h</a>&quot;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVF-FE_2BasicTypes_8h.html">SVF-FE/BasicTypes.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="TypeBasedHeapCloning_8h.html">WPA/TypeBasedHeapCloning.h</a>&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>&quot;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">TypeBasedHeapCloning::undefType</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a03ef2decb80ba07f4d98cae0a4497212">TypeBasedHeapCloning::derefFnName</a> = <span class="stringliteral">&quot;deref&quot;</span>;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ab1467e374b238b0f68d3fdd8f3ef6596">TypeBasedHeapCloning::mangledDerefFnName</a> = <span class="stringliteral">&quot;_Z5derefv&quot;</span>;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#af4d0abf53755a070478c142add3322d8"> 22</a></span>&#160;<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af4d0abf53755a070478c142add3322d8">TypeBasedHeapCloning::TypeBasedHeapCloning</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a> *pta)</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; this-&gt;pta = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#aaaf50870e50b45b44d4ecaaaab662770"> 27</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aaaf50870e50b45b44d4ecaaaab662770">TypeBasedHeapCloning::setDCHG</a>(<a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a> *<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; this-&gt;dchg = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a0890235fa3725c23435ea3245c52c038"> 32</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0890235fa3725c23435ea3245c52c038">TypeBasedHeapCloning::setPAG</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a> *pag)</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;{</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a> = pag;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;}</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a59a9c7b8a7ec392ac609f10c8dac8d7f"> 37</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a59a9c7b8a7ec392ac609f10c8dac8d7f">TypeBasedHeapCloning::isBlkObjOrConstantObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o)<span class="keyword"> const</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#abce2ba326af69312c5971246cc4c10dc">isClone</a>(o)) o = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#accbf71007be662ee2436ca3d76b903ed">cloneToOriginalObj</a>.at(o);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">return</span> SVFUtil::isa&lt;ObjVar&gt;(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(o)) &amp;&amp; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ad9895f2d075eb402390e3b01ed68e001">isBlkObjOrConstantObj</a>(o);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;}</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638"> 43</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638">TypeBasedHeapCloning::isBase</a>(<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *a, <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *b)<span class="keyword"> const</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a> &amp;&amp; <span class="stringliteral">&quot;TBHC: DCHG not set!&quot;</span>);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#ab33f9af6ad22eb99dd0d9950fb0e50e6">isBase</a>(a, b, <span class="keyword">true</span>);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#abce2ba326af69312c5971246cc4c10dc"> 49</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#abce2ba326af69312c5971246cc4c10dc">TypeBasedHeapCloning::isClone</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o)<span class="keyword"> const</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#accbf71007be662ee2436ca3d76b903ed">cloneToOriginalObj</a>.find(o) != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#accbf71007be662ee2436ca3d76b903ed">cloneToOriginalObj</a>.end();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ac51cd735739a2499196a87323172a6a6"> 54</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac51cd735739a2499196a87323172a6a6">TypeBasedHeapCloning::setType</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o, <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;{</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a477492fb699d742c33007a6ca934b5c1">objToType</a>.insert({o, t});</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;}</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de"> 59</a></span>&#160;<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">TypeBasedHeapCloning::getType</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o)<span class="keyword"> const</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a477492fb699d742c33007a6ca934b5c1">objToType</a>.find(o) != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a477492fb699d742c33007a6ca934b5c1">objToType</a>.end() &amp;&amp; <span class="stringliteral">&quot;TBHC: object has no type?&quot;</span>);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a477492fb699d742c33007a6ca934b5c1">objToType</a>.at(o);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a006243a1416f4950de254d0d62ba40b0"> 65</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a006243a1416f4950de254d0d62ba40b0">TypeBasedHeapCloning::setAllocationSite</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> site)</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;{</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0a768e179a3a0c8c213ecca6f71a64c1">objToAllocation</a>.insert({o, site});</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;}</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a5681d78630ca8770dd493ef3841ec683"> 70</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a5681d78630ca8770dd493ef3841ec683">TypeBasedHeapCloning::getAllocationSite</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o)<span class="keyword"> const</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0a768e179a3a0c8c213ecca6f71a64c1">objToAllocation</a>.find(o) != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0a768e179a3a0c8c213ecca6f71a64c1">objToAllocation</a>.end() &amp;&amp; <span class="stringliteral">&quot;TBHC: object has no allocation site?&quot;</span>);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0a768e179a3a0c8c213ecca6f71a64c1">objToAllocation</a>.at(o);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;}</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ad1c67da3aac128ca8a69907fdad53fcd"> 76</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad1c67da3aac128ca8a69907fdad53fcd">TypeBasedHeapCloning::getObjsWithClones</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;{</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> objs;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">for</span> (std::pair&lt;NodeID, NodeBS&gt; oc : <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a36d5f03d899dd21392c327115ff2f9d9">objToClones</a>)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; objs.set(oc.first);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">return</span> objs;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;}</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ae83ef821386b3fd4b86f29477cdda3e1"> 87</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae83ef821386b3fd4b86f29477cdda3e1">TypeBasedHeapCloning::addClone</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> c)</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;{</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a36d5f03d899dd21392c327115ff2f9d9">objToClones</a>[o].set(c);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;}</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#af127bed600087b1ace26088a76ca8998"> 92</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af127bed600087b1ace26088a76ca8998">TypeBasedHeapCloning::getClones</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o)</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;{</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a36d5f03d899dd21392c327115ff2f9d9">objToClones</a>[o];</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;}</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a14027d92c4f8e33d7487fe81acce6a85"> 97</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a14027d92c4f8e33d7487fe81acce6a85">TypeBasedHeapCloning::setOriginalObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> c, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;{</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#accbf71007be662ee2436ca3d76b903ed">cloneToOriginalObj</a>.insert({c, o});</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;}</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6"> 102</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">TypeBasedHeapCloning::getOriginalObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> c)<span class="keyword"> const</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#abce2ba326af69312c5971246cc4c10dc">isClone</a>(c))</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#accbf71007be662ee2436ca3d76b903ed">cloneToOriginalObj</a>.find(c) != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#accbf71007be662ee2436ca3d76b903ed">cloneToOriginalObj</a>.end()</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; &amp;&amp; <span class="stringliteral">&quot;TBHC: original object not set for clone?&quot;</span>);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#accbf71007be662ee2436ca3d76b903ed">cloneToOriginalObj</a>.at(c);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">return</span> c;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;}</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356"> 114</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">TypeBasedHeapCloning::getFilterSet</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> loc)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;{</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a848e59ab22069367a97009f1fdebc4d9">locToFilterSet</a>[loc];</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;}</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ad07fb204258fccda89053514338e3804"> 119</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad07fb204258fccda89053514338e3804">TypeBasedHeapCloning::addGepToObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gep, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base, <span class="keywordtype">unsigned</span> offset)</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;{</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aa9977ed15f500848b23d4df7a44cd204">objToGeps</a>[base].set(gep);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *baseNode = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(base);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(baseNode &amp;&amp; <span class="stringliteral">&quot;TBHC: given bad base node?&quot;</span>);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a> *baseObj = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>&gt;(baseNode);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(baseObj &amp;&amp; <span class="stringliteral">&quot;TBHC: non-object given for base?&quot;</span>);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">// We can use the base or the gep mem. obj.; should be identical.</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a> *baseMemObj = baseObj-&gt;<a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aa9977ed15f500848b23d4df7a44cd204">objToGeps</a>[base].set(gep);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a882afb13844ed039d18d325e92819f77">memObjToGeps</a>[baseMemObj][offset].set(gep);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;}</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ad043ab95900849a5a894ca4bada4e032"> 133</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad043ab95900849a5a894ca4bada4e032">TypeBasedHeapCloning::getGepObjsFromMemObj</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a> *memObj, <span class="keywordtype">unsigned</span> offset)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;{</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a882afb13844ed039d18d325e92819f77">memObjToGeps</a>[memObj][offset];</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;}</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#afe416f9ec57923f34ef1db3890a3f9e1"> 138</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#afe416f9ec57923f34ef1db3890a3f9e1">TypeBasedHeapCloning::getGepObjs</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base)</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;{</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aa9977ed15f500848b23d4df7a44cd204">objToGeps</a>[base];</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;}</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#aa175b5db473eb57c03b6f908791d1133"> 143</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aa175b5db473eb57c03b6f908791d1133">TypeBasedHeapCloning::getGepObjClones</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base, <span class="keywordtype">unsigned</span> offset)</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;{</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a> &amp;&amp; <span class="stringliteral">&quot;TBHC: DCHG not set!&quot;</span>);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">// Set of GEP objects we will return.</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> geps;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *node = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(base);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(node &amp;&amp; <span class="stringliteral">&quot;TBHC: base object node does not exist.&quot;</span>);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a> *baseNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>&gt;(node);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(baseNode &amp;&amp; <span class="stringliteral">&quot;TBHC: base \&quot;object\&quot; node is not an object.&quot;</span>);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">// totalOffset is the offset from the real base (i.e. base of base),</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="comment">// offset is the offset into base, whether it is a field itself or not.</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> totalOffset = offset;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *baseGep = SVFUtil::dyn_cast&lt;GepObjVar&gt;(baseNode))</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; totalOffset += baseGep-&gt;getConstantFieldIdx();</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *baseType = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(base);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="comment">// First field? Just return the whole object; same thing.</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="comment">// For arrays, we want things to work as normal because an array *object* is more</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="comment">// like a pointer than a struct object.</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">if</span> (offset == 0 &amp;&amp; baseType-&gt;getTag() != dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; {</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="comment">// The base object is the 0 gep object.</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad07fb204258fccda89053514338e3804">addGepToObj</a>(base, base, 0);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; geps.set(base);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">return</span> geps;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">if</span> (baseNode-&gt;<a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>()-&gt;<a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>())</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; {</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="comment">// If it&#39;s field-insensitive, the base represents everything.</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; geps.set(base);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">return</span> geps;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; }</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="comment">// Caching on offset would improve performance but it seems minimal.</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;gepObjs = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#afe416f9ec57923f34ef1db3890a3f9e1">getGepObjs</a>(base);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gep : gepObjs)</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *node = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(gep);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(node &amp;&amp; <span class="stringliteral">&quot;TBHC: expected gep node doesn&#39;t exist.&quot;</span>);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((SVFUtil::isa&lt;GepObjVar&gt;(node) || SVFUtil::isa&lt;FIObjVar&gt;(node))</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; &amp;&amp; <span class="stringliteral">&quot;TBHC: expected a GEP or FI object.&quot;</span>);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepNode = SVFUtil::dyn_cast&lt;GepObjVar&gt;(node))</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span> (gepNode-&gt;getConstantFieldIdx() == totalOffset)</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; geps.set(gep);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="comment">// Definitely a FIObj (asserted), but we don&#39;t want to add it if</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="comment">// the object is field-sensitive because in that case it actually</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="comment">// represents the 0th field, not the whole object.</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">if</span> (baseNode-&gt;<a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>()-&gt;<a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>())</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; {</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; geps.set(gep);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">if</span> (geps.empty())</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">// No gep node has even be created, so create one.</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newGep;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> newLS;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="comment">// fldIdx is what is returned by getConstantFieldIdx.</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; newLS.<a class="code" href="classSVF_1_1LocationSet.html#abe990543374ebd8c1b3ee0d37c83eb8f">setFldIdx</a>(totalOffset);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#abce2ba326af69312c5971246cc4c10dc">isClone</a>(base))</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="comment">// Don&#39;t use ppag-&gt;getGepObjVar because base and it&#39;s original object</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="comment">// have the same memory object which is the key SVFIR uses.</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; newGep = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a16ad9c601a044731b982305a177dbda3">addCloneGepObjNode</a>(baseNode-&gt;<a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>(), newLS);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; newGep = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(base, newLS);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gep = SVFUtil::dyn_cast&lt;GepObjVar&gt;(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(newGep)))</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; gep-&gt;setBaseNode(base);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; }</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad07fb204258fccda89053514338e3804">addGepToObj</a>(newGep, base, totalOffset);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *newGepType = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">if</span> (baseType-&gt;getTag() == dwarf::DW_TAG_array_type || baseType-&gt;getTag() == dwarf::DW_TAG_pointer_type)</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; {</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *arrayType = SVFUtil::dyn_cast&lt;DICompositeType&gt;(baseType))</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="comment">// Array access.</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; newGepType = arrayType-&gt;getBaseType();</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *ptrType = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(baseType))</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// Pointer access.</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; newGepType = ptrType-&gt;getBaseType();</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(newGepType &amp;&amp; <span class="stringliteral">&quot;TBHC: newGepType is neither DIComposite nor DIDerived&quot;</span>);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">// Get the canonical type because we got the type from the DIType infrastructure directly.</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; newGepType = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(newGepType);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; {</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="comment">// Must be a struct/class.</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// Don&#39;t use totalOffset because we&#39;re operating on the Gep object which is our parent</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// (i.e. field of some base, not the base itself).</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; newGepType = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#acaff636e6a9cf59363d6ee00435c04ff">getFieldType</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(base), offset);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; }</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac51cd735739a2499196a87323172a6a6">setType</a>(newGep, newGepType);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="comment">// We call the object created in the non-TBHC analysis the original object.</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a14027d92c4f8e33d7487fe81acce6a85">setOriginalObj</a>(newGep, <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(baseNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), offset));</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a006243a1416f4950de254d0d62ba40b0">setAllocationSite</a>(newGep, 0);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; geps.set(newGep);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">return</span> geps;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;}</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;</div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a34064efe336ada815b31050f683c7ce1"> 272</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a34064efe336ada815b31050f683c7ce1">TypeBasedHeapCloning::init</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> loc, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p, <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *tildet, <span class="keywordtype">bool</span> reuse, <span class="keywordtype">bool</span> gep)</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;{</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a> &amp;&amp; <span class="stringliteral">&quot;TBHC: DCHG not set!&quot;</span>);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;pPt = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(p);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="comment">// The points-to set we will populate in the loop to fill pPt.</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pNewPt;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;filterSet = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">getFilterSet</a>(loc);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pPt)</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; {</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="comment">// If it&#39;s been filtered before, it&#39;ll be filtered again.</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">if</span> (filterSet.<a class="code" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">test</a>(o)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *obj = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(o);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj &amp;&amp; <span class="stringliteral">&quot;TBHC: pointee object does not exist in SVFIR?&quot;</span>);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *tp = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(o); <span class="comment">// tp is t&#39;</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="comment">// When an object is field-insensitive, we can&#39;t filter on any of the fields&#39; types.</span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="comment">// i.e. a pointer of the field type can safely access an object of the base/struct</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="comment">// type if that object is field-insensitive.</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordtype">bool</span> fieldInsensitive = <span class="keyword">false</span>;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; std::vector&lt;const DIType *&gt; fieldTypes;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a> *obj = SVFUtil::dyn_cast&lt;ObjVar&gt;(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(o)))</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; fieldInsensitive = obj-&gt;getMemObj()-&gt;isFieldInsensitive();</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">if</span> (tp != <span class="keyword">nullptr</span> &amp;&amp; (tp-&gt;getTag() == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; || tp-&gt;getTag() == dwarf::DW_TAG_class_type))</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; fieldTypes = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">getFieldTypes</a>(tp);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const DIType *&gt;</a> &amp;aggs = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">isAgg</a>(tp)</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; ? <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#a159e158c794fff115d5642b85963f43b">getAggs</a>(tp) : <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const DIType *&gt;</a>();</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> prop;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordtype">bool</span> filter = <span class="keyword">false</span>;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">if</span> (tp == <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a>)</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="comment">// o is uninitialised.</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="comment">// GEP objects should never be uninitialised; type assigned at creation.</span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a724cdfa6fbf6b2b401332ea83265c4c2">isGep</a>(obj) &amp;&amp; <span class="stringliteral">&quot;TBHC: GEP object is untyped!&quot;</span>);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; prop = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">cloneObject</a>(o, tildet, <span class="keyword">false</span>);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a4c658be1ade99ad1e848cd80332e38ce">numInit</a>;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a4d6fc7852fc4bfe1d7ba3c0b8602bc8a">numSGInit</a>;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fieldInsensitive &amp;&amp; tp &amp;&amp; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#af0534356b4a8c68507e1237f1d7a8c11">isFieldOf</a>(tildet, tp))</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="comment">// Field-insensitive object but the instruction is operating on a field.</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; prop = o;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad971bec1a044bbb979b96b0d91278afd">numTBWU</a>;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#afca6afa06a1072e7a452ed42bcd666d3">numSGTBWU</a>;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; }</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (gep &amp;&amp; aggs.find(tildet) != aggs.end())</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; {</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="comment">// SVF treats two consecutive GEPs as children to the same load/store.</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="comment">// Special case for aggregates.</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="comment">// SVF will transform (for example)</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="comment">// `1: s = get struct element X from array a; 2: f = get field of struct Y from s;`</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="comment">// to `1: s = get struct element X from array a; 2: f = get field of struct Y from a;`</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="comment">// so we want the second instruction to be operating on an object of type</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="comment">// &#39;Struct S&#39;, not &#39;Array of S&#39;.</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; prop = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">cloneObject</a>(o, tildet, <span class="keyword">false</span>);</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a891a5873205bb98ad494a1c07231dc8a">numAgg</a>;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a28653c7757fc31c4b8c1b31ace17eb50">numSGAgg</a>;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638">isBase</a>(tp, tildet) &amp;&amp; tp != tildet</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; &amp;&amp; (reuse || <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#a2b2dbc52089696854a8339f2e83fc333">isFirstField</a>(tp, tildet) || (!reuse &amp;&amp; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o))))</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; {</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="comment">// Downcast.</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="comment">// One of three conditions:</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="comment">// - !reuse &amp;&amp; heap: because downcasts should not happen to stack/globals.</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="comment">// - isFirstField because ^ can happen because when we take the field of a</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="comment">// struct that is a struct, we get its first field, then it may downcast</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="comment">// back to the struct at another GEP.</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="comment">// TODO: this can probably be solved more cleanly.</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="comment">// - reuse: because it can happen to stack/heap objects.</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; prop = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">cloneObject</a>(o, tildet, reuse);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af5cf059dea30a0b422321e3a792ea447">numTBSSU</a>;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a86a51362c35c4a67fc1d4af655504493">numSGTBSSU</a>;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; }</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638">isBase</a>(tildet, tp))</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; {</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="comment">// Upcast.</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; prop = o;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad971bec1a044bbb979b96b0d91278afd">numTBWU</a>;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#afca6afa06a1072e7a452ed42bcd666d3">numSGTBWU</a>;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; }</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tildet != tp &amp;&amp; reuse)</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; {</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="comment">// Reuse.</span></div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; prop = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">cloneObject</a>(o, tildet, <span class="keyword">true</span>);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0b14eb60ddc73654bec24cd8142e447b">numReuse</a>;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac44c7746d774af420ff2bc5ce98f5add">numSGReuse</a>;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; }</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; {</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="comment">// Some spurious objects will be filtered.</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; filter = <span class="keyword">true</span>;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; prop = o;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ab3fa2223ad8d8b23d78aa02892f0be2c">numTBSU</a>;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a51d2baff54d05cba59fa270c32cce87c">numSGTBSU</a>;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">if</span> (prop != o)</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="comment">// If we cloned, we want to keep o in p&#39;s PTS but filter it (ignore it later).</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; pNewPt.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; filterSet.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="comment">// TODO: hack, sound but imprecise and unclean.</span></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="comment">// In the aggs case there is a difference between it being good for</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="comment">// arrays and structs. For now, just propagate both the clone and the original</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="comment">// object till a cleaner solution is found.</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">if</span> (gep &amp;&amp; aggs.find(tildet) != aggs.end())</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; filterSet.<a class="code" href="classSVF_1_1PointsTo.html#a1ef805e714cfc29f0f3fa56c5ee964f6">reset</a>(o);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; }</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; pNewPt.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(prop);</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">if</span> (filter)</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; {</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; filterSet.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; }</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">if</span> (pPt != pNewPt)</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; {</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="comment">// Seems fast enough to perform in the naive way.</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#afdb10c2cce4935156566ea1c2daf9ea9">clearFullPts</a>(p);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae7073c07bfd7912f888d54d4652c7cc2">unionPts</a>(p, pNewPt);</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; }</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;}</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;</div><div class="line"><a name="l00412"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5"> 412</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">TypeBasedHeapCloning::cloneObject</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o, <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *type, <span class="keywordtype">bool</span>)</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;{</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> clone;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *obj = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(o);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepObj = SVFUtil::dyn_cast&lt;GepObjVar&gt;(obj))</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; {</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;clones = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aa175b5db473eb57c03b6f908791d1133">getGepObjClones</a>(gepObj-&gt;getBaseNode(), gepObj-&gt;getConstantFieldIdx());</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="comment">// TODO: a bit of repetition.</span></div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> clone : clones)</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; {</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(clone) == type)</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">return</span> clone;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; }</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; clone = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a16ad9c601a044731b982305a177dbda3">addCloneGepObjNode</a>(gepObj-&gt;getMemObj(), gepObj-&gt;getLocationSet());</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="comment">// The base needs to know about the new clone.</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad07fb204258fccda89053514338e3804">addGepToObj</a>(clone, gepObj-&gt;getBaseNode(), gepObj-&gt;getConstantFieldIdx());</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae83ef821386b3fd4b86f29477cdda3e1">addClone</a>(o, clone);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae83ef821386b3fd4b86f29477cdda3e1">addClone</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(o), clone);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="comment">// The only instance of original object of a Gep object being retrieved is for</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="comment">// IN sets and gepToSVFGRetriever in FSTBHC, so we don&#39;t care that clone comes</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="comment">// from o (we can get that by checking the base and offset).</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a14027d92c4f8e33d7487fe81acce6a85">setOriginalObj</a>(clone, <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(o));</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="classSVF_1_1CloneGepObjVar.html">CloneGepObjVar</a> *cloneGepObj = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1CloneGepObjVar.html">CloneGepObjVar</a>&gt;(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(clone));</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; cloneGepObj-&gt;<a class="code" href="classSVF_1_1GepObjVar.html#a5e371fae7592d763661a7cb777107ff4">setBaseNode</a>(gepObj-&gt;getBaseNode());</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; }</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;FIObjVar&gt;(obj) || SVFUtil::isa&lt;DummyObjVar&gt;(obj))</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; o = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(o);</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="comment">// Check there isn&#39;t an appropriate clone already.</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;clones = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af127bed600087b1ace26088a76ca8998">getClones</a>(o);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> clone : clones)</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; {</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(clone) == type)</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">return</span> clone;</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; }</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; }</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1FIObjVar.html">FIObjVar</a> *fiObj = SVFUtil::dyn_cast&lt;FIObjVar&gt;(obj))</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; {</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; clone = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a83fb1e2a7b66d5f33fa34698a52250af">addCloneFIObjNode</a>(fiObj-&gt;getMemObj());</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; }</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; {</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1DummyObjVar.html">DummyObjVar</a> *dummyObj = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1DummyObjVar.html">DummyObjVar</a>&gt;(obj);</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; clone = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac6ebb2fd24fc4272faf5db6ddd1e464b">addCloneDummyObjNode</a>(dummyObj-&gt;<a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>());</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; }</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="comment">// We checked above that it&#39;s an FIObj or a DummyObj.</span></div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">// Tracking object&lt;-&gt;clone mappings.</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae83ef821386b3fd4b86f29477cdda3e1">addClone</a>(o, clone);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a14027d92c4f8e33d7487fe81acce6a85">setOriginalObj</a>(clone, o);</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; {</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;FSTBHC: trying to clone unhandled object&quot;</span>);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; }</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="comment">// Clone&#39;s metadata. This can be shared between Geps/otherwise.</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac51cd735739a2499196a87323172a6a6">setType</a>(clone, type);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a006243a1416f4950de254d0d62ba40b0">setAllocationSite</a>(clone, <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a5681d78630ca8770dd493ef3841ec683">getAllocationSite</a>(o));</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a1d48cd7ccbcd9bdf1470a5d9aca3298d">backPropagate</a>(clone);</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordflow">return</span> clone;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;}</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;</div><div class="line"><a name="l00484"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a21d2fd8bbef0c6f6ddddb5387569a7fa"> 484</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a21d2fd8bbef0c6f6ddddb5387569a7fa">TypeBasedHeapCloning::getRawCTirMetadata</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *v)</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;{</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(v != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;TBHC: trying to get metadata from nullptr!&quot;</span>);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *mdNode = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = SVFUtil::dyn_cast&lt;Instruction&gt;(v))</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; {</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; mdNode = inst-&gt;getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#a0cd5347bc8043d4306e66a4a96005ace">cppUtil::ctir::derefMDName</a>);</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; }</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a16adea95b46c741a8990d92d29f33bb6">GlobalObject</a> *go = SVFUtil::dyn_cast&lt;GlobalObject&gt;(v))</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; {</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; mdNode = go-&gt;getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#a0cd5347bc8043d4306e66a4a96005ace">cppUtil::ctir::derefMDName</a>);</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; }</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="comment">// Will be nullptr if metadata isn&#39;t there.</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keywordflow">return</span> mdNode;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;}</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;</div><div class="line"><a name="l00502"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ac6ebb2fd24fc4272faf5db6ddd1e464b"> 502</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac6ebb2fd24fc4272faf5db6ddd1e464b">TypeBasedHeapCloning::addCloneDummyObjNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a> *mem)</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;{</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()-&gt;<a class="code" href="classSVF_1_1NodeIDAllocator.html#a6ce6b40b8291c6378dda07d943d66e53">allocateObjectId</a>();</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(<span class="keyword">nullptr</span>, <span class="keyword">new</span> <a class="code" href="classSVF_1_1CloneDummyObjVar.html">CloneDummyObjVar</a>(<span class="keywordtype">id</span>, mem), <span class="keywordtype">id</span>);</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;}</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;</div><div class="line"><a name="l00508"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a16ad9c601a044731b982305a177dbda3"> 508</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a16ad9c601a044731b982305a177dbda3">TypeBasedHeapCloning::addCloneGepObjNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a> *mem, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> &amp;l)</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;{</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()-&gt;<a class="code" href="classSVF_1_1NodeIDAllocator.html#a6ce6b40b8291c6378dda07d943d66e53">allocateObjectId</a>();</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(mem-&gt;<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>(), <span class="keyword">new</span> <a class="code" href="classSVF_1_1CloneGepObjVar.html">CloneGepObjVar</a>(mem, <span class="keywordtype">id</span>, l), id);</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;}</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;</div><div class="line"><a name="l00514"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a83fb1e2a7b66d5f33fa34698a52250af"> 514</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a83fb1e2a7b66d5f33fa34698a52250af">TypeBasedHeapCloning::addCloneFIObjNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a> *mem)</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;{</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()-&gt;<a class="code" href="classSVF_1_1NodeIDAllocator.html#a6ce6b40b8291c6378dda07d943d66e53">allocateObjectId</a>();</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(mem-&gt;<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>(), <span class="keyword">new</span> <a class="code" href="classSVF_1_1CloneFIObjVar.html">CloneFIObjVar</a>(mem-&gt;<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>(), id, mem), <span class="keywordtype">id</span>);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;}</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160;</div><div class="line"><a name="l00520"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ac4565775cced4444ba007e310c4a02d8"> 520</a></span>&#160;<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac4565775cced4444ba007e310c4a02d8">TypeBasedHeapCloning::getTypeFromCTirMetadata</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *v)</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;{</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(v != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;TBHC: trying to get type from nullptr!&quot;</span>);</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *mdNode = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a21d2fd8bbef0c6f6ddddb5387569a7fa">getRawCTirMetadata</a>(v);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordflow">if</span> (mdNode == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; {</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; }</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *type = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a>&gt;(mdNode);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordflow">if</span> (type == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; {</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;TBHC: bad ctir metadata type\n&quot;</span>;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;}</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;</div><div class="line"><a name="l00540"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a724cdfa6fbf6b2b401332ea83265c4c2"> 540</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a724cdfa6fbf6b2b401332ea83265c4c2">TypeBasedHeapCloning::isGep</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *n)<span class="keyword"> const</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(n != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;TBHC: testing if null is a GEP object!&quot;</span>);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keywordflow">return</span> SVFUtil::isa&lt;GepObjVar&gt;(n);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;}</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;</div><div class="line"><a name="l00547"></a><span class="lineno"><a class="line" href="TypeBasedHeapCloning_8cpp.html#a2be9728908f88e4e16b1e6218801fa06"> 547</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="TypeBasedHeapCloning_8cpp.html#a2be9728908f88e4e16b1e6218801fa06">isAliasTestFunction</a>(std::string name)</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;{</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">return</span> name == <a class="code" href="classSVF_1_1PointerAnalysis.html#a7648a0358e2c0798db1c547ec7aa7c64">PointerAnalysis::aliasTestMayAlias</a></div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#a13ce6b930a35877f17bffd4b89e22654">PointerAnalysis::aliasTestMayAliasMangled</a></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#ac353221cc7aced590dcf3550a24b1570">PointerAnalysis::aliasTestNoAlias</a></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0e68883e2ee328315af29e59bb2008cd">PointerAnalysis::aliasTestNoAliasMangled</a></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#a83b0a51d88fa7aadff6e9267765d07a5">PointerAnalysis::aliasTestPartialAlias</a></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#acbb517523fd30708ed1a93f306cd3545">PointerAnalysis::aliasTestPartialAliasMangled</a></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#a7477a4301d548b93958e57df389cbba0">PointerAnalysis::aliasTestMustAlias</a></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#aec884481726cfaf19c4ab8ec8d9195b7">PointerAnalysis::aliasTestMustAliasMangled</a></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#a32c6f12ce8bc0554dbb6aafa36f9a235">PointerAnalysis::aliasTestFailMayAlias</a></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#a651cc82379c2d18cc2f69f25b2ae08db">PointerAnalysis::aliasTestFailMayAliasMangled</a></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#a18347e41bc66b16e3f42c7c52811ad42">PointerAnalysis::aliasTestFailNoAlias</a></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; || name == <a class="code" href="classSVF_1_1PointerAnalysis.html#aefd4e9ea66da5ad84a45efead823eb22">PointerAnalysis::aliasTestFailNoAliasMangled</a>;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;}</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;</div><div class="line"><a name="l00563"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#ae42ec334a7dfc96a5ead2d2845ca3b22"> 563</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae42ec334a7dfc96a5ead2d2845ca3b22">TypeBasedHeapCloning::validateTBHCTests</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>*)</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;{</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a> *llvmModuleSet = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>();</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; llvmModuleSet-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; {</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFIR.html#a2b237e55fd8d7fd61eb3ac6968e4a76e">SVFIR::CallSiteSet</a> &amp;callSites = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa530e33657f68fc2e8eae9435ce430cb">getCallSiteSet</a>();</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *cbn : callSites)</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; {</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> &amp;cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cbn-&gt;getCallSite());</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fn = cs.<a class="code" href="classSVF_1_1CallSite.html#ae9b0172e29199f2a938d7cf9e42241cf">getCalledFunction</a>();</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">if</span> (fn == <span class="keyword">nullptr</span> || !<a class="code" href="TypeBasedHeapCloning_8cpp.html#a2be9728908f88e4e16b1e6218801fa06">isAliasTestFunction</a>(fn-&gt;getName().str()))</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; {</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; }</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="comment">// We have a test call,</span></div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="comment">// We want the store which stores to the pointer in question (i.e. operand of the</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="comment">// store is the pointer, and the store itself is the dereference).</span></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> *ps = <span class="keyword">nullptr</span>, *qs = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="comment">// Check: currInst is a deref call, so p/q is prevInst.</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="comment">// Find p.</span></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *prevInst = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *currInst = cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>();</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">do</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a> *ci = SVFUtil::dyn_cast&lt;CallInst&gt;(currInst))</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; {</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; std::string calledFnName = ci-&gt;getCalledFunction()-&gt;getName().str();</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">if</span> (calledFnName == <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a03ef2decb80ba07f4d98cae0a4497212">derefFnName</a> || calledFnName == <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ab1467e374b238b0f68d3fdd8f3ef6596">mangledDerefFnName</a>)</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; {</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> *si = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a>&gt;(prevInst);</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(si &amp;&amp; <span class="stringliteral">&quot;TBHC: validation macro not producing stores?&quot;</span>);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; ps = si;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; }</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; }</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; prevInst = currInst;</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; currInst = currInst-&gt;getNextNonDebugInstruction();</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">while</span> (currInst != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="comment">// Repeat for q.</span></div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">while</span> (currInst != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; {</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">// while loop, not do-while, because we need to the next instruction (current</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="comment">// instruction is the first deref()).</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; prevInst = currInst;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; currInst = currInst-&gt;getNextNonDebugInstruction();</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a> *ci = SVFUtil::dyn_cast&lt;CallInst&gt;(currInst))</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; {</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; std::string calledFnName = ci-&gt;getCalledFunction()-&gt;getName().str();</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordflow">if</span> (calledFnName == <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a03ef2decb80ba07f4d98cae0a4497212">derefFnName</a> || calledFnName == <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ab1467e374b238b0f68d3fdd8f3ef6596">mangledDerefFnName</a>)</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; {</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> *si = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a>&gt;(prevInst);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(si &amp;&amp; <span class="stringliteral">&quot;TBHC: validation macro not producing stores?&quot;</span>);</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; qs = si;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; }</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; }</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; }</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(ps != <span class="keyword">nullptr</span> &amp;&amp; qs != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;TBHC: malformed alias test?&quot;</span>);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(ps-&gt;getPointerOperand()),</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; q = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(qs-&gt;getPointerOperand());</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *pt = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac4565775cced4444ba007e310c4a02d8">getTypeFromCTirMetadata</a>(ps), *qt = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac4565775cced4444ba007e310c4a02d8">getTypeFromCTirMetadata</a>(qs);</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="comment">// Now filter both points-to sets according to the type of the value.</span></div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;pPts = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(p), &amp;qPts = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(q);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pPtsFiltered, qPtsFiltered;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pPts)</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; {</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(o) != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a> &amp;&amp; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638">isBase</a>(pt, <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(o)))</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; {</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; pPtsFiltered.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; }</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; }</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : qPts)</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; {</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(o) != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a> &amp;&amp; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638">isBase</a>(qt, <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(o)))</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; qPtsFiltered.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; }</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; }</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a> *bvpta = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>&gt;(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>);</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(bvpta &amp;&amp; <span class="stringliteral">&quot;TBHC: need a BVDataPTAImpl for TBHC alias testing.&quot;</span>);</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">AliasResult</a> res = bvpta-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df">alias</a>(pPtsFiltered, qPtsFiltered);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordtype">bool</span> passed = <span class="keyword">false</span>;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; std::string testName = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keywordflow">if</span> (fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a7648a0358e2c0798db1c547ec7aa7c64">PointerAnalysis::aliasTestMayAlias</a></div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; || fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a13ce6b930a35877f17bffd4b89e22654">PointerAnalysis::aliasTestMayAliasMangled</a>)</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; {</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; passed = res == <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">AliasResult::MayAlias</a> || res == <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943ab58a0391f037031a51016ebfe2a752b2">AliasResult::MustAlias</a>;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; testName = <a class="code" href="classSVF_1_1PointerAnalysis.html#a7648a0358e2c0798db1c547ec7aa7c64">PointerAnalysis::aliasTestMayAlias</a>;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; }</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#ac353221cc7aced590dcf3550a24b1570">PointerAnalysis::aliasTestNoAlias</a></div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; || fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0e68883e2ee328315af29e59bb2008cd">PointerAnalysis::aliasTestNoAliasMangled</a>)</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; {</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; passed = res == <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239">AliasResult::NoAlias</a>;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; testName = <a class="code" href="classSVF_1_1PointerAnalysis.html#ac353221cc7aced590dcf3550a24b1570">PointerAnalysis::aliasTestNoAlias</a>;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; }</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a7477a4301d548b93958e57df389cbba0">PointerAnalysis::aliasTestMustAlias</a></div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; || fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#aec884481726cfaf19c4ab8ec8d9195b7">PointerAnalysis::aliasTestMustAliasMangled</a>)</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; {</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; passed = res == <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943ab58a0391f037031a51016ebfe2a752b2">AliasResult::MustAlias</a> || res == <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">AliasResult::MayAlias</a>;</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; testName = <a class="code" href="classSVF_1_1PointerAnalysis.html#a7477a4301d548b93958e57df389cbba0">PointerAnalysis::aliasTestMustAlias</a>;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; }</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a83b0a51d88fa7aadff6e9267765d07a5">PointerAnalysis::aliasTestPartialAlias</a></div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; || fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#acbb517523fd30708ed1a93f306cd3545">PointerAnalysis::aliasTestPartialAliasMangled</a>)</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; {</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; passed = res == <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">AliasResult::MayAlias</a> || res == <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aa03eb20fd81629154d6c346763ea64d6">AliasResult::PartialAlias</a>;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; testName = <a class="code" href="classSVF_1_1PointerAnalysis.html#a83b0a51d88fa7aadff6e9267765d07a5">PointerAnalysis::aliasTestPartialAlias</a>;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; }</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a32c6f12ce8bc0554dbb6aafa36f9a235">PointerAnalysis::aliasTestFailMayAlias</a></div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; || fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a651cc82379c2d18cc2f69f25b2ae08db">PointerAnalysis::aliasTestFailMayAliasMangled</a>)</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; {</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; passed = res != <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">AliasResult::MayAlias</a> &amp;&amp; res != <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943ab58a0391f037031a51016ebfe2a752b2">AliasResult::MustAlias</a> &amp;&amp; res != <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aa03eb20fd81629154d6c346763ea64d6">AliasResult::PartialAlias</a>;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; testName = <a class="code" href="classSVF_1_1PointerAnalysis.html#a32c6f12ce8bc0554dbb6aafa36f9a235">PointerAnalysis::aliasTestFailMayAlias</a>;</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; }</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a18347e41bc66b16e3f42c7c52811ad42">PointerAnalysis::aliasTestFailNoAlias</a></div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; || fn-&gt;getName() == <a class="code" href="classSVF_1_1PointerAnalysis.html#aefd4e9ea66da5ad84a45efead823eb22">PointerAnalysis::aliasTestFailNoAliasMangled</a>)</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; {</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; passed = res != <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239">AliasResult::NoAlias</a>;</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; testName = <a class="code" href="classSVF_1_1PointerAnalysis.html#a18347e41bc66b16e3f42c7c52811ad42">PointerAnalysis::aliasTestFailNoAlias</a>;</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; }</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;[&quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#aed4e5066f6ddef83afaf60adbcc11de0">PTAName</a>() &lt;&lt; <span class="stringliteral">&quot;] Checking &quot;</span> &lt;&lt; testName &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <a class="code" href="namespaceSVF.html#a8bd74fdcb0e58d0249003df9c3fb8b31">OutStream</a> &amp;msgStream = passed ? <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() : <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>();</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; msgStream &lt;&lt; (passed ? <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6a55f1f8598998a3ffbbc67d32eaf8c4">SVFUtil::sucMsg</a>(<span class="stringliteral">&quot;\t SUCCESS&quot;</span>) : <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5d4bb92f5df30417f414397f8e58cf01">SVFUtil::errMsg</a>(<span class="stringliteral">&quot;\t FAILURE&quot;</span>))</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; &lt;&lt; <span class="stringliteral">&quot; : &quot;</span> &lt;&lt; testName</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; &lt;&lt; <span class="stringliteral">&quot; check &lt;id:&quot;</span> &lt;&lt; p &lt;&lt; <span class="stringliteral">&quot;, id:&quot;</span> &lt;&lt; q &lt;&lt; <span class="stringliteral">&quot;&gt; &quot;</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; &lt;&lt; <span class="stringliteral">&quot;at (&quot;</span> &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">SVFUtil::getSourceLoc</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>()) &lt;&lt; <span class="stringliteral">&quot;)\n&quot;</span>;</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">if</span> (!passed)</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;test case failed!&quot;</span>);</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keywordflow">if</span> (pPtsFiltered.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; {</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; msgStream &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6c06020737f7dff22a666b75c28c5e7d">SVFUtil::wrnMsg</a>(<span class="stringliteral">&quot;\t WARNING&quot;</span>)</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; &lt;&lt; <span class="stringliteral">&quot; : pts(&quot;</span> &lt;&lt; p &lt;&lt; <span class="stringliteral">&quot;) is empty\n&quot;</span>;</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; }</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">if</span> (qPtsFiltered.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; {</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; msgStream &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6c06020737f7dff22a666b75c28c5e7d">SVFUtil::wrnMsg</a>(<span class="stringliteral">&quot;\t WARNING&quot;</span>)</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; &lt;&lt; <span class="stringliteral">&quot; : pts(&quot;</span> &lt;&lt; q &lt;&lt; <span class="stringliteral">&quot;) is empty\n&quot;</span>;</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; }</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keywordflow">if</span> (testName == <a class="code" href="classSVF_1_1PointerAnalysis.html#a7477a4301d548b93958e57df389cbba0">PointerAnalysis::aliasTestMustAlias</a>)</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; {</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; msgStream &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6c06020737f7dff22a666b75c28c5e7d">SVFUtil::wrnMsg</a>(<span class="stringliteral">&quot;\t WARNING&quot;</span>)</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; &lt;&lt; <span class="stringliteral">&quot; : MUSTALIAS tests are actually MAYALIAS tests\n&quot;</span>;</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; }</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keywordflow">if</span> (testName == <a class="code" href="classSVF_1_1PointerAnalysis.html#a83b0a51d88fa7aadff6e9267765d07a5">PointerAnalysis::aliasTestPartialAlias</a>)</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; {</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; msgStream &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6c06020737f7dff22a666b75c28c5e7d">SVFUtil::wrnMsg</a>(<span class="stringliteral">&quot;\t WARNING&quot;</span>)</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; &lt;&lt; <span class="stringliteral">&quot; : PARTIALALIAS tests are actually MAYALIAS tests\n&quot;</span>;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; }</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; msgStream.flush();</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; }</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; }</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;}</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160;</div><div class="line"><a name="l00732"></a><span class="lineno"><a class="line" href="classSVF_1_1TypeBasedHeapCloning.html#a1a7b51e7d959795c00383721b013834d"> 732</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a1a7b51e7d959795c00383721b013834d">TypeBasedHeapCloning::dumpStats</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160;{</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; std::string <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a> = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;@@@@@@@@@ TBHC STATISTICS @@@@@@@@@\n&quot;</span>;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; indent = <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="comment">// Print clones with their types.</span></div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;=== Original objects to clones ===\n&quot;</span>;</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; indent = <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordtype">unsigned</span> totalClones = 0;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> objs = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad1c67da3aac128ca8a69907fdad53fcd">getObjsWithClones</a>();</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : objs)</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; {</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;clones = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af127bed600087b1ace26088a76ca8998">getClones</a>(o);</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">if</span> (clones.count() == 0) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160;</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; totalClones += clones.count();</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; o &lt;&lt; <span class="stringliteral">&quot; : &quot;</span></div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; clones.count() &lt;&lt; <span class="stringliteral">&quot;)&quot;</span></div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; &lt;&lt; <span class="stringliteral">&quot;[ &quot;</span>;</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="keywordtype">bool</span> first = <span class="keyword">true</span>;</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> c : clones)</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; {</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keywordflow">if</span> (!first)</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; {</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; }</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; c</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; &lt;&lt; <span class="stringliteral">&quot;{&quot;</span></div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(c))</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; &lt;&lt; <span class="stringliteral">&quot;}&quot;</span>;</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; first = <span class="keyword">false</span>;</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; }</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160;</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot; ]\n&quot;</span>;</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; }</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; indent = <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Total: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a82528aff779ccf8f723f57507dd2d991">getObjectNodeNum</a>() + <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">ppag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a3bbaafd80dfcae6ccc82c3d8b9d303ea">getFieldObjNodeNum</a>() + totalClones</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; &lt;&lt; <span class="stringliteral">&quot; (&quot;</span> &lt;&lt; totalClones &lt;&lt; <span class="stringliteral">&quot; clones)\n&quot;</span>;</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;==================================\n&quot;</span>;</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;INITIALISE : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a4c658be1ade99ad1e848cd80332e38ce">numInit</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;TBWU : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad971bec1a044bbb979b96b0d91278afd">numTBWU</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;TBSSU : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af5cf059dea30a0b422321e3a792ea447">numTBSSU</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;TBSU : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ab3fa2223ad8d8b23d78aa02892f0be2c">numTBSU</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;REUSE : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0b14eb60ddc73654bec24cd8142e447b">numReuse</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;AGG CASE : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a891a5873205bb98ad494a1c07231dc8a">numAgg</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160;</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;STACK/GLOBAL OBJECTS\n&quot;</span>;</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; indent = <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;INITIALISE : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a4d6fc7852fc4bfe1d7ba3c0b8602bc8a">numSGInit</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;TBWU : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#afca6afa06a1072e7a452ed42bcd666d3">numSGTBWU</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;TBSSU : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a86a51362c35c4a67fc1d4af655504493">numSGTBSSU</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;TBSU : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a51d2baff54d05cba59fa270c32cce87c">numSGTBSU</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;REUSE : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac44c7746d774af420ff2bc5ce98f5add">numSGReuse</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; indent &lt;&lt; <span class="stringliteral">&quot;AGG CASE : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a28653c7757fc31c4b8c1b31ace17eb50">numSGAgg</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160;</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n&quot;</span>;</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;}</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html">SVF::BVDataPTAImpl</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00042">PointerAnalysisImpl.h:42</a></div></div>
70
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a14027d92c4f8e33d7487fe81acce6a85"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a14027d92c4f8e33d7487fe81acce6a85">SVF::TypeBasedHeapCloning::setOriginalObj</a></div><div class="ttdeci">void setOriginalObj(NodeID c, NodeID o)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00097">TypeBasedHeapCloning.cpp:97</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a4d6fc7852fc4bfe1d7ba3c0b8602bc8a"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a4d6fc7852fc4bfe1d7ba3c0b8602bc8a">SVF::TypeBasedHeapCloning::numSGInit</a></div><div class="ttdeci">unsigned numSGInit</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00180">TypeBasedHeapCloning.h:180</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a629ad3cef8929865b7319fb9e389f7bf"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a629ad3cef8929865b7319fb9e389f7bf">SVF::TypeBasedHeapCloning::ppag</a></div><div class="ttdeci">SVFIR * ppag</div><div class="ttdoc">SVFIR the PTA uses. Just a shortcut for getPAG(). </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00149">TypeBasedHeapCloning.h:149</a></div></div>
73
- <div class="ttc" id="TypeBasedHeapCloning_8cpp_html_a2be9728908f88e4e16b1e6218801fa06"><div class="ttname"><a href="TypeBasedHeapCloning_8cpp.html#a2be9728908f88e4e16b1e6218801fa06">isAliasTestFunction</a></div><div class="ttdeci">static bool isAliasTestFunction(std::string name)</div><div class="ttdoc">Returns true if the function name matches MAYALIAS, NOALIAS, etc. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00546">TypeBasedHeapCloning.cpp:546</a></div></div>
73
+ <div class="ttc" id="TypeBasedHeapCloning_8cpp_html_a2be9728908f88e4e16b1e6218801fa06"><div class="ttname"><a href="TypeBasedHeapCloning_8cpp.html#a2be9728908f88e4e16b1e6218801fa06">isAliasTestFunction</a></div><div class="ttdeci">static bool isAliasTestFunction(std::string name)</div><div class="ttdoc">Returns true if the function name matches MAYALIAS, NOALIAS, etc. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00547">TypeBasedHeapCloning.cpp:547</a></div></div>
74
74
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a2dc488345cc3a5f37079952f638d8c2b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">SVF::DCHGraph::diTypeToStr</a></div><div class="ttdeci">static std::string diTypeToStr(const DIType *)</div><div class="ttdoc">Returns a human-readable version of the DIType. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00958">DCHG.cpp:958</a></div></div>
75
75
  <div class="ttc" id="classSVF_1_1DCHGraph_html_ae9a0007299178912e2568dc7158d6824"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">SVF::DCHGraph::getFieldTypes</a></div><div class="ttdeci">const std::vector&lt; const DIType * &gt; &amp; getFieldTypes(const DIType *base)</div><div class="ttdoc">Returns a vector of the types of all fields in base. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00327">DCHG.h:327</a></div></div>
76
76
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_afdb10c2cce4935156566ea1c2daf9ea9"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#afdb10c2cce4935156566ea1c2daf9ea9">SVF::BVDataPTAImpl::clearFullPts</a></div><div class="ttdeci">virtual void clearFullPts(NodeID id)</div><div class="ttdoc">Clear points-to set of id. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00116">PointerAnalysisImpl.h:116</a></div></div>
77
- <div class="ttc" id="namespaceSVF_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="Util_2BasicTypes_8h_source.html#l00106">BasicTypes.h:106</a></div></div>
77
+ <div class="ttc" id="namespaceSVF_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="Util_2BasicTypes_8h_source.html#l00102">BasicTypes.h:102</a></div></div>
78
78
  <div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00372">SymbolTableInfo.h:372</a></div></div>
79
79
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a1d48cd7ccbcd9bdf1470a5d9aca3298d"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a1d48cd7ccbcd9bdf1470a5d9aca3298d">SVF::TypeBasedHeapCloning::backPropagate</a></div><div class="ttdeci">virtual void backPropagate(NodeID clone)=0</div></div>
80
80
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a03ef2decb80ba07f4d98cae0a4497212"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a03ef2decb80ba07f4d98cae0a4497212">SVF::TypeBasedHeapCloning::derefFnName</a></div><div class="ttdeci">static const std::string derefFnName</div><div class="ttdoc">deref function for TBHC alias tests. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00034">TypeBasedHeapCloning.h:34</a></div></div>
81
81
  <div class="ttc" id="CPPUtil_8h_html"><div class="ttname"><a href="CPPUtil_8h.html">CPPUtil.h</a></div></div>
82
82
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00019">MTAResultValidator.h:19</a></div></div>
83
83
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a651cc82379c2d18cc2f69f25b2ae08db"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a651cc82379c2d18cc2f69f25b2ae08db">SVF::PointerAnalysis::aliasTestFailMayAliasMangled</a></div><div class="ttdeci">static const std::string aliasTestFailMayAliasMangled</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00126">PointerAnalysis.h:126</a></div></div>
84
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_af4d0abf53755a070478c142add3322d8"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#af4d0abf53755a070478c142add3322d8">SVF::TypeBasedHeapCloning::TypeBasedHeapCloning</a></div><div class="ttdeci">TypeBasedHeapCloning(BVDataPTAImpl *pta)</div><div class="ttdoc">Constructor. pta is the pointer analysis using this object (i.e. that which is extending). </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00021">TypeBasedHeapCloning.cpp:21</a></div></div>
84
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_af4d0abf53755a070478c142add3322d8"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#af4d0abf53755a070478c142add3322d8">SVF::TypeBasedHeapCloning::TypeBasedHeapCloning</a></div><div class="ttdeci">TypeBasedHeapCloning(BVDataPTAImpl *pta)</div><div class="ttdoc">Constructor. pta is the pointer analysis using this object (i.e. that which is extending). </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00022">TypeBasedHeapCloning.cpp:22</a></div></div>
85
85
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac353221cc7aced590dcf3550a24b1570"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac353221cc7aced590dcf3550a24b1570">SVF::PointerAnalysis::aliasTestNoAlias</a></div><div class="ttdeci">static const std::string aliasTestNoAlias</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00119">PointerAnalysis.h:119</a></div></div>
86
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_afe416f9ec57923f34ef1db3890a3f9e1"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#afe416f9ec57923f34ef1db3890a3f9e1">SVF::TypeBasedHeapCloning::getGepObjs</a></div><div class="ttdeci">const NodeBS &amp; getGepObjs(NodeID base)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00137">TypeBasedHeapCloning.cpp:137</a></div></div>
86
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_afe416f9ec57923f34ef1db3890a3f9e1"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#afe416f9ec57923f34ef1db3890a3f9e1">SVF::TypeBasedHeapCloning::getGepObjs</a></div><div class="ttdeci">const NodeBS &amp; getGepObjs(NodeID base)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00138">TypeBasedHeapCloning.cpp:138</a></div></div>
87
87
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a477492fb699d742c33007a6ca934b5c1"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a477492fb699d742c33007a6ca934b5c1">SVF::TypeBasedHeapCloning::objToType</a></div><div class="ttdeci">Map&lt; NodeID, const DIType * &gt; objToType</div><div class="ttdoc">Object -&gt; its type. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00152">TypeBasedHeapCloning.h:152</a></div></div>
88
88
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
89
89
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a848e59ab22069367a97009f1fdebc4d9"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a848e59ab22069367a97009f1fdebc4d9">SVF::TypeBasedHeapCloning::locToFilterSet</a></div><div class="ttdeci">Map&lt; NodeID, PointsTo &gt; locToFilterSet</div><div class="ttdoc">Maps nodes (a location like a SVFIR node or SVFG node) to their filter set. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00162">TypeBasedHeapCloning.h:162</a></div></div>
90
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ac51cd735739a2499196a87323172a6a6"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ac51cd735739a2499196a87323172a6a6">SVF::TypeBasedHeapCloning::setType</a></div><div class="ttdeci">void setType(NodeID o, const DIType *t)</div><div class="ttdoc">Sets the type (in objToType) of o. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00053">TypeBasedHeapCloning.cpp:53</a></div></div>
90
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ac51cd735739a2499196a87323172a6a6"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ac51cd735739a2499196a87323172a6a6">SVF::TypeBasedHeapCloning::setType</a></div><div class="ttdeci">void setType(NodeID o, const DIType *t)</div><div class="ttdoc">Sets the type (in objToType) of o. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00054">TypeBasedHeapCloning.cpp:54</a></div></div>
91
91
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_aa9977ed15f500848b23d4df7a44cd204"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#aa9977ed15f500848b23d4df7a44cd204">SVF::TypeBasedHeapCloning::objToGeps</a></div><div class="ttdeci">Map&lt; NodeID, NodeBS &gt; objToGeps</div><div class="ttdoc">Maps objects to the GEP nodes beneath them. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00164">TypeBasedHeapCloning.h:164</a></div></div>
92
92
  <div class="ttc" id="classSVF_1_1CloneFIObjVar_html"><div class="ttname"><a href="classSVF_1_1CloneFIObjVar.html">SVF::CloneFIObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00813">SVFVariables.h:813</a></div></div>
93
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a83fb1e2a7b66d5f33fa34698a52250af"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a83fb1e2a7b66d5f33fa34698a52250af">SVF::TypeBasedHeapCloning::addCloneFIObjNode</a></div><div class="ttdeci">NodeID addCloneFIObjNode(const MemObj *mem)</div><div class="ttdoc">Add clone FI object node to SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00513">TypeBasedHeapCloning.cpp:513</a></div></div>
94
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a59a9c7b8a7ec392ac609f10c8dac8d7f"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a59a9c7b8a7ec392ac609f10c8dac8d7f">SVF::TypeBasedHeapCloning::isBlkObjOrConstantObj</a></div><div class="ttdeci">bool isBlkObjOrConstantObj(NodeID o) const</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00036">TypeBasedHeapCloning.cpp:36</a></div></div>
95
- <div class="ttc" id="namespaceSVF_html_adc8b60ca7d60cf6c81feae20e4a04c63"><div class="ttname"><a href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">SVF::CallInst</a></div><div class="ttdeci">llvm::CallInst CallInst</div><div class="ttdoc">LLVM Instructions. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00105">BasicTypes.h:105</a></div></div>
93
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a83fb1e2a7b66d5f33fa34698a52250af"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a83fb1e2a7b66d5f33fa34698a52250af">SVF::TypeBasedHeapCloning::addCloneFIObjNode</a></div><div class="ttdeci">NodeID addCloneFIObjNode(const MemObj *mem)</div><div class="ttdoc">Add clone FI object node to SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00514">TypeBasedHeapCloning.cpp:514</a></div></div>
94
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a59a9c7b8a7ec392ac609f10c8dac8d7f"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a59a9c7b8a7ec392ac609f10c8dac8d7f">SVF::TypeBasedHeapCloning::isBlkObjOrConstantObj</a></div><div class="ttdeci">bool isBlkObjOrConstantObj(NodeID o) const</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00037">TypeBasedHeapCloning.cpp:37</a></div></div>
95
+ <div class="ttc" id="namespaceSVF_html_adc8b60ca7d60cf6c81feae20e4a04c63"><div class="ttname"><a href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">SVF::CallInst</a></div><div class="ttdeci">llvm::CallInst CallInst</div><div class="ttdoc">LLVM Instructions. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
96
96
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a28653c7757fc31c4b8c1b31ace17eb50"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a28653c7757fc31c4b8c1b31ace17eb50">SVF::TypeBasedHeapCloning::numSGAgg</a></div><div class="ttdeci">unsigned numSGAgg</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00185">TypeBasedHeapCloning.h:185</a></div></div>
97
97
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ab3fa2223ad8d8b23d78aa02892f0be2c"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ab3fa2223ad8d8b23d78aa02892f0be2c">SVF::TypeBasedHeapCloning::numTBSU</a></div><div class="ttdeci">unsigned numTBSU</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00175">TypeBasedHeapCloning.h:175</a></div></div>
98
98
  <div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
99
99
  <div class="ttc" id="classSVF_1_1SVFVar_html"><div class="ttname"><a href="classSVF_1_1SVFVar.html">SVF::SVFVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00045">SVFVariables.h:45</a></div></div>
100
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a16ad9c601a044731b982305a177dbda3"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a16ad9c601a044731b982305a177dbda3">SVF::TypeBasedHeapCloning::addCloneGepObjNode</a></div><div class="ttdeci">NodeID addCloneGepObjNode(const MemObj *mem, const LocationSet &amp;l)</div><div class="ttdoc">Add clone GEP object node to SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00507">TypeBasedHeapCloning.cpp:507</a></div></div>
101
- <div class="ttc" id="classSVF_1_1CallSite_html_ab36a6a35eea673d4bdca615efc4336b1"><div class="ttname"><a href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">SVF::CallSite::getInstruction</a></div><div class="ttdeci">CallBase * getInstruction() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00215">BasicTypes.h:215</a></div></div>
100
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a16ad9c601a044731b982305a177dbda3"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a16ad9c601a044731b982305a177dbda3">SVF::TypeBasedHeapCloning::addCloneGepObjNode</a></div><div class="ttdeci">NodeID addCloneGepObjNode(const MemObj *mem, const LocationSet &amp;l)</div><div class="ttdoc">Add clone GEP object node to SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00508">TypeBasedHeapCloning.cpp:508</a></div></div>
101
+ <div class="ttc" id="classSVF_1_1CallSite_html_ab36a6a35eea673d4bdca615efc4336b1"><div class="ttname"><a href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">SVF::CallSite::getInstruction</a></div><div class="ttdeci">CallBase * getInstruction() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00207">BasicTypes.h:207</a></div></div>
102
102
  <div class="ttc" id="classSVF_1_1ObjVar_html"><div class="ttname"><a href="classSVF_1_1ObjVar.html">SVF::ObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00308">SVFVariables.h:308</a></div></div>
103
103
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a28c0ede7e4765d2a686fc8ae0f5641a4"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">SVF::SVFUtil::getSourceLoc</a></div><div class="ttdeci">std::string getSourceLoc(const Value *val)</div><div class="ttdoc">Return source code including line number and file name from debug information. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00269">SVFUtil.cpp:269</a></div></div>
104
104
  <div class="ttc" id="classSVF_1_1DCHGraph_html"><div class="ttname"><a href="classSVF_1_1DCHGraph.html">SVF::DCHGraph</a></div><div class="ttdoc">Dwarf based CHG. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00208">DCHG.h:208</a></div></div>
105
105
  <div class="ttc" id="classSVF_1_1DummyObjVar_html"><div class="ttname"><a href="classSVF_1_1DummyObjVar.html">SVF::DummyObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00696">SVFVariables.h:696</a></div></div>
106
106
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ae7073c07bfd7912f888d54d4652c7cc2"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ae7073c07bfd7912f888d54d4652c7cc2">SVF::BVDataPTAImpl::unionPts</a></div><div class="ttdeci">virtual bool unionPts(NodeID id, const PointsTo &amp;target)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00124">PointerAnalysisImpl.h:124</a></div></div>
107
- <div class="ttc" id="namespaceSVF_html_aded9b991c77acc5284ccead0739e84f1"><div class="ttname"><a href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">SVF::DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00127">BasicTypes.h:127</a></div></div>
108
107
  <div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00041">SVFModule.h:41</a></div></div>
109
108
  <div class="ttc" id="namespaceSVF_html_a61c01e2e687ab3a001fb806737583943"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">SVF::AliasResult</a></div><div class="ttdeci">AliasResult</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00195">SVFBasicTypes.h:195</a></div></div>
110
109
  <div class="ttc" id="classSVF_1_1NodeIDAllocator_html_a6ce6b40b8291c6378dda07d943d66e53"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator.html#a6ce6b40b8291c6378dda07d943d66e53">SVF::NodeIDAllocator::allocateObjectId</a></div><div class="ttdeci">NodeID allocateObjectId(void)</div><div class="ttdoc">Allocate an object ID as determined by the strategy. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00049">NodeIDAllocator.cpp:49</a></div></div>
111
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a0890235fa3725c23435ea3245c52c038"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a0890235fa3725c23435ea3245c52c038">SVF::TypeBasedHeapCloning::setPAG</a></div><div class="ttdeci">void setPAG(SVFIR *pag)</div><div class="ttdoc">SVFIR must be set by extending class once the SVFIR is available. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00031">TypeBasedHeapCloning.cpp:31</a></div></div>
110
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a0890235fa3725c23435ea3245c52c038"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a0890235fa3725c23435ea3245c52c038">SVF::TypeBasedHeapCloning::setPAG</a></div><div class="ttdeci">void setPAG(SVFIR *pag)</div><div class="ttdoc">SVFIR must be set by extending class once the SVFIR is available. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00032">TypeBasedHeapCloning.cpp:32</a></div></div>
112
111
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a6a55f1f8598998a3ffbbc67d32eaf8c4"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a6a55f1f8598998a3ffbbc67d32eaf8c4">SVF::SVFUtil::sucMsg</a></div><div class="ttdeci">std::string sucMsg(std::string msg)</div><div class="ttdoc">Returns successful message by converting a string into green string output. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00056">SVFUtil.cpp:56</a></div></div>
113
112
  <div class="ttc" id="classSVF_1_1ObjVar_html_a6a4feb73b54e602407e35eeb09f55930"><div class="ttname"><a href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">SVF::ObjVar::getMemObj</a></div><div class="ttdeci">const MemObj * getMemObj() const</div><div class="ttdoc">Return memory object. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00348">SVFVariables.h:348</a></div></div>
114
113
  <div class="ttc" id="DCHG_8cpp_html_a6673217180d3b6fb73c7c6387777f269"><div class="ttname"><a href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a></div><div class="ttdeci">static std::string indent(size_t n)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l01126">DCHG.cpp:1126</a></div></div>
115
- <div class="ttc" id="namespaceSVF_html_af157dc77830b6cc804338df7430cbbb3"><div class="ttname"><a href="namespaceSVF.html#af157dc77830b6cc804338df7430cbbb3">SVF::GlobalObject</a></div><div class="ttdeci">llvm::GlobalObject GlobalObject</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
116
114
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a159e158c794fff115d5642b85963f43b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a159e158c794fff115d5642b85963f43b">SVF::DCHGraph::getAggs</a></div><div class="ttdeci">const Set&lt; const DIType * &gt; &amp; getAggs(const DIType *base)</div><div class="ttdoc">Returns all the aggregates contained (transitively) in base. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00343">DCHG.h:343</a></div></div>
117
115
  <div class="ttc" id="classSVF_1_1IRGraph_html_a82528aff779ccf8f723f57507dd2d991"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a82528aff779ccf8f723f57507dd2d991">SVF::IRGraph::getObjectNodeNum</a></div><div class="ttdeci">u32_t getObjectNodeNum() const</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00177">IRGraph.h:177</a></div></div>
118
116
  <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_ae265a7f3cc7367d62013e0f15cf3d233"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">SVF::LLVMModuleSet::getModuleNum</a></div><div class="ttdeci">u32_t getModuleNum() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00095">LLVMModule.h:95</a></div></div>
@@ -126,27 +124,28 @@ $(function() {
126
124
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a7d3f7d27c9491b099a623ba03b1c4732"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">SVF::TypeBasedHeapCloning::pta</a></div><div class="ttdeci">BVDataPTAImpl * pta</div><div class="ttdoc">PTA extending this class. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00147">TypeBasedHeapCloning.h:147</a></div></div>
127
125
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a465e67781977e83526df7e36d576e539"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">SVF::TypeBasedHeapCloning::dchg</a></div><div class="ttdeci">DCHGraph * dchg</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00047">TypeBasedHeapCloning.h:47</a></div></div>
128
126
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a0a768e179a3a0c8c213ecca6f71a64c1"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a0a768e179a3a0c8c213ecca6f71a64c1">SVF::TypeBasedHeapCloning::objToAllocation</a></div><div class="ttdeci">Map&lt; NodeID, NodeID &gt; objToAllocation</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00156">TypeBasedHeapCloning.h:156</a></div></div>
129
- <div class="ttc" id="classSVF_1_1SVFIR_html_a83bc8ecf4c5d10af10af3c8c44b9882d"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">SVF::SVFIR::addObjNode</a></div><div class="ttdeci">NodeID addObjNode(const Value *val, NodeID i)</div><div class="ttdoc">Add a memory obj node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00505">SVFIR.h:505</a></div></div>
127
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a83bc8ecf4c5d10af10af3c8c44b9882d"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">SVF::SVFIR::addObjNode</a></div><div class="ttdeci">NodeID addObjNode(const Value *val, NodeID i)</div><div class="ttdoc">Add a memory obj node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00504">SVFIR.h:504</a></div></div>
130
128
  <div class="ttc" id="classSVF_1_1SVFIR_html_a3bbaafd80dfcae6ccc82c3d8b9d303ea"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a3bbaafd80dfcae6ccc82c3d8b9d303ea">SVF::SVFIR::getFieldObjNodeNum</a></div><div class="ttdeci">u32_t getFieldObjNodeNum() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00288">SVFIR.h:288</a></div></div>
131
129
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a9d2be5aec5216cbc1d1709b41f79c44b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">SVF::DCHGraph::isAgg</a></div><div class="ttdeci">static bool isAgg(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00342">DCHG.cpp:342</a></div></div>
132
130
  <div class="ttc" id="TypeBasedHeapCloning_8h_html"><div class="ttname"><a href="TypeBasedHeapCloning_8h.html">TypeBasedHeapCloning.h</a></div></div>
133
131
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a13ce6b930a35877f17bffd4b89e22654"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a13ce6b930a35877f17bffd4b89e22654">SVF::PointerAnalysis::aliasTestMayAliasMangled</a></div><div class="ttdeci">static const std::string aliasTestMayAliasMangled</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00118">PointerAnalysis.h:118</a></div></div>
134
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ad1c67da3aac128ca8a69907fdad53fcd"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ad1c67da3aac128ca8a69907fdad53fcd">SVF::TypeBasedHeapCloning::getObjsWithClones</a></div><div class="ttdeci">const NodeBS getObjsWithClones(void)</div><div class="ttdoc">Returns objects that have clones (any key in objToClones). </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00075">TypeBasedHeapCloning.cpp:75</a></div></div>
132
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ad1c67da3aac128ca8a69907fdad53fcd"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ad1c67da3aac128ca8a69907fdad53fcd">SVF::TypeBasedHeapCloning::getObjsWithClones</a></div><div class="ttdeci">const NodeBS getObjsWithClones(void)</div><div class="ttdoc">Returns objects that have clones (any key in objToClones). </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00076">TypeBasedHeapCloning.cpp:76</a></div></div>
135
133
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a18347e41bc66b16e3f42c7c52811ad42"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a18347e41bc66b16e3f42c7c52811ad42">SVF::PointerAnalysis::aliasTestFailNoAlias</a></div><div class="ttdeci">static const std::string aliasTestFailNoAlias</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00127">PointerAnalysis.h:127</a></div></div>
136
134
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a0b14eb60ddc73654bec24cd8142e447b"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a0b14eb60ddc73654bec24cd8142e447b">SVF::TypeBasedHeapCloning::numReuse</a></div><div class="ttdeci">unsigned numReuse</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00176">TypeBasedHeapCloning.h:176</a></div></div>
137
135
  <div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set&lt; Key, Hash, KeyEqual, Allocator &gt; Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00104">SVFBasicTypes.h:104</a></div></div>
138
136
  <div class="ttc" id="namespaceSVF_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="Util_2BasicTypes_8h_source.html#l00066">BasicTypes.h:66</a></div></div>
137
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html">BasicTypes.h</a></div></div>
138
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
139
139
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aee289e298e421448caaa604b7eb34fcb"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00099">PointerAnalysisImpl.h:99</a></div></div>
140
140
  <div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00069">BasicTypes.h:69</a></div></div>
141
- <div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00128">BasicTypes.h:128</a></div></div>
142
141
  <div class="ttc" id="classSVF_1_1GepObjVar_html_a5e371fae7592d763661a7cb777107ff4"><div class="ttname"><a href="classSVF_1_1GepObjVar.html#a5e371fae7592d763661a7cb777107ff4">SVF::GepObjVar::setBaseNode</a></div><div class="ttdeci">void setBaseNode(NodeID base)</div><div class="ttdoc">Set the base object from which this GEP node came from. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00486">SVFVariables.h:486</a></div></div>
143
142
  <div class="ttc" id="classSVF_1_1PointsTo_html_ac4688413177b49b37dbbfd3ed188d59b"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">SVF::PointsTo::empty</a></div><div class="ttdeci">bool empty(void) const</div><div class="ttdoc">Returns true if set is empty. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00094">PointsTo.cpp:94</a></div></div>
144
143
  <div class="ttc" id="classSVF_1_1DCHGraph_html_af0534356b4a8c68507e1237f1d7a8c11"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#af0534356b4a8c68507e1237f1d7a8c11">SVF::DCHGraph::isFieldOf</a></div><div class="ttdeci">virtual bool isFieldOf(const DIType *f, const DIType *b)</div><div class="ttdoc">Returns true if f is a field of b (fields from getFieldTypes). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00677">DCHG.cpp:677</a></div></div>
145
144
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ab1467e374b238b0f68d3fdd8f3ef6596"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ab1467e374b238b0f68d3fdd8f3ef6596">SVF::TypeBasedHeapCloning::mangledDerefFnName</a></div><div class="ttdeci">static const std::string mangledDerefFnName</div><div class="ttdoc">deref function (mangled) for TBHC alias tests. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00036">TypeBasedHeapCloning.h:36</a></div></div>
146
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a11c3d1b7f10e4aad2525d428f5855db5"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">SVF::TypeBasedHeapCloning::cloneObject</a></div><div class="ttdeci">NodeID cloneObject(NodeID o, const DIType *type, bool reuse)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00411">TypeBasedHeapCloning.cpp:411</a></div></div>
147
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_aaaf50870e50b45b44d4ecaaaab662770"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#aaaf50870e50b45b44d4ecaaaab662770">SVF::TypeBasedHeapCloning::setDCHG</a></div><div class="ttdeci">void setDCHG(DCHGraph *dchg)</div><div class="ttdoc">DCHG must be set by extending class once the DCHG is available. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00026">TypeBasedHeapCloning.cpp:26</a></div></div>
148
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a1a7b51e7d959795c00383721b013834d"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a1a7b51e7d959795c00383721b013834d">SVF::TypeBasedHeapCloning::dumpStats</a></div><div class="ttdeci">void dumpStats(void)</div><div class="ttdoc">Dump some statistics we tracked. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00731">TypeBasedHeapCloning.cpp:731</a></div></div>
149
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ae42ec334a7dfc96a5ead2d2845ca3b22"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ae42ec334a7dfc96a5ead2d2845ca3b22">SVF::TypeBasedHeapCloning::validateTBHCTests</a></div><div class="ttdeci">void validateTBHCTests(SVFModule *svfMod)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00562">TypeBasedHeapCloning.cpp:562</a></div></div>
145
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a11c3d1b7f10e4aad2525d428f5855db5"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">SVF::TypeBasedHeapCloning::cloneObject</a></div><div class="ttdeci">NodeID cloneObject(NodeID o, const DIType *type, bool reuse)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00412">TypeBasedHeapCloning.cpp:412</a></div></div>
146
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_aaaf50870e50b45b44d4ecaaaab662770"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#aaaf50870e50b45b44d4ecaaaab662770">SVF::TypeBasedHeapCloning::setDCHG</a></div><div class="ttdeci">void setDCHG(DCHGraph *dchg)</div><div class="ttdoc">DCHG must be set by extending class once the DCHG is available. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00027">TypeBasedHeapCloning.cpp:27</a></div></div>
147
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a1a7b51e7d959795c00383721b013834d"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a1a7b51e7d959795c00383721b013834d">SVF::TypeBasedHeapCloning::dumpStats</a></div><div class="ttdeci">void dumpStats(void)</div><div class="ttdoc">Dump some statistics we tracked. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00732">TypeBasedHeapCloning.cpp:732</a></div></div>
148
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ae42ec334a7dfc96a5ead2d2845ca3b22"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ae42ec334a7dfc96a5ead2d2845ca3b22">SVF::TypeBasedHeapCloning::validateTBHCTests</a></div><div class="ttdeci">void validateTBHCTests(SVFModule *svfMod)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00563">TypeBasedHeapCloning.cpp:563</a></div></div>
150
149
  <div class="ttc" id="classSVF_1_1LocationSet_html_abe990543374ebd8c1b3ee0d37c83eb8f"><div class="ttname"><a href="classSVF_1_1LocationSet.html#abe990543374ebd8c1b3ee0d37c83eb8f">SVF::LocationSet::setFldIdx</a></div><div class="ttdeci">void setFldIdx(s32_t idx)</div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00094">LocationSet.h:94</a></div></div>
151
150
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_aec884481726cfaf19c4ab8ec8d9195b7"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#aec884481726cfaf19c4ab8ec8d9195b7">SVF::PointerAnalysis::aliasTestMustAliasMangled</a></div><div class="ttdeci">static const std::string aliasTestMustAliasMangled</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00124">PointerAnalysis.h:124</a></div></div>
152
151
  <div class="ttc" id="classSVF_1_1SVFIR_html_a2b237e55fd8d7fd61eb3ac6968e4a76e"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2b237e55fd8d7fd61eb3ac6968e4a76e">SVF::SVFIR::CallSiteSet</a></div><div class="ttdeci">Set&lt; const CallICFGNode * &gt; CallSiteSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00052">SVFIR.h:52</a></div></div>
@@ -159,28 +158,30 @@ $(function() {
159
158
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
160
159
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a891a5873205bb98ad494a1c07231dc8a"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a891a5873205bb98ad494a1c07231dc8a">SVF::TypeBasedHeapCloning::numAgg</a></div><div class="ttdeci">unsigned numAgg</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00177">TypeBasedHeapCloning.h:177</a></div></div>
161
160
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ac44c7746d774af420ff2bc5ce98f5add"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ac44c7746d774af420ff2bc5ce98f5add">SVF::TypeBasedHeapCloning::numSGReuse</a></div><div class="ttdeci">unsigned numSGReuse</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00184">TypeBasedHeapCloning.h:184</a></div></div>
161
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
162
162
  <div class="ttc" id="classSVF_1_1GepObjVar_html"><div class="ttname"><a href="classSVF_1_1GepObjVar.html">SVF::GepObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00436">SVFVariables.h:436</a></div></div>
163
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ad043ab95900849a5a894ca4bada4e032"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ad043ab95900849a5a894ca4bada4e032">SVF::TypeBasedHeapCloning::getGepObjsFromMemObj</a></div><div class="ttdeci">const NodeBS &amp; getGepObjsFromMemObj(const MemObj *memObj, unsigned offset)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00132">TypeBasedHeapCloning.cpp:132</a></div></div>
163
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ad043ab95900849a5a894ca4bada4e032"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ad043ab95900849a5a894ca4bada4e032">SVF::TypeBasedHeapCloning::getGepObjsFromMemObj</a></div><div class="ttdeci">const NodeBS &amp; getGepObjsFromMemObj(const MemObj *memObj, unsigned offset)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00133">TypeBasedHeapCloning.cpp:133</a></div></div>
164
164
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a7477a4301d548b93958e57df389cbba0"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a7477a4301d548b93958e57df389cbba0">SVF::PointerAnalysis::aliasTestMustAlias</a></div><div class="ttdeci">static const std::string aliasTestMustAlias</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00123">PointerAnalysis.h:123</a></div></div>
165
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a5681d78630ca8770dd493ef3841ec683"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a5681d78630ca8770dd493ef3841ec683">SVF::TypeBasedHeapCloning::getAllocationSite</a></div><div class="ttdeci">NodeID getAllocationSite(NodeID o) const</div><div class="ttdoc">Returns the allocation site (from objToAllocation) of o. Asserts existence. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00069">TypeBasedHeapCloning.cpp:69</a></div></div>
165
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a5681d78630ca8770dd493ef3841ec683"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a5681d78630ca8770dd493ef3841ec683">SVF::TypeBasedHeapCloning::getAllocationSite</a></div><div class="ttdeci">NodeID getAllocationSite(NodeID o) const</div><div class="ttdoc">Returns the allocation site (from objToAllocation) of o. Asserts existence. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00070">TypeBasedHeapCloning.cpp:70</a></div></div>
166
166
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a86a51362c35c4a67fc1d4af655504493"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a86a51362c35c4a67fc1d4af655504493">SVF::TypeBasedHeapCloning::numSGTBSSU</a></div><div class="ttdeci">unsigned numSGTBSSU</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00182">TypeBasedHeapCloning.h:182</a></div></div>
167
167
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a51d2baff54d05cba59fa270c32cce87c"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a51d2baff54d05cba59fa270c32cce87c">SVF::TypeBasedHeapCloning::numSGTBSU</a></div><div class="ttdeci">unsigned numSGTBSU</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00183">TypeBasedHeapCloning.h:183</a></div></div>
168
168
  <div class="ttc" id="classSVF_1_1PointsTo_html_ab196d86cfb48d1c5d27a0c03c7497afa"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">SVF::PointsTo::set</a></div><div class="ttdeci">void set(u32_t n)</div><div class="ttdoc">Inserts n in the set. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00153">PointsTo.cpp:153</a></div></div>
169
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a21d2fd8bbef0c6f6ddddb5387569a7fa"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a21d2fd8bbef0c6f6ddddb5387569a7fa">SVF::TypeBasedHeapCloning::getRawCTirMetadata</a></div><div class="ttdeci">static const MDNode * getRawCTirMetadata(const Value *)</div><div class="ttdoc">Returns raw ctir metadata of a Value. Returns null if it doesn&amp;#39;t exist. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00483">TypeBasedHeapCloning.cpp:483</a></div></div>
169
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a21d2fd8bbef0c6f6ddddb5387569a7fa"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a21d2fd8bbef0c6f6ddddb5387569a7fa">SVF::TypeBasedHeapCloning::getRawCTirMetadata</a></div><div class="ttdeci">static const MDNode * getRawCTirMetadata(const Value *)</div><div class="ttdoc">Returns raw ctir metadata of a Value. Returns null if it doesn&amp;#39;t exist. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00484">TypeBasedHeapCloning.cpp:484</a></div></div>
170
170
  <div class="ttc" id="classSVF_1_1FIObjVar_html"><div class="ttname"><a href="classSVF_1_1FIObjVar.html">SVF::FIObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00518">SVFVariables.h:518</a></div></div>
171
171
  <div class="ttc" id="PointerAnalysisImpl_8h_html"><div class="ttname"><a href="PointerAnalysisImpl_8h.html">PointerAnalysisImpl.h</a></div></div>
172
172
  <div class="ttc" id="classSVF_1_1SVFIR_html_ad9895f2d075eb402390e3b01ed68e001"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ad9895f2d075eb402390e3b01ed68e001">SVF::SVFIR::isBlkObjOrConstantObj</a></div><div class="ttdeci">bool isBlkObjOrConstantObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00387">SVFIR.h:387</a></div></div>
173
173
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a83b0a51d88fa7aadff6e9267765d07a5"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a83b0a51d88fa7aadff6e9267765d07a5">SVF::PointerAnalysis::aliasTestPartialAlias</a></div><div class="ttdeci">static const std::string aliasTestPartialAlias</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00121">PointerAnalysis.h:121</a></div></div>
174
174
  <div class="ttc" id="classSVF_1_1CloneDummyObjVar_html"><div class="ttname"><a href="classSVF_1_1CloneDummyObjVar.html">SVF::CloneDummyObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00741">SVFVariables.h:741</a></div></div>
175
175
  <div class="ttc" id="classSVF_1_1CloneGepObjVar_html"><div class="ttname"><a href="classSVF_1_1CloneGepObjVar.html">SVF::CloneGepObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00777">SVFVariables.h:777</a></div></div>
176
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_add00f1c20a524c0be903af679bd6f638"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638">SVF::TypeBasedHeapCloning::isBase</a></div><div class="ttdeci">bool isBase(const DIType *a, const DIType *b) const</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00042">TypeBasedHeapCloning.cpp:42</a></div></div>
177
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a219edef6c013a953ed12ee3c56bde6de"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">SVF::TypeBasedHeapCloning::getType</a></div><div class="ttdeci">const DIType * getType(NodeID o) const</div><div class="ttdoc">Returns the type (from objToType) of o. Asserts existence. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00058">TypeBasedHeapCloning.cpp:58</a></div></div>
176
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_add00f1c20a524c0be903af679bd6f638"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638">SVF::TypeBasedHeapCloning::isBase</a></div><div class="ttdeci">bool isBase(const DIType *a, const DIType *b) const</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00043">TypeBasedHeapCloning.cpp:43</a></div></div>
177
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a219edef6c013a953ed12ee3c56bde6de"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">SVF::TypeBasedHeapCloning::getType</a></div><div class="ttdeci">const DIType * getType(NodeID o) const</div><div class="ttdoc">Returns the type (from objToType) of o. Asserts existence. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00059">TypeBasedHeapCloning.cpp:59</a></div></div>
178
178
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_ae6ea391ac44dffeb6899bb44323c5361"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">SVF::PointerAnalysis::isHeapMemObj</a></div><div class="ttdeci">bool isHeapMemObj(NodeID id) const</div><div class="ttdoc">Whether this object is heap or array. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00317">PointerAnalysis.h:317</a></div></div>
179
- <div class="ttc" id="classSVF_1_1CallSite_html_ae9b0172e29199f2a938d7cf9e42241cf"><div class="ttname"><a href="classSVF_1_1CallSite.html#ae9b0172e29199f2a938d7cf9e42241cf">SVF::CallSite::getCalledFunction</a></div><div class="ttdeci">Function * getCalledFunction() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00252">BasicTypes.h:252</a></div></div>
180
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a006243a1416f4950de254d0d62ba40b0"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a006243a1416f4950de254d0d62ba40b0">SVF::TypeBasedHeapCloning::setAllocationSite</a></div><div class="ttdeci">void setAllocationSite(NodeID o, NodeID site)</div><div class="ttdoc">Sets the allocation site (in objToAllocation) of o. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00064">TypeBasedHeapCloning.cpp:64</a></div></div>
179
+ <div class="ttc" id="classSVF_1_1CallSite_html_ae9b0172e29199f2a938d7cf9e42241cf"><div class="ttname"><a href="classSVF_1_1CallSite.html#ae9b0172e29199f2a938d7cf9e42241cf">SVF::CallSite::getCalledFunction</a></div><div class="ttdeci">Function * getCalledFunction() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00244">BasicTypes.h:244</a></div></div>
180
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a006243a1416f4950de254d0d62ba40b0"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a006243a1416f4950de254d0d62ba40b0">SVF::TypeBasedHeapCloning::setAllocationSite</a></div><div class="ttdeci">void setAllocationSite(NodeID o, NodeID site)</div><div class="ttdoc">Sets the allocation site (in objToAllocation) of o. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00065">TypeBasedHeapCloning.cpp:65</a></div></div>
181
181
  <div class="ttc" id="classSVF_1_1DCHGraph_html_acaff636e6a9cf59363d6ee00435c04ff"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#acaff636e6a9cf59363d6ee00435c04ff">SVF::DCHGraph::getFieldType</a></div><div class="ttdeci">const DIType * getFieldType(const DIType *base, unsigned idx)</div><div class="ttdoc">Returns the type of field number idx (flattened) in base. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00291">DCHG.h:291</a></div></div>
182
182
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a079feacdcc3783f4a9108a3b2d2aed2c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">SVF::DCHGraph::getCanonicalType</a></div><div class="ttdeci">const DIType * getCanonicalType(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00713">DCHG.cpp:713</a></div></div>
183
- <div class="ttc" id="namespaceSVF_html_ad3d3cec1813411f039211c86236f7adb"><div class="ttname"><a href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">SVF::MDNode</a></div><div class="ttdeci">llvm::MDNode MDNode</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00102">BasicTypes.h:102</a></div></div>
183
+ <div class="ttc" id="namespaceSVF_html_ad3d3cec1813411f039211c86236f7adb"><div class="ttname"><a href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">SVF::MDNode</a></div><div class="ttdeci">llvm::MDNode MDNode</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
184
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a16adea95b46c741a8990d92d29f33bb6"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a16adea95b46c741a8990d92d29f33bb6">GlobalObject</a></div><div class="ttdeci">llvm::GlobalObject GlobalObject</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00028">BasicTypes.h:28</a></div></div>
184
185
  <div class="ttc" id="classSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00363">ICFGNode.h:363</a></div></div>
185
186
  <div class="ttc" id="classSVF_1_1DCHGraph_html_ab33f9af6ad22eb99dd0d9950fb0e50e6"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#ab33f9af6ad22eb99dd0d9950fb0e50e6">SVF::DCHGraph::isBase</a></div><div class="ttdeci">virtual bool isBase(const DIType *a, const DIType *b, bool firstField)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00666">DCHG.cpp:666</a></div></div>
186
187
  <div class="ttc" id="classSVF_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#l00070">LLVMModule.h:70</a></div></div>
@@ -189,43 +190,43 @@ $(function() {
189
190
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_aefd4e9ea66da5ad84a45efead823eb22"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#aefd4e9ea66da5ad84a45efead823eb22">SVF::PointerAnalysis::aliasTestFailNoAliasMangled</a></div><div class="ttdeci">static const std::string aliasTestFailNoAliasMangled</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00128">PointerAnalysis.h:128</a></div></div>
190
191
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_accbf71007be662ee2436ca3d76b903ed"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#accbf71007be662ee2436ca3d76b903ed">SVF::TypeBasedHeapCloning::cloneToOriginalObj</a></div><div class="ttdeci">Map&lt; NodeID, NodeID &gt; cloneToOriginalObj</div><div class="ttdoc">(Clone) object -&gt; original object (opposite of objToclones). </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00160">TypeBasedHeapCloning.h:160</a></div></div>
191
192
  <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8h_source.html#l00035">CFGNormalizer.h:35</a></div></div>
192
- <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00207">BasicTypes.h:207</a></div></div>
193
+ <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00199">BasicTypes.h:199</a></div></div>
193
194
  <div class="ttc" id="classSVF_1_1NodeIDAllocator_html_a2bd3ca30fc9669d9a0327544bdb4557b"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">SVF::NodeIDAllocator::get</a></div><div class="ttdeci">static NodeIDAllocator * get(void)</div><div class="ttdoc">Return (singleton) allocator. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00025">NodeIDAllocator.cpp:25</a></div></div>
194
195
  <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00169">GenericGraph.h:169</a></div></div>
195
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_abce2ba326af69312c5971246cc4c10dc"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#abce2ba326af69312c5971246cc4c10dc">SVF::TypeBasedHeapCloning::isClone</a></div><div class="ttdeci">bool isClone(NodeID o) const</div><div class="ttdoc">Returns true if o is a clone. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00048">TypeBasedHeapCloning.cpp:48</a></div></div>
196
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_abce2ba326af69312c5971246cc4c10dc"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#abce2ba326af69312c5971246cc4c10dc">SVF::TypeBasedHeapCloning::isClone</a></div><div class="ttdeci">bool isClone(NodeID o) const</div><div class="ttdoc">Returns true if o is a clone. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00049">TypeBasedHeapCloning.cpp:49</a></div></div>
196
197
  <div class="ttc" id="classSVF_1_1LocationSet_html"><div class="ttname"><a href="classSVF_1_1LocationSet.html">SVF::LocationSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00048">LocationSet.h:48</a></div></div>
197
198
  <div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00095">SVFBasicTypes.h:95</a></div></div>
198
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_af127bed600087b1ace26088a76ca8998"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#af127bed600087b1ace26088a76ca8998">SVF::TypeBasedHeapCloning::getClones</a></div><div class="ttdeci">const NodeBS &amp; getClones(NodeID o)</div><div class="ttdoc">Returns all the clones of o. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00091">TypeBasedHeapCloning.cpp:91</a></div></div>
199
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_af127bed600087b1ace26088a76ca8998"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#af127bed600087b1ace26088a76ca8998">SVF::TypeBasedHeapCloning::getClones</a></div><div class="ttdeci">const NodeBS &amp; getClones(NodeID o)</div><div class="ttdoc">Returns all the clones of o. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00092">TypeBasedHeapCloning.cpp:92</a></div></div>
199
200
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_af5cf059dea30a0b422321e3a792ea447"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#af5cf059dea30a0b422321e3a792ea447">SVF::TypeBasedHeapCloning::numTBSSU</a></div><div class="ttdeci">unsigned numTBSSU</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00174">TypeBasedHeapCloning.h:174</a></div></div>
200
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ae520e0551e63223a908f92a6b9667356"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">SVF::TypeBasedHeapCloning::getFilterSet</a></div><div class="ttdeci">PointsTo &amp; getFilterSet(NodeID loc)</div><div class="ttdoc">Returns the filter set of a location. Not const; could create empty PointsTo. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00113">TypeBasedHeapCloning.cpp:113</a></div></div>
201
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ae520e0551e63223a908f92a6b9667356"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">SVF::TypeBasedHeapCloning::getFilterSet</a></div><div class="ttdeci">PointsTo &amp; getFilterSet(NodeID loc)</div><div class="ttdoc">Returns the filter set of a location. Not const; could create empty PointsTo. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00114">TypeBasedHeapCloning.cpp:114</a></div></div>
201
202
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_adaba5a41a60e32d18d964bdb8ae5b2df"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df">SVF::BVDataPTAImpl::alias</a></div><div class="ttdeci">virtual AliasResult alias(const Value *V1, const Value *V2)</div><div class="ttdoc">Interface expose to users of our pointer analysis, given Value infos. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00463">PointerAnalysisImpl.cpp:463</a></div></div>
202
203
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
203
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a724cdfa6fbf6b2b401332ea83265c4c2"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a724cdfa6fbf6b2b401332ea83265c4c2">SVF::TypeBasedHeapCloning::isGep</a></div><div class="ttdeci">bool isGep(const PAGNode *n) const</div><div class="ttdoc">Test whether object is a GEP object. For convenience. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00539">TypeBasedHeapCloning.cpp:539</a></div></div>
204
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ac6ebb2fd24fc4272faf5db6ddd1e464b"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ac6ebb2fd24fc4272faf5db6ddd1e464b">SVF::TypeBasedHeapCloning::addCloneDummyObjNode</a></div><div class="ttdeci">NodeID addCloneDummyObjNode(const MemObj *mem)</div><div class="ttdoc">Add clone dummy object node to SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00501">TypeBasedHeapCloning.cpp:501</a></div></div>
204
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a724cdfa6fbf6b2b401332ea83265c4c2"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a724cdfa6fbf6b2b401332ea83265c4c2">SVF::TypeBasedHeapCloning::isGep</a></div><div class="ttdeci">bool isGep(const PAGNode *n) const</div><div class="ttdoc">Test whether object is a GEP object. For convenience. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00540">TypeBasedHeapCloning.cpp:540</a></div></div>
205
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ac6ebb2fd24fc4272faf5db6ddd1e464b"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ac6ebb2fd24fc4272faf5db6ddd1e464b">SVF::TypeBasedHeapCloning::addCloneDummyObjNode</a></div><div class="ttdeci">NodeID addCloneDummyObjNode(const MemObj *mem)</div><div class="ttdoc">Add clone dummy object node to SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00502">TypeBasedHeapCloning.cpp:502</a></div></div>
206
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
205
207
  <div class="ttc" id="classSVF_1_1MemObj_html_a4da54ef60231d2e6c26669226b99d2f3"><div class="ttname"><a href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">SVF::MemObj::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get the reference value to this object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00396">SymbolTableInfo.h:396</a></div></div>
206
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ac4565775cced4444ba007e310c4a02d8"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ac4565775cced4444ba007e310c4a02d8">SVF::TypeBasedHeapCloning::getTypeFromCTirMetadata</a></div><div class="ttdeci">const DIType * getTypeFromCTirMetadata(const Value *)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00519">TypeBasedHeapCloning.cpp:519</a></div></div>
208
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ac4565775cced4444ba007e310c4a02d8"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ac4565775cced4444ba007e310c4a02d8">SVF::TypeBasedHeapCloning::getTypeFromCTirMetadata</a></div><div class="ttdeci">const DIType * getTypeFromCTirMetadata(const Value *)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00520">TypeBasedHeapCloning.cpp:520</a></div></div>
207
209
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_acbb517523fd30708ed1a93f306cd3545"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#acbb517523fd30708ed1a93f306cd3545">SVF::PointerAnalysis::aliasTestPartialAliasMangled</a></div><div class="ttdeci">static const std::string aliasTestPartialAliasMangled</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00122">PointerAnalysis.h:122</a></div></div>
208
210
  <div class="ttc" id="namespaceSVF_html_a61c01e2e687ab3a001fb806737583943aa03eb20fd81629154d6c346763ea64d6"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aa03eb20fd81629154d6c346763ea64d6">SVF::PartialAlias</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00200">SVFBasicTypes.h:200</a></div></div>
209
211
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a36d5f03d899dd21392c327115ff2f9d9"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a36d5f03d899dd21392c327115ff2f9d9">SVF::TypeBasedHeapCloning::objToClones</a></div><div class="ttdeci">Map&lt; NodeID, NodeBS &gt; objToClones</div><div class="ttdoc">(Original) object -&gt; set of its clones. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00158">TypeBasedHeapCloning.h:158</a></div></div>
210
212
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a6c06020737f7dff22a666b75c28c5e7d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a6c06020737f7dff22a666b75c28c5e7d">SVF::SVFUtil::wrnMsg</a></div><div class="ttdeci">std::string wrnMsg(std::string msg)</div><div class="ttdoc">Returns warning message by converting a string into yellow string output. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00064">SVFUtil.cpp:64</a></div></div>
211
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_aa175b5db473eb57c03b6f908791d1133"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#aa175b5db473eb57c03b6f908791d1133">SVF::TypeBasedHeapCloning::getGepObjClones</a></div><div class="ttdeci">const NodeBS getGepObjClones(NodeID base, unsigned offset)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00142">TypeBasedHeapCloning.cpp:142</a></div></div>
213
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_aa175b5db473eb57c03b6f908791d1133"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#aa175b5db473eb57c03b6f908791d1133">SVF::TypeBasedHeapCloning::getGepObjClones</a></div><div class="ttdeci">const NodeBS getGepObjClones(NodeID base, unsigned offset)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00143">TypeBasedHeapCloning.cpp:143</a></div></div>
212
214
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a882afb13844ed039d18d325e92819f77"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a882afb13844ed039d18d325e92819f77">SVF::TypeBasedHeapCloning::memObjToGeps</a></div><div class="ttdeci">Map&lt; const MemObj *, Map&lt; unsigned, NodeBS &gt; &gt; memObjToGeps</div><div class="ttdoc">Maps memory objects to their GEP objects. (memobj -&gt; (fieldidx -&gt; geps)) </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00166">TypeBasedHeapCloning.h:166</a></div></div>
213
215
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph::getGNode</a></div><div class="ttdeci">NodeType * getGNode(NodeID id) const</div><div class="ttdoc">Get a node. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00391">GenericGraph.h:391</a></div></div>
214
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ae83ef821386b3fd4b86f29477cdda3e1"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ae83ef821386b3fd4b86f29477cdda3e1">SVF::TypeBasedHeapCloning::addClone</a></div><div class="ttdeci">void addClone(NodeID o, NodeID c)</div><div class="ttdoc">Add a clone c to object o. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00086">TypeBasedHeapCloning.cpp:86</a></div></div>
216
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ae83ef821386b3fd4b86f29477cdda3e1"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ae83ef821386b3fd4b86f29477cdda3e1">SVF::TypeBasedHeapCloning::addClone</a></div><div class="ttdeci">void addClone(NodeID o, NodeID c)</div><div class="ttdoc">Add a clone c to object o. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00087">TypeBasedHeapCloning.cpp:87</a></div></div>
215
217
  <div class="ttc" id="classSVF_1_1PointsTo_html"><div class="ttname"><a href="classSVF_1_1PointsTo.html">SVF::PointsTo</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00027">PointsTo.h:27</a></div></div>
216
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a34064efe336ada815b31050f683c7ce1"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a34064efe336ada815b31050f683c7ce1">SVF::TypeBasedHeapCloning::init</a></div><div class="ttdeci">bool init(NodeID loc, NodeID p, const DIType *tildet, bool reuse, bool gep=false)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00271">TypeBasedHeapCloning.cpp:271</a></div></div>
218
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a34064efe336ada815b31050f683c7ce1"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a34064efe336ada815b31050f683c7ce1">SVF::TypeBasedHeapCloning::init</a></div><div class="ttdeci">bool init(NodeID loc, NodeID p, const DIType *tildet, bool reuse, bool gep=false)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00272">TypeBasedHeapCloning.cpp:272</a></div></div>
217
219
  <div class="ttc" id="classSVF_1_1SVFIR_html"><div class="ttname"><a href="classSVF_1_1SVFIR.html">SVF::SVFIR</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00043">SVFIR.h:43</a></div></div>
218
220
  <div class="ttc" id="namespaceSVF_html_a8bd74fdcb0e58d0249003df9c3fb8b31"><div class="ttname"><a href="namespaceSVF.html#a8bd74fdcb0e58d0249003df9c3fb8b31">SVF::OutStream</a></div><div class="ttdeci">std::ostream OutStream</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00082">SVFBasicTypes.h:82</a></div></div>
219
221
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a5d4bb92f5df30417f414397f8e58cf01"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a5d4bb92f5df30417f414397f8e58cf01">SVF::SVFUtil::errMsg</a></div><div class="ttdeci">std::string errMsg(std::string 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#l00078">SVFUtil.cpp:78</a></div></div>
220
222
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a2b2dbc52089696854a8339f2e83fc333"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a2b2dbc52089696854a8339f2e83fc333">SVF::DCHGraph::isFirstField</a></div><div class="ttdeci">bool isFirstField(const DIType *f, const DIType *b)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00931">DCHG.cpp:931</a></div></div>
221
- <div class="ttc" id="classSVF_1_1SVFIR_html_a20c0c65af266ac876cb722aee6e87101"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">SVF::SVFIR::getGepObjVar</a></div><div class="ttdeci">NodeID getGepObjVar(const MemObj *obj, const LocationSet &amp;ls)</div><div class="ttdoc">Get a field SVFIR Object node according to base mem obj and offset. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00429">SVFIR.cpp:429</a></div></div>
223
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a20c0c65af266ac876cb722aee6e87101"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">SVF::SVFIR::getGepObjVar</a></div><div class="ttdeci">NodeID getGepObjVar(const MemObj *obj, const LocationSet &amp;ls)</div><div class="ttdoc">Get a field SVFIR Object node according to base mem obj and offset. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00427">SVFIR.cpp:427</a></div></div>
222
224
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_aed4e5066f6ddef83afaf60adbcc11de0"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#aed4e5066f6ddef83afaf60adbcc11de0">SVF::PointerAnalysis::PTAName</a></div><div class="ttdeci">virtual const std::string PTAName() const</div><div class="ttdoc">Return PTA name. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00430">PointerAnalysis.h:430</a></div></div>
223
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_aeea7089c6f54b44f0509d41686b649f6"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">SVF::TypeBasedHeapCloning::getOriginalObj</a></div><div class="ttdeci">NodeID getOriginalObj(NodeID c) const</div><div class="ttdoc">Returns the original object c is cloned from. If c is not a clone, returns itself. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00101">TypeBasedHeapCloning.cpp:101</a></div></div>
225
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_aeea7089c6f54b44f0509d41686b649f6"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">SVF::TypeBasedHeapCloning::getOriginalObj</a></div><div class="ttdeci">NodeID getOriginalObj(NodeID c) const</div><div class="ttdoc">Returns the original object c is cloned from. If c is not a clone, returns itself. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00102">TypeBasedHeapCloning.cpp:102</a></div></div>
224
226
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a32c6f12ce8bc0554dbb6aafa36f9a235"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a32c6f12ce8bc0554dbb6aafa36f9a235">SVF::PointerAnalysis::aliasTestFailMayAlias</a></div><div class="ttdeci">static const std::string aliasTestFailMayAlias</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00125">PointerAnalysis.h:125</a></div></div>
225
227
  <div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00068">BasicTypes.h:68</a></div></div>
226
- <div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdoc">LLVM debug information. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00126">BasicTypes.h:126</a></div></div>
227
228
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a4c658be1ade99ad1e848cd80332e38ce"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a4c658be1ade99ad1e848cd80332e38ce">SVF::TypeBasedHeapCloning::numInit</a></div><div class="ttdeci">unsigned numInit</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00172">TypeBasedHeapCloning.h:172</a></div></div>
228
- <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ad07fb204258fccda89053514338e3804"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ad07fb204258fccda89053514338e3804">SVF::TypeBasedHeapCloning::addGepToObj</a></div><div class="ttdeci">void addGepToObj(NodeID gep, NodeID base, unsigned offset)</div><div class="ttdoc">Associates gep with base (through objToGeps and memObjToGeps). </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00118">TypeBasedHeapCloning.cpp:118</a></div></div>
229
+ <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ad07fb204258fccda89053514338e3804"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ad07fb204258fccda89053514338e3804">SVF::TypeBasedHeapCloning::addGepToObj</a></div><div class="ttdeci">void addGepToObj(NodeID gep, NodeID base, unsigned offset)</div><div class="ttdoc">Associates gep with base (through objToGeps and memObjToGeps). </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00119">TypeBasedHeapCloning.cpp:119</a></div></div>
229
230
  <div class="ttc" id="namespaceSVF_html_a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239">SVF::NoAlias</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00197">SVFBasicTypes.h:197</a></div></div>
230
231
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_afca6afa06a1072e7a452ed42bcd666d3"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#afca6afa06a1072e7a452ed42bcd666d3">SVF::TypeBasedHeapCloning::numSGTBWU</a></div><div class="ttdeci">unsigned numSGTBWU</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00181">TypeBasedHeapCloning.h:181</a></div></div>
231
232
  <div class="ttc" id="namespaceSVF_html_a61c01e2e687ab3a001fb806737583943ab58a0391f037031a51016ebfe2a752b2"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943ab58a0391f037031a51016ebfe2a752b2">SVF::MustAlias</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00199">SVFBasicTypes.h:199</a></div></div>