svf-tools 1.0.455 → 1.0.458

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 (323) hide show
  1. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +1 -1
  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 +3 -3
  6. package/SVF-doxygen/html/html/BDDExpr_8cpp_source.html +1 -1
  7. package/SVF-doxygen/html/html/BDDExpr_8h_source.html +1 -1
  8. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp.html +1 -1
  9. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +3 -3
  10. package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +3 -3
  11. package/SVF-doxygen/html/html/CFLAlias_8h_source.html +1 -1
  12. package/SVF-doxygen/html/html/CFLGraph_8cpp_source.html +1 -1
  13. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +15 -15
  14. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +5 -5
  15. package/SVF-doxygen/html/html/CHG_8cpp.html +2 -2
  16. package/SVF-doxygen/html/html/CHG_8cpp_source.html +10 -10
  17. package/SVF-doxygen/html/html/CHG_8h_source.html +3 -3
  18. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +19 -19
  19. package/SVF-doxygen/html/html/CPPUtil_8h_source.html +3 -3
  20. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +3 -3
  21. package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +1 -1
  22. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
  23. package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
  24. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +4 -4
  25. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
  26. package/SVF-doxygen/html/html/CxtStmt_8h_source.html +4 -4
  27. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +14 -14
  28. package/SVF-doxygen/html/html/DCHG_8h_source.html +8 -8
  29. package/SVF-doxygen/html/html/DDAClient_8cpp_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 +3 -3
  32. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +2 -2
  33. package/SVF-doxygen/html/html/DPItem_8h_source.html +1 -1
  34. package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +7 -7
  35. package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +8 -8
  36. package/SVF-doxygen/html/html/ExeState_8cpp_source.html +4 -4
  37. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +3 -3
  38. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +1 -1
  39. package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
  40. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
  41. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
  42. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +1 -1
  43. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp.html +3 -3
  44. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +4 -4
  45. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +2 -2
  46. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
  47. package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +3 -3
  48. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +2 -2
  49. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +5 -5
  50. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +2 -2
  51. package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +2 -2
  52. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +3 -3
  53. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +5 -5
  54. package/SVF-doxygen/html/html/ICFG_8h_source.html +3 -3
  55. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +9 -9
  56. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +2 -2
  57. package/SVF-doxygen/html/html/IRGraph_8h_source.html +3 -3
  58. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +8 -8
  59. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +6 -6
  60. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +15 -15
  61. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +15 -15
  62. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
  63. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +1 -1
  64. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +5 -5
  65. package/SVF-doxygen/html/html/LocationSet_8h_source.html +2 -2
  66. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +7 -7
  67. package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +4 -4
  68. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +10 -10
  69. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +2 -2
  70. package/SVF-doxygen/html/html/MHP_8cpp.html +1 -1
  71. package/SVF-doxygen/html/html/MHP_8cpp_source.html +9 -9
  72. package/SVF-doxygen/html/html/MHP_8h_source.html +4 -4
  73. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -2
  74. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +5 -5
  75. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +5 -5
  76. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +14 -14
  77. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +6 -6
  78. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +4 -4
  79. package/SVF-doxygen/html/html/MTA_8cpp_source.html +4 -4
  80. package/SVF-doxygen/html/html/MTA_8h_source.html +3 -3
  81. package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +1 -1
  82. package/SVF-doxygen/html/html/MemPartition_8h_source.html +1 -1
  83. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +7 -7
  84. package/SVF-doxygen/html/html/MemRegion_8h_source.html +3 -3
  85. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +8 -8
  86. package/SVF-doxygen/html/html/MemSSA_8h_source.html +4 -4
  87. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
  88. package/SVF-doxygen/html/html/PCG_8cpp_source.html +7 -7
  89. package/SVF-doxygen/html/html/PCG_8h_source.html +3 -3
  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/PTAStat_8cpp_source.html +3 -3
  93. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +9 -9
  94. package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +7 -7
  95. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +1 -1
  96. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +1 -1
  97. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +13 -13
  98. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +2 -2
  99. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +3 -3
  100. package/SVF-doxygen/html/html/ProgSlice_8h_source.html +1 -1
  101. package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +2 -2
  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 +3 -3
  107. package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
  108. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +30 -30
  109. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +14 -14
  110. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +2 -2
  111. package/SVF-doxygen/html/html/SVFIR_8h_source.html +3 -3
  112. package/SVF-doxygen/html/html/SVFModule_8h_source.html +4 -4
  113. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
  114. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +3 -3
  115. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +12 -12
  116. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +10 -10
  117. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +2 -2
  118. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +6 -6
  119. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +3 -3
  120. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +2 -2
  121. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +2 -2
  122. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
  123. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +18 -18
  124. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +5 -5
  125. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +9 -9
  126. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +5 -5
  127. package/SVF-doxygen/html/html/TCT_8cpp_source.html +13 -13
  128. package/SVF-doxygen/html/html/TCT_8h_source.html +10 -10
  129. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +5 -5
  130. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +6 -6
  131. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +3 -3
  132. package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +2 -2
  133. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +3 -3
  134. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +13 -13
  135. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +3 -3
  136. package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +1 -0
  137. package/SVF-doxygen/html/html/Util_2BasicTypes_8h_source.html +84 -84
  138. package/SVF-doxygen/html/html/VFGNode_8h_source.html +3 -3
  139. package/SVF-doxygen/html/html/VFG_8cpp_source.html +4 -4
  140. package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
  141. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +1 -1
  142. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
  143. package/SVF-doxygen/html/html/WPAPass_8h_source.html +4 -4
  144. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  145. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  146. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
  148. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
  149. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +1 -1
  150. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +5 -5
  151. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +1 -1
  152. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +1 -1
  153. package/SVF-doxygen/html/html/classSVF_1_1Annotator.html +1 -1
  154. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +1 -1
  155. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +1 -1
  156. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
  157. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  158. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +1 -1
  159. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +1 -1
  160. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +1 -1
  161. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +29 -29
  162. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +7 -7
  163. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +1 -1
  164. package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +1 -1
  165. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +3 -3
  166. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +1 -1
  167. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +1 -1
  168. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  169. package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +41 -41
  170. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +1 -1
  171. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +1 -1
  172. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +1 -1
  173. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
  174. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
  175. package/SVF-doxygen/html/html/classSVF_1_1CondStdSet.html +1 -1
  176. package/SVF-doxygen/html/html/classSVF_1_1CondVar.html +1 -1
  177. package/SVF-doxygen/html/html/classSVF_1_1ContextCond.html +1 -1
  178. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +6 -6
  179. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
  180. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +1 -1
  181. package/SVF-doxygen/html/html/classSVF_1_1CxtProc.html +1 -1
  182. package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
  183. package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
  184. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +42 -42
  185. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +2 -2
  186. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +1 -1
  187. package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +1 -1
  188. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +1 -1
  189. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +1 -1
  190. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +1 -1
  191. package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +6 -6
  192. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
  193. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +2 -2
  194. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +1 -1
  195. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +8 -8
  196. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +20 -20
  197. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
  198. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
  199. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
  200. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
  201. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +2 -2
  202. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +2 -2
  203. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
  204. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +1 -1
  205. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
  206. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +1 -1
  207. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +1 -1
  208. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +1 -1
  209. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +2 -2
  210. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +10 -10
  211. package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +1 -1
  212. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
  213. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +2 -2
  214. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +1 -1
  215. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +1 -1
  216. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  217. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  218. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +1 -1
  219. package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +1 -1
  220. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +1 -1
  221. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +1 -1
  222. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +1 -1
  223. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
  224. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  225. package/SVF-doxygen/html/html/classSVF_1_1IteratedDominanceFrontier.html +3 -3
  226. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +16 -16
  227. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
  228. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
  229. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +1 -1
  230. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +6 -6
  231. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +30 -30
  232. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +12 -12
  233. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +25 -25
  234. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +9 -9
  235. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
  236. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
  237. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +3 -3
  238. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +8 -8
  239. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +26 -26
  240. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +9 -9
  241. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +5 -5
  242. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +1 -1
  243. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +16 -16
  244. package/SVF-doxygen/html/html/classSVF_1_1MemSSADF.html +1 -1
  245. package/SVF-doxygen/html/html/classSVF_1_1MergeFunctionRets.html +2 -2
  246. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +1 -1
  247. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +2 -2
  248. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
  249. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +19 -19
  250. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
  251. package/SVF-doxygen/html/html/classSVF_1_1PTACFInfoBuilder.html +7 -7
  252. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +1 -1
  253. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +1 -1
  254. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +1 -1
  255. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +3 -3
  256. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +22 -22
  257. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
  258. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +19 -19
  259. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +4 -4
  260. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +8 -8
  261. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +1 -1
  262. package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +1 -1
  263. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +1 -1
  264. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +1 -1
  265. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  266. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +1 -1
  267. package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +3 -3
  268. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +29 -29
  269. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +2 -2
  270. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +3 -3
  271. package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal.html +3 -3
  272. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +82 -82
  273. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +2 -2
  274. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +4 -4
  275. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +7 -7
  276. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +2 -2
  277. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
  278. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +1 -1
  279. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
  280. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +1 -1
  281. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +26 -26
  282. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +13 -13
  283. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +30 -30
  284. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  285. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  286. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +5 -5
  287. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +9 -9
  288. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +2 -2
  289. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +1 -1
  290. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +1 -1
  291. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +1 -1
  292. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +3 -3
  293. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +17 -17
  294. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
  295. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  296. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +4 -4
  297. package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +1 -1
  298. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
  299. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
  300. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +1 -1
  301. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +1 -1
  302. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +1 -1
  303. package/SVF-doxygen/html/html/classllvm_1_1generic__bridge__gep__type__iterator.html +3 -3
  304. package/SVF-doxygen/html/html/namespaceSVF.html +47 -47
  305. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +44 -44
  306. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +36 -36
  307. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4.html +3 -3
  308. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  309. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +2 -2
  310. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
  311. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
  312. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PTACallGraph_01_5_01_4.html +2 -2
  313. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +4 -4
  314. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +4 -4
  315. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CallSite_01_4.html +3 -3
  316. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtProc_01_4.html +1 -1
  317. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtStmt_01_4.html +1 -1
  318. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  319. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +3 -3
  320. package/include/Util/BasicTypes.h +1 -0
  321. package/lib/SVF-FE/SVFIRBuilder.cpp +3 -3
  322. package/lib/Util/ExeState.cpp +2 -2
  323. package/package.json +1 -1
@@ -471,7 +471,7 @@ Additional Inherited Members</h2></td></tr>
471
471
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph&lt; DCHNode, DCHEdge &gt;::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
472
472
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a9ed6b91fad334605f514049a2072b538"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">SVF::DCHGraph::getOrCreateNode</a></div><div class="ttdeci">DCHNode * getOrCreateNode(const DIType *type)</div><div class="ttdoc">Creates a node from type, or returns it if it exists. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00403">DCHG.cpp:403</a></div></div>
473
473
  <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>
474
- <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#l00128">BasicTypes.h:128</a></div></div>
474
+ <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#l00129">BasicTypes.h:129</a></div></div>
475
475
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a671f379ae54eef247b5e013478eb3f0c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a671f379ae54eef247b5e013478eb3f0c">SVF::DCHGraph::handleDISubroutineType</a></div><div class="ttdeci">void handleDISubroutineType(const DISubroutineType *subroutineType)</div><div class="ttdoc">Construction helper to process DISubroutineTypes. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00133">DCHG.cpp:133</a></div></div>
476
476
  <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>
477
477
  <div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00084">SVFBasicTypes.h:84</a></div></div>
@@ -481,7 +481,7 @@ Additional Inherited Members</h2></td></tr>
481
481
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a294a2075c97e1db8003393fb472c1def"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">SVF::DCHGraph::addEdge</a></div><div class="ttdeci">DCHEdge * addEdge(const DIType *t1, const DIType *t2, DCHEdge::GEdgeKind et)</div><div class="ttdoc">Creates an edge between from t1 to t2. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00421">DCHG.cpp:421</a></div></div>
482
482
  <div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph&lt; DCHNode, DCHEdge &gt;::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00342">GenericGraph.h:342</a></div></div>
483
483
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a1a4162e68b22d53e9dca73c6780ed3e5"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a1a4162e68b22d53e9dca73c6780ed3e5">SVF::DCHGraph::handleDIDerivedType</a></div><div class="ttdeci">void handleDIDerivedType(const DIDerivedType *derivedType)</div><div class="ttdoc">Construction helper to process DIDerivedTypes. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00097">DCHG.cpp:97</a></div></div>
484
- <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#l00129">BasicTypes.h:129</a></div></div>
484
+ <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#l00130">BasicTypes.h:130</a></div></div>
485
485
  <div class="ttc" id="classSVF_1_1DCHEdge_html_a9ab4cd83d9ee475d3d8445cd91839726a8b07351616a1798fa34ec3828f485ebb"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a8b07351616a1798fa34ec3828f485ebb">SVF::DCHEdge::STD_DEF</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00038">DCHG.h:38</a></div></div>
486
486
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a5f08ed4cbba3e4b7a348d5ad77664726"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a5f08ed4cbba3e4b7a348d5ad77664726">SVF::DCHGraph::print</a></div><div class="ttdeci">void print(void)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l01131">DCHG.cpp:1131</a></div></div>
487
487
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a86bf48776ccf53092f4cb742cf95f8eb"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a86bf48776ccf53092f4cb742cf95f8eb">SVF::DCHGraph::handleDIBasicType</a></div><div class="ttdeci">void handleDIBasicType(const DIBasicType *basicType)</div><div class="ttdoc">Construction helper to process DIBasicTypes. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00022">DCHG.cpp:22</a></div></div>
@@ -490,7 +490,7 @@ Additional Inherited Members</h2></td></tr>
490
490
  <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a5f7968b31d2b29b589360067cf48e625"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a></div><div class="ttdeci">llvm::DIBasicType DIBasicType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00095">BasicTypes.h:95</a></div></div>
491
491
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a3ce75cbe92a1fa7d34c6fca2d2ca1b0f"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a3ce75cbe92a1fa7d34c6fca2d2ca1b0f">SVF::DCHGraph::handleDICompositeType</a></div><div class="ttdeci">void handleDICompositeType(const DICompositeType *compositeType)</div><div class="ttdoc">Construction helper to process DICompositeTypes. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00027">DCHG.cpp:27</a></div></div>
492
492
  <div class="ttc" id="classSVF_1_1DCHGraph_html_aa6f49dfc9e3580d3f2d8c257395eb11e"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">SVF::DCHGraph::extended</a></div><div class="ttdeci">bool extended</div><div class="ttdoc">Whether this CHG is an extended CHG (first-field). Set by buildCHG. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00356">DCHG.h:356</a></div></div>
493
- <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#l00127">BasicTypes.h:127</a></div></div>
493
+ <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#l00128">BasicTypes.h:128</a></div></div>
494
494
  </div><!-- fragment -->
495
495
  </div>
496
496
  </div>
@@ -521,22 +521,22 @@ Additional Inherited Members</h2></td></tr>
521
521
  <p>Finds all defined virtual functions and attaches them to nodes. </p>
522
522
 
523
523
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00166">166</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
524
- <div class="fragment"><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="keywordflow">for</span> (Module::const_global_iterator gvI = module.global_begin(); gvI != module.global_end(); ++gvI)</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="comment">// Though this will return more than GlobalVariables, we only care about GlobalVariables (for the vtbls).</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gv = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>&gt;(&amp;(*gvI));</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">if</span> (gv == <span class="keyword">nullptr</span>) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">if</span> (gv-&gt;hasMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#aa4630844aa25aa4801659304a2552058">cppUtil::ctir::vtMDName</a>) &amp;&amp; gv-&gt;getNumOperands() &gt; 0)</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; <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;(gv-&gt;getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#aa4630844aa25aa4801659304a2552058">cppUtil::ctir::vtMDName</a>));</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type &amp;&amp; <span class="stringliteral">&quot;DCHG::buildVTables: bad metadata for ctir.vt&quot;</span>);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *node = <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(type);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#ab8a339276172b8aa0fc915e5bde0b3db">setVTable</a>(gv);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>[gv] = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type);</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="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39fea8c436d96d2b5a74f5e02cc5d952">ConstantStruct</a> *vtbls = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a39fea8c436d96d2b5a74f5e02cc5d952">ConstantStruct</a>&gt;(gv-&gt;getOperand(0));</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vtbls &amp;&amp; <span class="stringliteral">&quot;unexpected vtable type&quot;</span>);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> nthVtbl = 0; nthVtbl &lt; vtbls-&gt;getNumOperands(); ++nthVtbl)</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *vtbl = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a>&gt;(vtbls-&gt;getOperand(nthVtbl));</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vtbl &amp;&amp; <span class="stringliteral">&quot;Element of vtbl struct not an array&quot;</span>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; std::vector&lt;const Function *&gt; &amp;vfns = node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a11ad6b4fc518f6307727f6b76f7f6f53">getVfnVector</a>(nthVtbl);</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="comment">// Iterating over the vtbl, we will run into:</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="comment">// 1. i8* null (don&#39;t care for now).</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// 2. i8* inttoptr ... (don&#39;t care for now).</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// 3. i8* bitcast ... (we only care when a function pointer is being bitcasted).</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> cN = 0; cN &lt; vtbl-&gt;getNumOperands(); ++cN)</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; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *c = vtbl-&gt;getOperand(cN);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantPointerNull&gt;(c))</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">// Don&#39;t care for now.</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a> *ce = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a>&gt;(c);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(ce &amp;&amp; <span class="stringliteral">&quot;non-ConstantExpr, non-ConstantPointerNull in vtable?&quot;</span>);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">if</span> (ce-&gt;getOpcode() == Instruction::BitCast)</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; <span class="comment">// Could be a GlobalAlias which we don&#39;t care about, or a virtual/thunk function.</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *vfn = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&gt;(ce-&gt;getOperand(0));</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> (vfn != <span class="keyword">nullptr</span>)</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; vfns.push_back(vfn);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</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; }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a5ae718cba37d8e34d2946530dc098c8e"><div class="ttname"><a href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">SVF::ConstantArray</a></div><div class="ttdeci">llvm::ConstantArray ConstantArray</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
524
+ <div class="fragment"><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="keywordflow">for</span> (Module::const_global_iterator gvI = module.global_begin(); gvI != module.global_end(); ++gvI)</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="comment">// Though this will return more than GlobalVariables, we only care about GlobalVariables (for the vtbls).</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gv = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>&gt;(&amp;(*gvI));</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">if</span> (gv == <span class="keyword">nullptr</span>) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">if</span> (gv-&gt;hasMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#aa4630844aa25aa4801659304a2552058">cppUtil::ctir::vtMDName</a>) &amp;&amp; gv-&gt;getNumOperands() &gt; 0)</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; <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;(gv-&gt;getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#aa4630844aa25aa4801659304a2552058">cppUtil::ctir::vtMDName</a>));</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type &amp;&amp; <span class="stringliteral">&quot;DCHG::buildVTables: bad metadata for ctir.vt&quot;</span>);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *node = <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(type);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#ab8a339276172b8aa0fc915e5bde0b3db">setVTable</a>(gv);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>[gv] = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type);</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="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39fea8c436d96d2b5a74f5e02cc5d952">ConstantStruct</a> *vtbls = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a39fea8c436d96d2b5a74f5e02cc5d952">ConstantStruct</a>&gt;(gv-&gt;getOperand(0));</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vtbls &amp;&amp; <span class="stringliteral">&quot;unexpected vtable type&quot;</span>);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> nthVtbl = 0; nthVtbl &lt; vtbls-&gt;getNumOperands(); ++nthVtbl)</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *vtbl = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a>&gt;(vtbls-&gt;getOperand(nthVtbl));</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vtbl &amp;&amp; <span class="stringliteral">&quot;Element of vtbl struct not an array&quot;</span>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; std::vector&lt;const Function *&gt; &amp;vfns = node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a11ad6b4fc518f6307727f6b76f7f6f53">getVfnVector</a>(nthVtbl);</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="comment">// Iterating over the vtbl, we will run into:</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="comment">// 1. i8* null (don&#39;t care for now).</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// 2. i8* inttoptr ... (don&#39;t care for now).</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// 3. i8* bitcast ... (we only care when a function pointer is being bitcasted).</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> cN = 0; cN &lt; vtbl-&gt;getNumOperands(); ++cN)</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; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *c = vtbl-&gt;getOperand(cN);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantPointerNull&gt;(c))</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">// Don&#39;t care for now.</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a> *ce = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a>&gt;(c);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(ce &amp;&amp; <span class="stringliteral">&quot;non-ConstantExpr, non-ConstantPointerNull in vtable?&quot;</span>);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">if</span> (ce-&gt;getOpcode() == Instruction::BitCast)</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; <span class="comment">// Could be a GlobalAlias which we don&#39;t care about, or a virtual/thunk function.</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *vfn = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&gt;(ce-&gt;getOperand(0));</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> (vfn != <span class="keyword">nullptr</span>)</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; vfns.push_back(vfn);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</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; }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a5ae718cba37d8e34d2946530dc098c8e"><div class="ttname"><a href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">SVF::ConstantArray</a></div><div class="ttdeci">llvm::ConstantArray ConstantArray</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
525
525
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a9ed6b91fad334605f514049a2072b538"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">SVF::DCHGraph::getOrCreateNode</a></div><div class="ttdeci">DCHNode * getOrCreateNode(const DIType *type)</div><div class="ttdoc">Creates a node from type, or returns it if it exists. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00403">DCHG.cpp:403</a></div></div>
526
526
  <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39fea8c436d96d2b5a74f5e02cc5d952"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39fea8c436d96d2b5a74f5e02cc5d952">ConstantStruct</a></div><div class="ttdeci">llvm::ConstantStruct ConstantStruct</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00048">BasicTypes.h:48</a></div></div>
527
- <div class="ttc" id="namespaceSVF_html_a09f5fa3bc44bf53612a085e3a611cc4e"><div class="ttname"><a href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">SVF::GlobalVariable</a></div><div class="ttdeci">llvm::GlobalVariable GlobalVariable</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00072">BasicTypes.h:72</a></div></div>
527
+ <div class="ttc" id="namespaceSVF_html_a09f5fa3bc44bf53612a085e3a611cc4e"><div class="ttname"><a href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">SVF::GlobalVariable</a></div><div class="ttdeci">llvm::GlobalVariable GlobalVariable</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00073">BasicTypes.h:73</a></div></div>
528
528
  <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>
529
529
  <div class="ttc" id="classSVF_1_1DCHGraph_html_aaa63715e67ade7711a0366eb7559b708"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">SVF::DCHGraph::vtblToTypeMap</a></div><div class="ttdeci">Map&lt; const GlobalValue *, const DIType * &gt; vtblToTypeMap</div><div class="ttdoc">Maps VTables to the DIType associated with them. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00360">DCHG.h:360</a></div></div>
530
530
  <div class="ttc" id="namespaceSVF_1_1cppUtil_1_1ctir_html_aa4630844aa25aa4801659304a2552058"><div class="ttname"><a href="namespaceSVF_1_1cppUtil_1_1ctir.html#aa4630844aa25aa4801659304a2552058">SVF::cppUtil::ctir::vtMDName</a></div><div class="ttdeci">const std::string vtMDName</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00116">CPPUtil.h:116</a></div></div>
531
531
  <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a60115de303225d173fb935cf7619a2cb"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00055">BasicTypes.h:55</a></div></div>
532
- <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#l00065">BasicTypes.h:65</a></div></div>
532
+ <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>
533
533
  <div class="ttc" id="classSVF_1_1DCHNode_html"><div class="ttname"><a href="classSVF_1_1DCHNode.html">SVF::DCHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00063">DCHG.h:63</a></div></div>
534
- <div class="ttc" id="namespaceSVF_html_a7e230c0cba2e3a7c2e5a5f2ee7d88af9"><div class="ttname"><a href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">SVF::Constant</a></div><div class="ttdeci">llvm::Constant Constant</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00094">BasicTypes.h:94</a></div></div>
534
+ <div class="ttc" id="namespaceSVF_html_a7e230c0cba2e3a7c2e5a5f2ee7d88af9"><div class="ttname"><a href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">SVF::Constant</a></div><div class="ttdeci">llvm::Constant Constant</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00095">BasicTypes.h:95</a></div></div>
535
535
  <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>
536
536
  <div class="ttc" id="classSVF_1_1DCHNode_html_ab8a339276172b8aa0fc915e5bde0b3db"><div class="ttname"><a href="classSVF_1_1DCHNode.html#ab8a339276172b8aa0fc915e5bde0b3db">SVF::DCHNode::setVTable</a></div><div class="ttdeci">void setVTable(const GlobalValue *vtbl)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00164">DCHG.h:164</a></div></div>
537
537
  <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>
538
538
  <div class="ttc" id="classSVF_1_1DCHNode_html_a11ad6b4fc518f6307727f6b76f7f6f53"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a11ad6b4fc518f6307727f6b76f7f6f53">SVF::DCHNode::getVfnVector</a></div><div class="ttdeci">std::vector&lt; const Function * &gt; &amp; getVfnVector(unsigned n)</div><div class="ttdoc">Return the nth virtual function vector in the vtable. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00181">DCHG.h:181</a></div></div>
539
- <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#l00127">BasicTypes.h:127</a></div></div>
539
+ <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#l00128">BasicTypes.h:128</a></div></div>
540
540
  </div><!-- fragment -->
541
541
  </div>
542
542
  </div>
@@ -687,7 +687,7 @@ Additional Inherited Members</h2></td></tr>
687
687
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a96c68bbb5ee5e939158ce0b67da2c61d"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">SVF::DCHGraph::getNode</a></div><div class="ttdeci">DCHNode * getNode(const DIType *type)</div><div class="ttdoc">Returns the node for type (nullptr if it doesn&amp;#39;t exist). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00424">DCHG.h:424</a></div></div>
688
688
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a58341e23c1dc2b3e7fce190ed16a8a25"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">SVF::DCHGraph::hasNode</a></div><div class="ttdeci">bool hasNode(const DIType *type)</div><div class="ttdoc">Checks if a node exists for type. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00417">DCHG.h:417</a></div></div>
689
689
  <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>
690
- <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#l00127">BasicTypes.h:127</a></div></div>
690
+ <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#l00128">BasicTypes.h:128</a></div></div>
691
691
  </div><!-- fragment -->
692
692
  </div>
693
693
  </div>
@@ -720,11 +720,11 @@ Additional Inherited Members</h2></td></tr>
720
720
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00958">958</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
721
721
  <div class="fragment"><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160;{</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; std::stringstream ss;</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160;</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <span class="keywordflow">if</span> (t == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; {</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;void&quot;</span>;</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; }</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160;</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *bt = SVFUtil::dyn_cast&lt;DIBasicType&gt;(t))</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; {</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; ss &lt;&lt; std::string(bt-&gt;getName());</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; }</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</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> *dt = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(t))</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; {</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">if</span> (dt-&gt;getName() == <span class="stringliteral">&quot;__vtbl_ptr_type&quot;</span>)</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; {</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;(vtbl * =) __vtbl_ptr_type&quot;</span>;</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; }</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_const_type)</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; {</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;const &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType());</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; }</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_volatile_type)</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; {</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;volatile &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType());</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; }</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_restrict_type)</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; {</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;restrict &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType());</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; }</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_atomic_type)</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; {</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;atomic &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType());</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; }</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_pointer_type)</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; {</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType()) &lt;&lt; <span class="stringliteral">&quot; *&quot;</span>;</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; }</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_ptr_to_member_type)</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; {</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType())</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(SVFUtil::dyn_cast&lt;DIType&gt;(dt-&gt;getExtraData())) &lt;&lt; <span class="stringliteral">&quot;::*&quot;</span>;</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; }</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_reference_type)</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; {</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType()) &lt;&lt; <span class="stringliteral">&quot; &amp;&quot;</span>;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; }</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_rvalue_reference_type)</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; {</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType()) &lt;&lt; <span class="stringliteral">&quot; &amp;&amp;&quot;</span>;</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; }</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_typedef)</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; {</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; ss &lt;&lt; std::string(dt-&gt;getName()) &lt;&lt; <span class="stringliteral">&quot;-&gt;&quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType());</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; }</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; }</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *ct = SVFUtil::dyn_cast&lt;DICompositeType&gt;(t))</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; {</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; || ct-&gt;getTag() == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; || ct-&gt;getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; {</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_class_type)</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; {</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;class&quot;</span>;</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; }</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_structure_type)</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; {</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;struct&quot;</span>;</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; }</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; {</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;union&quot;</span>;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; }</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;.&quot;</span>;</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="keywordflow">if</span> (ct-&gt;getName() != <span class="stringliteral">&quot;&quot;</span>)</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; {</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; ss &lt;&lt; std::string(ct-&gt;getName());</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; }</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; {</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="comment">// Iterate over the element types.</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;{ &quot;</span>;</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fields = ct-&gt;getElements();</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; fields.size(); ++i)</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; {</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <span class="comment">// fields[i] gives a type which is DW_TAG_member, we want the member&#39;s type (getBaseType).</span></div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <span class="comment">// It can also give a Subprogram type if the class just had non-virtual functions.</span></div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a89c7208bfc0b57873dfa574f52050295">DISubprogram</a> *sp = SVFUtil::dyn_cast&lt;DISubprogram&gt;(fields[i]))</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; {</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; ss &lt;&lt; std::string(sp-&gt;getName());</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; }</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</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> *mt = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(fields[i]))</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; {</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mt-&gt;getTag() == dwarf::DW_TAG_member &amp;&amp; <span class="stringliteral">&quot;DCHG: expected member&quot;</span>);</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(mt-&gt;getBaseType());</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; }</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <span class="keywordflow">if</span> (i != fields.size() - 1)</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; {</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; }</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; }</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot; }&quot;</span>;</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; }</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; }</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; {</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(ct-&gt;getBaseType());</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> sizes = ct-&gt;getElements();</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; sizes.size(); ++i)</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; {</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#ab0e8955a3dbfb0a836bfe64466411e4e">DISubrange</a> *sr = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#ab0e8955a3dbfb0a836bfe64466411e4e">DISubrange</a>&gt;(sizes[0]);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(sr != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;DCHG: non-subrange as array element?&quot;</span>);</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; int64_t count = -1;</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *ci = sr-&gt;getCount().dyn_cast&lt;<a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *&gt;())</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; {</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; count = ci-&gt;getSExtValue();</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; }</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;[&quot;</span> &lt;&lt; count &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; }</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; }</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_enumeration_type)</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; {</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;enum &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(ct-&gt;getBaseType());</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; }</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; {</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; }</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; }</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</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#aad46bd16008ebbc81e632f4fc69b3ea9">DISubroutineType</a> *st = SVFUtil::dyn_cast&lt;DISubroutineType&gt;(t))</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; {</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#abfc3b60432a782f5eb5ea73f20d34333">DITypeRefArray</a> types = st-&gt;getTypeArray();</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="comment">// Must have one element at least (the first type).</span></div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(types[0]) &lt;&lt; <span class="stringliteral">&quot; fn(&quot;</span>;</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="keywordflow">if</span> (types.size() == 1)</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; {</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;void)&quot;</span>;</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; }</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; {</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1; i &lt; types.size(); ++i)</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; {</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(types[i]);</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="keywordflow">if</span> (i + 1 != types.size())</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; {</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <span class="comment">// There&#39;s another type.</span></div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; }</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; }</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; }</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; ss &lt;&lt; std::string(st-&gt;getName());</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; }</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="keywordflow">return</span> ss.str();</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;}</div><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>
722
722
  <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>
723
- <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#l00128">BasicTypes.h:128</a></div></div>
724
- <div class="ttc" id="namespaceSVF_html_adefcb50414ea999d70cea5ccdbcb98d7"><div class="ttname"><a href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">SVF::ConstantInt</a></div><div class="ttdeci">llvm::ConstantInt ConstantInt</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
723
+ <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#l00129">BasicTypes.h:129</a></div></div>
724
+ <div class="ttc" id="namespaceSVF_html_adefcb50414ea999d70cea5ccdbcb98d7"><div class="ttname"><a href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">SVF::ConstantInt</a></div><div class="ttdeci">llvm::ConstantInt ConstantInt</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
725
725
  <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a98bb9afb9385eac16d7c78da796fd601"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
726
- <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#l00129">BasicTypes.h:129</a></div></div>
727
- <div class="ttc" id="namespaceSVF_html_a89c7208bfc0b57873dfa574f52050295"><div class="ttname"><a href="namespaceSVF.html#a89c7208bfc0b57873dfa574f52050295">SVF::DISubprogram</a></div><div class="ttdeci">llvm::DISubprogram DISubprogram</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00130">BasicTypes.h:130</a></div></div>
726
+ <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#l00130">BasicTypes.h:130</a></div></div>
727
+ <div class="ttc" id="namespaceSVF_html_a89c7208bfc0b57873dfa574f52050295"><div class="ttname"><a href="namespaceSVF.html#a89c7208bfc0b57873dfa574f52050295">SVF::DISubprogram</a></div><div class="ttdeci">llvm::DISubprogram DISubprogram</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00131">BasicTypes.h:131</a></div></div>
728
728
  <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_ab0e8955a3dbfb0a836bfe64466411e4e"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#ab0e8955a3dbfb0a836bfe64466411e4e">DISubrange</a></div><div class="ttdeci">llvm::DISubrange DISubrange</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
729
729
  <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_aad46bd16008ebbc81e632f4fc69b3ea9"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#aad46bd16008ebbc81e632f4fc69b3ea9">DISubroutineType</a></div><div class="ttdeci">llvm::DISubroutineType DISubroutineType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00094">BasicTypes.h:94</a></div></div>
730
730
  <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a5f7968b31d2b29b589360067cf48e625"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a></div><div class="ttdeci">llvm::DIBasicType DIBasicType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00095">BasicTypes.h:95</a></div></div>
@@ -792,13 +792,13 @@ Additional Inherited Members</h2></td></tr>
792
792
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00265">265</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
793
793
  <div class="fragment"><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; type = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type));</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type &amp;&amp; <span class="stringliteral">&quot;DCHG::flatten: canon type of struct/class is not struct/class&quot;</span>);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.find(type) != <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.end())</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; <span class="comment">// Already done (necessary because of the recursion).</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">return</span>;</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;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="comment">// Create empty vector.</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[type];</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type != <span class="keyword">nullptr</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; &amp;&amp; (type-&gt;getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; || type-&gt;getTag() == dwarf::DW_TAG_structure_type)</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; &amp;&amp; <span class="stringliteral">&quot;DCHG::flatten: expected a class/struct&quot;</span>);</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">// Sort the fields from getElements. Especially a problem for classes; it&#39;s all jumbled up.</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; std::vector&lt;const DIDerivedType *&gt; fields;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fieldsDINA = type-&gt;getElements();</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; fieldsDINA.size(); ++i)</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *dt = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(fieldsDINA[i]))</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">// Don&#39;t care about subprograms, only member/inheritance.</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; fields.push_back(dt);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// TODO: virtual inheritance is not handled at all!</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; std::sort(fields.begin(), fields.end(),</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; [](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *&amp;a, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *&amp;b) -&gt; <span class="keywordtype">bool</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; { <span class="keywordflow">return</span> a-&gt;getOffsetInBits() &lt; b-&gt;getOffsetInBits(); });</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *mt : fields)</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; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((mt-&gt;getTag() == dwarf::DW_TAG_member || mt-&gt;getTag() == dwarf::DW_TAG_inheritance)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; &amp;&amp; <span class="stringliteral">&quot;DCHG: expected member/inheritance&quot;</span>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="comment">// Either we have a class, struct, array, or something not in need of flattening.</span></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#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *fieldType = mt-&gt;getBaseType();</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">if</span> (fieldType-&gt;getTag() == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; || fieldType-&gt;getTag() == dwarf::DW_TAG_class_type)</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="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a>(SVFUtil::dyn_cast&lt;DICompositeType&gt;(fieldType));</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *ft : <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[fieldType])</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">// ft is already a canonical type because the &quot;root&quot; additions insert</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="comment">// canonical types.</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[type].push_back(ft);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fieldType-&gt;getTag() == dwarf::DW_TAG_array_type)</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="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *arrayType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(fieldType);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *baseType = arrayType-&gt;getBaseType();</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *cbt = SVFUtil::dyn_cast&lt;DICompositeType&gt;(baseType))</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a>(cbt);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *ft : <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[cbt])</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="comment">// ft is already a canonical type like above.</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[type].push_back(ft);</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; }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[type].push_back(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(baseType));</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; }</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; {</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[type].push_back(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(fieldType));</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; }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_ab96874bc8f6461fe0c3eb53b7f5cedce"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">SVF::DCHGraph::flatten</a></div><div class="ttdeci">void flatten(const DICompositeType *type)</div><div class="ttdoc">Populates fieldTypes for type and all its elements. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00265">DCHG.cpp:265</a></div></div>
794
794
  <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>
795
- <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#l00128">BasicTypes.h:128</a></div></div>
795
+ <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#l00129">BasicTypes.h:129</a></div></div>
796
796
  <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a98bb9afb9385eac16d7c78da796fd601"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
797
- <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#l00129">BasicTypes.h:129</a></div></div>
797
+ <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#l00130">BasicTypes.h:130</a></div></div>
798
798
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a574ec14099f1112b394b00a79f3fdf1a"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">SVF::DCHGraph::fieldTypes</a></div><div class="ttdeci">Map&lt; const DIType *, std::vector&lt; const DIType * &gt; &gt; fieldTypes</div><div class="ttdoc">Maps types to their flattened fields&amp;#39; types. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00374">DCHG.h:374</a></div></div>
799
799
  <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>
800
800
  <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>
801
- <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#l00127">BasicTypes.h:127</a></div></div>
801
+ <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#l00128">BasicTypes.h:128</a></div></div>
802
802
  </div><!-- fragment -->
803
803
  </div>
804
804
  </div>
@@ -833,14 +833,14 @@ Additional Inherited Members</h2></td></tr>
833
833
  <div class="ttc" id="classSVF_1_1DCHGraph_html_adc7a17f70ac3fa89624ad874dbd16ff9"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">SVF::DCHGraph::containingAggs</a></div><div class="ttdeci">Map&lt; const DIType *, Set&lt; const DIType * &gt; &gt; containingAggs</div><div class="ttdoc">Maps aggregate types to all the aggregate types it transitively contains. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00376">DCHG.h:376</a></div></div>
834
834
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a8fcbea9435a77beb27ad64d5a3175b0b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">SVF::DCHGraph::gatherAggs</a></div><div class="ttdeci">void gatherAggs(const DICompositeType *type)</div><div class="ttdoc">Populates containingAggs for type and all its elements. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00350">DCHG.cpp:350</a></div></div>
835
835
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a175ed6ad0c9b23d5617f755ab96c76c4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">SVF::DCHGraph::stripQualifiers</a></div><div class="ttdeci">static const DIType * stripQualifiers(const DIType *)</div><div class="ttdoc">Returns the DIType beneath the qualifiers. Does not strip away &quot;DW_TAG_members&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00754">DCHG.cpp:754</a></div></div>
836
- <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#l00128">BasicTypes.h:128</a></div></div>
836
+ <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#l00129">BasicTypes.h:129</a></div></div>
837
837
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph&lt; DCHNode, DCHEdge &gt;::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00369">GenericGraph.h:369</a></div></div>
838
838
  <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>
839
839
  <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a98bb9afb9385eac16d7c78da796fd601"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
840
- <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#l00129">BasicTypes.h:129</a></div></div>
840
+ <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#l00130">BasicTypes.h:130</a></div></div>
841
841
  <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>
842
842
  <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>
843
- <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#l00127">BasicTypes.h:127</a></div></div>
843
+ <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#l00128">BasicTypes.h:128</a></div></div>
844
844
  </div><!-- fragment -->
845
845
  </div>
846
846
  </div>
@@ -898,7 +898,7 @@ Additional Inherited Members</h2></td></tr>
898
898
  <div class="fragment"><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="comment">// We want stripped types to be canonical.</span></div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *unstrippedT = t;</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; t = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t);</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; <span class="comment">// Is there a mapping for the unstripped type? Yes - return it.</span></div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.find(unstrippedT) != <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.end())</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; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[unstrippedT];</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; }</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; <span class="comment">// There is no mapping for unstripped type (^), is there one for the stripped</span></div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="comment">// type? Yes - map the unstripped type to the same thing.</span></div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">if</span> (unstrippedT != t)</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; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.find(t) != <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.end())</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; <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[unstrippedT] = <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[t];</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[unstrippedT];</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; }</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="comment">// Canonical type for t is not cached, find one for it.</span></div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *canonType : <a class="code" href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">canonicalTypes</a>)</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; {</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">teq</a>(t, canonType))</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; {</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="comment">// Found a canonical type.</span></div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[t] = canonType;</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[t];</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; }</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; <span class="comment">// No canonical type found, so t will be a canonical type.</span></div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; canonicalTypes.insert(t);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.insert({t, t});</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[t];</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a498a18fe8702251b6f2a4e6379e5cbb1"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">SVF::DCHGraph::canonicalTypeMap</a></div><div class="ttdeci">Map&lt; const DIType *, const DIType * &gt; canonicalTypeMap</div><div class="ttdoc">Maps types to their canonical type (many-to-one). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00370">DCHG.h:370</a></div></div>
899
899
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a175ed6ad0c9b23d5617f755ab96c76c4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">SVF::DCHGraph::stripQualifiers</a></div><div class="ttdeci">static const DIType * stripQualifiers(const DIType *)</div><div class="ttdoc">Returns the DIType beneath the qualifiers. Does not strip away &quot;DW_TAG_members&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00754">DCHG.cpp:754</a></div></div>
900
900
  <div class="ttc" id="classSVF_1_1DCHGraph_html_acb76ab20da1bfbec00f63d08e48cbddd"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">SVF::DCHGraph::teq</a></div><div class="ttdeci">static bool teq(const DIType *t1, const DIType *t2)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00819">DCHG.cpp:819</a></div></div>
901
- <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#l00127">BasicTypes.h:127</a></div></div>
901
+ <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#l00128">BasicTypes.h:128</a></div></div>
902
902
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a10225f56b21eb7f0870fdc433de3c393"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">SVF::DCHGraph::canonicalTypes</a></div><div class="ttdeci">Set&lt; const DIType * &gt; canonicalTypes</div><div class="ttdoc">Set of all possible canonical types (i.e. values of canonicalTypeMap). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00372">DCHG.h:372</a></div></div>
903
903
  </div><!-- fragment -->
904
904
  </div>
@@ -932,9 +932,9 @@ Additional Inherited Members</h2></td></tr>
932
932
  <p class="definition">Definition at line <a class="el" href="DCHG_8h_source.html#l00407">407</a> of file <a class="el" href="DCHG_8h_source.html">DCHG.h</a>.</p>
933
933
  <div class="fragment"><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; <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *md = cs.getInstruction()-&gt;getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#a0cd5347bc8043d4306e66a4a96005ace">cppUtil::ctir::derefMDName</a>);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(md != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;Missing type metadata at virtual callsite&quot;</span>);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *diType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a>&gt;(md);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(diType != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;Incorrect metadata type at virtual callsite&quot;</span>);</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">return</span> diType;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; }</div><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>
934
934
  <div class="ttc" id="namespaceSVF_1_1cppUtil_1_1ctir_html_a0cd5347bc8043d4306e66a4a96005ace"><div class="ttname"><a href="namespaceSVF_1_1cppUtil_1_1ctir.html#a0cd5347bc8043d4306e66a4a96005ace">SVF::cppUtil::ctir::derefMDName</a></div><div class="ttdeci">const std::string derefMDName</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00113">CPPUtil.h:113</a></div></div>
935
- <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#l00103">BasicTypes.h:103</a></div></div>
935
+ <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#l00104">BasicTypes.h:104</a></div></div>
936
936
  <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>
937
- <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#l00127">BasicTypes.h:127</a></div></div>
937
+ <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#l00128">BasicTypes.h:128</a></div></div>
938
938
  </div><!-- fragment -->
939
939
  </div>
940
940
  </div>
@@ -1003,7 +1003,7 @@ Additional Inherited Members</h2></td></tr>
1003
1003
  <div class="fragment"><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;{</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *type = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">getCSStaticType</a>(cs));</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="comment">// Check if we&#39;ve already computed.</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>.find(type) != <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>.end())</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; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>[type];</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"> 563</span>&#160;</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <a class="code" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a> vtblSet;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;children = <a class="code" href="classSVF_1_1DCHGraph.html#a0a3dfe1f2757eabd75082e2c4caec47a">cha</a>(type, <span class="keyword">false</span>);</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#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> childId : children)</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; <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *child = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(childId);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl = child-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988">getVTable</a>();</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="comment">// TODO: what if it is null?</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">if</span> (vtbl != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; vtblSet.insert(vtbl);</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; }</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">// Cache.</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>.insert({type, vtblSet});</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="comment">// Return cached version - not the stack object.</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>[type];</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;}</div><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>
1004
1004
  <div class="ttc" id="classSVF_1_1DCHNode_html_a1a75ca91148992166d42d245d6c51988"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988">SVF::DCHNode::getVTable</a></div><div class="ttdeci">const GlobalValue * getVTable() const</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00169">DCHG.h:169</a></div></div>
1005
1005
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a236d785d728189c2026357ce837fcdc6"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">SVF::DCHGraph::getCSStaticType</a></div><div class="ttdeci">const DIType * getCSStaticType(CallSite cs) const</div><div class="ttdoc">Retrieves the metadata associated with a virtual callsite. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00407">DCHG.h:407</a></div></div>
1006
- <div class="ttc" id="namespaceSVF_html_a67f3f86344f028cacfbeb08caaf7bb0f"><div class="ttname"><a href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">SVF::GlobalValue</a></div><div class="ttdeci">llvm::GlobalValue GlobalValue</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
1006
+ <div class="ttc" id="namespaceSVF_html_a67f3f86344f028cacfbeb08caaf7bb0f"><div class="ttname"><a href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">SVF::GlobalValue</a></div><div class="ttdeci">llvm::GlobalValue GlobalValue</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00072">BasicTypes.h:72</a></div></div>
1007
1007
  <div class="ttc" id="classSVF_1_1DCHNode_html"><div class="ttname"><a href="classSVF_1_1DCHNode.html">SVF::DCHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00063">DCHG.h:63</a></div></div>
1008
1008
  <div class="ttc" id="namespaceSVF_html_a53511f619c06836ee85acf12153810e2"><div class="ttname"><a href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">SVF::VTableSet</a></div><div class="ttdeci">Set&lt; const GlobalValue * &gt; VTableSet</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00044">CHG.h:44</a></div></div>
1009
1009
  <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>
@@ -1011,7 +1011,7 @@ Additional Inherited Members</h2></td></tr>
1011
1011
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a294e7a04aff9cef87c1008e91a620155"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">SVF::DCHGraph::vtblCHAMap</a></div><div class="ttdeci">Map&lt; const DIType *, VTableSet &gt; vtblCHAMap</div><div class="ttdoc">Maps types to a set with their vtable and all their children&amp;#39;s. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00366">DCHG.h:366</a></div></div>
1012
1012
  <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>
1013
1013
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph&lt; DCHNode, DCHEdge &gt;::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>
1014
- <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#l00127">BasicTypes.h:127</a></div></div>
1014
+ <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#l00128">BasicTypes.h:128</a></div></div>
1015
1015
  </div><!-- fragment -->
1016
1016
  </div>
1017
1017
  </div>
@@ -1053,7 +1053,7 @@ Additional Inherited Members</h2></td></tr>
1053
1053
 
1054
1054
  <p class="definition">Definition at line <a class="el" href="DCHG_8h_source.html#l00291">291</a> of file <a class="el" href="DCHG_8h_source.html">DCHG.h</a>.</p>
1055
1055
  <div class="fragment"><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; base = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(base);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">if</span> (base == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// Conservative; the base object is untyped, sadly.</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="comment">// For TBHC this is conservative because the union type is lower in the DCHG</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// than its fields. TODO: make more precise.</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">if</span> (base-&gt;getTag() == dwarf::DW_TAG_union_type)</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; <span class="keywordflow">return</span> base;</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;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">if</span> (base-&gt;getTag() == dwarf::DW_TAG_array_type)</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *cbase = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(base);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(cbase &amp;&amp; <span class="stringliteral">&quot;DCHG: bad DIComposite case&quot;</span>);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">return</span> cbase-&gt;getBaseType();</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;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">if</span> (!(base-&gt;getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; || base-&gt;getTag() == dwarf::DW_TAG_structure_type))</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; {</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</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;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.find(base) != <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.end() &amp;&amp; <span class="stringliteral">&quot;DCHG: base not flattened!&quot;</span>);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; std::vector&lt;const DIType *&gt; &amp;fields = <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[base];</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(fields.size() &gt; idx &amp;&amp; <span class="stringliteral">&quot;DCHG: idx into struct larger than # fields!&quot;</span>);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(fields[idx]);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div><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>
1056
- <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#l00128">BasicTypes.h:128</a></div></div>
1056
+ <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#l00129">BasicTypes.h:129</a></div></div>
1057
1057
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a574ec14099f1112b394b00a79f3fdf1a"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">SVF::DCHGraph::fieldTypes</a></div><div class="ttdeci">Map&lt; const DIType *, std::vector&lt; const DIType * &gt; &gt; fieldTypes</div><div class="ttdoc">Maps types to their flattened fields&amp;#39; types. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00374">DCHG.h:374</a></div></div>
1058
1058
  <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>
1059
1059
  <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>
@@ -1241,18 +1241,18 @@ Additional Inherited Members</h2></td></tr>
1241
1241
  <div class="ttc" id="structSVF_1_1cppUtil_1_1DemangledName_html"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html">SVF::cppUtil::DemangledName</a></div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00046">CPPUtil.h:46</a></div></div>
1242
1242
  <div class="ttc" id="classSVF_1_1DCHGraph_html_aaa63715e67ade7711a0366eb7559b708"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">SVF::DCHGraph::vtblToTypeMap</a></div><div class="ttdeci">Map&lt; const GlobalValue *, const DIType * &gt; vtblToTypeMap</div><div class="ttdoc">Maps VTables to the DIType associated with them. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00360">DCHG.h:360</a></div></div>
1243
1243
  <div class="ttc" id="classSVF_1_1DCHNode_html_a0669b995c4fe72f206154f5cf6889fe8"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a0669b995c4fe72f206154f5cf6889fe8">SVF::DCHNode::getVfnVectors</a></div><div class="ttdeci">const std::vector&lt; std::vector&lt; const Function * &gt; &gt; &amp; getVfnVectors(void) const</div><div class="ttdoc">Returns the vector of virtual function vectors. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00175">DCHG.h:175</a></div></div>
1244
- <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#l00065">BasicTypes.h:65</a></div></div>
1244
+ <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>
1245
1245
  <div class="ttc" id="structSVF_1_1cppUtil_1_1DemangledName_html_a1dd17b240663bc9412adefde82385e02"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">SVF::cppUtil::DemangledName::funcName</a></div><div class="ttdeci">std::string funcName</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00049">CPPUtil.h:49</a></div></div>
1246
1246
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a96c68bbb5ee5e939158ce0b67da2c61d"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">SVF::DCHGraph::getNode</a></div><div class="ttdeci">DCHNode * getNode(const DIType *type)</div><div class="ttdoc">Returns the node for type (nullptr if it doesn&amp;#39;t exist). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00424">DCHG.h:424</a></div></div>
1247
- <div class="ttc" id="namespaceSVF_html_a67f3f86344f028cacfbeb08caaf7bb0f"><div class="ttname"><a href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">SVF::GlobalValue</a></div><div class="ttdeci">llvm::GlobalValue GlobalValue</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
1247
+ <div class="ttc" id="namespaceSVF_html_a67f3f86344f028cacfbeb08caaf7bb0f"><div class="ttname"><a href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">SVF::GlobalValue</a></div><div class="ttdeci">llvm::GlobalValue GlobalValue</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00072">BasicTypes.h:72</a></div></div>
1248
1248
  <div class="ttc" id="classSVF_1_1DCHNode_html"><div class="ttname"><a href="classSVF_1_1DCHNode.html">SVF::DCHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00063">DCHG.h:63</a></div></div>
1249
- <div class="ttc" id="classSVF_1_1CallSite_html_a145676880fce313b4634d14118476c27"><div class="ttname"><a href="classSVF_1_1CallSite.html#a145676880fce313b4634d14118476c27">SVF::CallSite::arg_size</a></div><div class="ttdeci">unsigned arg_size() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00237">BasicTypes.h:237</a></div></div>
1249
+ <div class="ttc" id="classSVF_1_1CallSite_html_a145676880fce313b4634d14118476c27"><div class="ttname"><a href="classSVF_1_1CallSite.html#a145676880fce313b4634d14118476c27">SVF::CallSite::arg_size</a></div><div class="ttdeci">unsigned arg_size() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00238">BasicTypes.h:238</a></div></div>
1250
1250
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a58341e23c1dc2b3e7fce190ed16a8a25"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">SVF::DCHGraph::hasNode</a></div><div class="ttdeci">bool hasNode(const DIType *type)</div><div class="ttdoc">Checks if a node exists for type. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00417">DCHG.h:417</a></div></div>
1251
1251
  <div class="ttc" id="namespaceSVF_1_1cppUtil_html_a1007c092efaeae41002efd91b803a7f6"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">SVF::cppUtil::demangle</a></div><div class="ttdeci">struct DemangledName demangle(const std::string &amp;name)</div></div>
1252
1252
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a4f457db1cfa0d4f94762a306c0ac3757"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a4f457db1cfa0d4f94762a306c0ac3757">SVF::SVFUtil::getFunction</a></div><div class="ttdeci">const SVFFunction * getFunction(StringRef name)</div><div class="ttdoc">Get the corresponding Function based on its name. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00225">SVFUtil.h:225</a></div></div>
1253
1253
  <div class="ttc" id="namespaceSVF_1_1cppUtil_html_a0a67c31dcc44784b09dca54b4b7c624a"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a0a67c31dcc44784b09dca54b4b7c624a">SVF::cppUtil::getFunNameOfVCallSite</a></div><div class="ttdeci">std::string getFunNameOfVCallSite(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00553">CPPUtil.cpp:553</a></div></div>
1254
- <div class="ttc" id="classSVF_1_1CallSite_html_ad0040f4b7953b509059223d1d52c203f"><div class="ttname"><a href="classSVF_1_1CallSite.html#ad0040f4b7953b509059223d1d52c203f">SVF::CallSite::getFunctionType</a></div><div class="ttdeci">FunctionType * getFunctionType() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00265">BasicTypes.h:265</a></div></div>
1255
- <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#l00127">BasicTypes.h:127</a></div></div>
1254
+ <div class="ttc" id="classSVF_1_1CallSite_html_ad0040f4b7953b509059223d1d52c203f"><div class="ttname"><a href="classSVF_1_1CallSite.html#ad0040f4b7953b509059223d1d52c203f">SVF::CallSite::getFunctionType</a></div><div class="ttdeci">FunctionType * getFunctionType() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00266">BasicTypes.h:266</a></div></div>
1255
+ <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#l00128">BasicTypes.h:128</a></div></div>
1256
1256
  </div><!-- fragment -->
1257
1257
  </div>
1258
1258
  </div>
@@ -1321,7 +1321,7 @@ Additional Inherited Members</h2></td></tr>
1321
1321
  <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a358cd7e78ebc504972b73cd5ee80fac2"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a358cd7e78ebc504972b73cd5ee80fac2">DINode</a></div><div class="ttdeci">llvm::DINode DINode</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
1322
1322
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a294a2075c97e1db8003393fb472c1def"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">SVF::DCHGraph::addEdge</a></div><div class="ttdeci">DCHEdge * addEdge(const DIType *t1, const DIType *t2, DCHEdge::GEdgeKind et)</div><div class="ttdoc">Creates an edge between from t1 to t2. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00421">DCHG.cpp:421</a></div></div>
1323
1323
  <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a98bb9afb9385eac16d7c78da796fd601"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
1324
- <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#l00129">BasicTypes.h:129</a></div></div>
1324
+ <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#l00130">BasicTypes.h:130</a></div></div>
1325
1325
  <div class="ttc" id="classSVF_1_1DCHEdge_html_a9ab4cd83d9ee475d3d8445cd91839726a3b49b95b713f585b717810dce5ac6564"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a3b49b95b713f585b717810dce5ac6564">SVF::DCHEdge::FIRST_FIELD</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00037">DCHG.h:37</a></div></div>
1326
1326
  <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>
1327
1327
  <div class="ttc" id="classSVF_1_1DCHGraph_html_aa6f49dfc9e3580d3f2d8c257395eb11e"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">SVF::DCHGraph::extended</a></div><div class="ttdeci">bool extended</div><div class="ttdoc">Whether this CHG is an extended CHG (first-field). Set by buildCHG. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00356">DCHG.h:356</a></div></div>
@@ -1427,10 +1427,10 @@ Additional Inherited Members</h2></td></tr>
1427
1427
  <div class="fragment"><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; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(typedefType &amp;&amp; typedefType-&gt;getTag() == dwarf::DW_TAG_typedef);</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; <span class="comment">// Need to gather them in a set first because we don&#39;t know the base type till</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">// we get to the bottom of the (potentially many) typedefs.</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; std::vector&lt;const DIDerivedType *&gt; typedefs;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">// Check for nullptr because you can typedef void.</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">while</span> (typedefType != <span class="keyword">nullptr</span> &amp;&amp; typedefType-&gt;getTag() == dwarf::DW_TAG_typedef)</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *typedefDerivedType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a>&gt;(typedefType);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// The typedef itself.</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; typedefs.push_back(typedefDerivedType);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// Next in the typedef line.</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; typedefType = typedefDerivedType-&gt;getBaseType();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; }</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *baseType = typedefType;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *baseTypeNode = <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(baseType);</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; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *tdef : typedefs)</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="comment">// Base type needs to hold its typedefs.</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; baseTypeNode-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a9d1016e3da3462664198b1125dfc8f6e">addTypedef</a>(tdef);</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;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a9ed6b91fad334605f514049a2072b538"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">SVF::DCHGraph::getOrCreateNode</a></div><div class="ttdeci">DCHNode * getOrCreateNode(const DIType *type)</div><div class="ttdoc">Creates a node from type, or returns it if it exists. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00403">DCHG.cpp:403</a></div></div>
1428
1428
  <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>
1429
1429
  <div class="ttc" id="classSVF_1_1DCHNode_html_a9d1016e3da3462664198b1125dfc8f6e"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a9d1016e3da3462664198b1125dfc8f6e">SVF::DCHNode::addTypedef</a></div><div class="ttdeci">void addTypedef(const DIDerivedType *diTypedef)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00154">DCHG.h:154</a></div></div>
1430
- <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#l00129">BasicTypes.h:129</a></div></div>
1430
+ <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#l00130">BasicTypes.h:130</a></div></div>
1431
1431
  <div class="ttc" id="classSVF_1_1DCHNode_html"><div class="ttname"><a href="classSVF_1_1DCHNode.html">SVF::DCHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00063">DCHG.h:63</a></div></div>
1432
1432
  <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>
1433
- <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#l00127">BasicTypes.h:127</a></div></div>
1433
+ <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#l00128">BasicTypes.h:128</a></div></div>
1434
1434
  </div><!-- fragment -->
1435
1435
  </div>
1436
1436
  </div>
@@ -1638,11 +1638,11 @@ Additional Inherited Members</h2></td></tr>
1638
1638
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00677">677</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
1639
1639
  <div class="fragment"><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;{</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(f &amp;&amp; b &amp;&amp; <span class="stringliteral">&quot;DCHG::isFieldOf: given nullptr!&quot;</span>);</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; f = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(f);</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; b = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(b);</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">if</span> (f == b) <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">if</span> (b-&gt;getTag() == dwarf::DW_TAG_array_type || b-&gt;getTag() == dwarf::DW_TAG_pointer_type)</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="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *baseType = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</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;(b))</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; baseType = arrayType-&gt;getBaseType();</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; <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;(b))</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; baseType = ptrType-&gt;getBaseType();</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(baseType &amp;&amp; <span class="stringliteral">&quot;DCHG::isFieldOf: baseType is neither DIComposite nor DIDerived!&quot;</span>);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; baseType = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(baseType);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keywordflow">return</span> f == baseType || (baseType != <span class="keyword">nullptr</span> &amp;&amp; <a class="code" href="classSVF_1_1DCHGraph.html#af0534356b4a8c68507e1237f1d7a8c11">isFieldOf</a>(f, baseType));</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; }</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (b-&gt;getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; || b-&gt;getTag() == dwarf::DW_TAG_structure_type)</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; <span class="keyword">const</span> std::vector&lt;const DIType *&gt; &amp;fields = <a class="code" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">getFieldTypes</a>(b);</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">return</span> std::find(fields.begin(), fields.end(), f) != fields.end();</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; <span class="keywordflow">else</span></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">return</span> <span class="keyword">false</span>;</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;}</div><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>
1640
1640
  <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>
1641
- <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#l00128">BasicTypes.h:128</a></div></div>
1642
- <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#l00129">BasicTypes.h:129</a></div></div>
1641
+ <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#l00129">BasicTypes.h:129</a></div></div>
1642
+ <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#l00130">BasicTypes.h:130</a></div></div>
1643
1643
  <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>
1644
1644
  <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>
1645
- <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#l00127">BasicTypes.h:127</a></div></div>
1645
+ <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#l00128">BasicTypes.h:128</a></div></div>
1646
1646
  </div><!-- fragment -->
1647
1647
  </div>
1648
1648
  </div>
@@ -1717,7 +1717,7 @@ Additional Inherited Members</h2></td></tr>
1717
1717
  <div class="ttc" id="classSVF_1_1DCHEdge_html_a9ab4cd83d9ee475d3d8445cd91839726a9c05805c60fe04033bd9815968059e90"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a9c05805c60fe04033bd9815968059e90">SVF::DCHEdge::INHERITANCE</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00035">DCHG.h:35</a></div></div>
1718
1718
  <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>
1719
1719
  <div class="ttc" id="structSVF_1_1cppUtil_1_1DemangledName_html_a1dd17b240663bc9412adefde82385e02"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">SVF::cppUtil::DemangledName::funcName</a></div><div class="ttdeci">std::string funcName</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00049">CPPUtil.h:49</a></div></div>
1720
- <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#l00129">BasicTypes.h:129</a></div></div>
1720
+ <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#l00130">BasicTypes.h:130</a></div></div>
1721
1721
  <div class="ttc" id="classSVF_1_1GenericNode_html_a2d9cd758d6f8c5189d9b90b74f43e009"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">SVF::GenericNode::getOutEdges</a></div><div class="ttdeci">const GEdgeSetTy &amp; getOutEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00182">GenericGraph.h:182</a></div></div>
1722
1722
  <div class="ttc" id="structSVF_1_1cppUtil_1_1DemangledName_html_a5cd207bce618521166e6fa235014b297"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">SVF::cppUtil::DemangledName::className</a></div><div class="ttdeci">std::string className</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00048">CPPUtil.h:48</a></div></div>
1723
1723
  <div class="ttc" id="classSVF_1_1DCHEdge_html_a9ab4cd83d9ee475d3d8445cd91839726a8b07351616a1798fa34ec3828f485ebb"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a8b07351616a1798fa34ec3828f485ebb">SVF::DCHEdge::STD_DEF</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00038">DCHG.h:38</a></div></div>
@@ -1759,7 +1759,7 @@ Additional Inherited Members</h2></td></tr>
1759
1759
 
1760
1760
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00807">807</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
1761
1761
  <div class="fragment"><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;{</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; t = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t);</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordflow">if</span> (t-&gt;getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; {</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *at = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(t);</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a6c276e661e5e63c1c84387f84c8a62e4">stripArray</a>(at-&gt;getBaseType());</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; }</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordflow">return</span> t;</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a175ed6ad0c9b23d5617f755ab96c76c4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">SVF::DCHGraph::stripQualifiers</a></div><div class="ttdeci">static const DIType * stripQualifiers(const DIType *)</div><div class="ttdoc">Returns the DIType beneath the qualifiers. Does not strip away &quot;DW_TAG_members&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00754">DCHG.cpp:754</a></div></div>
1762
- <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#l00128">BasicTypes.h:128</a></div></div>
1762
+ <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#l00129">BasicTypes.h:129</a></div></div>
1763
1763
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a6c276e661e5e63c1c84387f84c8a62e4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a6c276e661e5e63c1c84387f84c8a62e4">SVF::DCHGraph::stripArray</a></div><div class="ttdeci">static const DIType * stripArray(const DIType *)</div><div class="ttdoc">Returns the DIType beneath all qualifiers and arrays. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00807">DCHG.cpp:807</a></div></div>
1764
1764
  <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>
1765
1765
  </div><!-- fragment -->
@@ -1793,7 +1793,7 @@ Additional Inherited Members</h2></td></tr>
1793
1793
 
1794
1794
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00754">754</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
1795
1795
  <div class="fragment"><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">while</span> (<span class="keyword">true</span>)</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; <span class="comment">// nullptr means void.</span></div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="keywordflow">if</span> (t == <span class="keyword">nullptr</span></div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; || SVFUtil::isa&lt;DIBasicType&gt;(t)</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; || SVFUtil::isa&lt;DISubroutineType&gt;(t))</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; {</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; }</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; <span class="keywordtype">unsigned</span> tag = t-&gt;getTag();</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="comment">// Verbose for clarity.</span></div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">if</span> ( tag == dwarf::DW_TAG_const_type</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; || tag == dwarf::DW_TAG_atomic_type</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; || tag == dwarf::DW_TAG_volatile_type</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; || tag == dwarf::DW_TAG_restrict_type</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; || tag == dwarf::DW_TAG_typedef)</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; {</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="comment">// Qualifier - get underlying type.</span></div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *dt = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a>&gt;(t);</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(t &amp;&amp; <span class="stringliteral">&quot;DCHG: expected DerivedType&quot;</span>);</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; t = dt-&gt;getBaseType();</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; }</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( tag == dwarf::DW_TAG_array_type</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; || tag == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; || tag == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; || tag == dwarf::DW_TAG_union_type</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; || tag == dwarf::DW_TAG_enumeration_type</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; || tag == dwarf::DW_TAG_member</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; || tag == dwarf::DW_TAG_pointer_type</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; || tag == dwarf::DW_TAG_ptr_to_member_type</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; || tag == dwarf::DW_TAG_reference_type</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; || tag == dwarf::DW_TAG_rvalue_reference_type)</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; {</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="comment">// Hit a non-qualifier.</span></div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">break</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( tag == dwarf::DW_TAG_inheritance</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; || tag == dwarf::DW_TAG_friend)</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; {</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;DCHG: unexpected tag when stripping qualifiers&quot;</span>);</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; }</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; {</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;DCHG: unhandled tag when stripping qualifiers&quot;</span>);</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; }</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; }</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">return</span> t;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;}</div><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>
1796
- <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#l00129">BasicTypes.h:129</a></div></div>
1796
+ <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#l00130">BasicTypes.h:130</a></div></div>
1797
1797
  <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>
1798
1798
  </div><!-- fragment -->
1799
1799
  </div>
@@ -1836,12 +1836,12 @@ Additional Inherited Members</h2></td></tr>
1836
1836
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00819">819</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
1837
1837
  <div class="fragment"><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160;{</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; t1 = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t1);</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; t2 = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t2);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordflow">if</span> (t1 == t2)</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; {</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="comment">// Trivial case. Handles SubRoutineTypes too.</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; }</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordflow">if</span> (t1 == <span class="keyword">nullptr</span> || t2 == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; {</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="comment">// Since t1 != t2 and one of them is null, it is</span></div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="comment">// impossible for them to be equal.</span></div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; }</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160;</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="comment">// Check if we need base type comparisons.</span></div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;DIBasicType&gt;(t1) &amp;&amp; SVFUtil::isa&lt;DIBasicType&gt;(t2))</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; {</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *b1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a>&gt;(t1);</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *b2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a>&gt;(t2);</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160;</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="keywordtype">unsigned</span> enc1 = b1-&gt;getEncoding();</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordtype">unsigned</span> enc2 = b2-&gt;getEncoding();</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keywordtype">bool</span> okayEnc = ((enc1 == dwarf::DW_ATE_signed || enc1 == dwarf::DW_ATE_unsigned || enc1 == dwarf::DW_ATE_boolean)</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; &amp;&amp; (enc2 == dwarf::DW_ATE_signed || enc2 == dwarf::DW_ATE_unsigned || enc2 == dwarf::DW_ATE_boolean))</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; ||</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; (enc1 == dwarf::DW_ATE_float &amp;&amp; enc2 == dwarf::DW_ATE_float)</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; ||</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; ((enc1 == dwarf::DW_ATE_signed_char || enc1 == dwarf::DW_ATE_unsigned_char)</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; &amp;&amp;</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; (enc2 == dwarf::DW_ATE_signed_char || enc2 == dwarf::DW_ATE_unsigned_char));</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160;</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="keywordflow">if</span> (!okayEnc) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="comment">// Now we have split integers, floats, and chars, ignoring signedness.</span></div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160;</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; <span class="keywordflow">return</span> t1-&gt;getSizeInBits() == t2-&gt;getSizeInBits()</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; &amp;&amp; t1-&gt;getAlignInBits() == t2-&gt;getAlignInBits();</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; }</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="comment">// Check, do we need to compare base types?</span></div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="comment">// This makes pointers, references, and arrays equivalent.</span></div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <span class="comment">// Will handle member types.</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <span class="keywordflow">if</span> ((SVFUtil::isa&lt;DIDerivedType&gt;(t1) || t1-&gt;getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; &amp;&amp; (SVFUtil::isa&lt;DIDerivedType&gt;(t2) || t2-&gt;getTag() == dwarf::DW_TAG_array_type))</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; {</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *base1, *base2;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <span class="comment">// Set base1.</span></div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *d1 = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(t1))</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; {</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; base1 = d1-&gt;getBaseType();</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; }</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; {</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *c1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(t1);</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(c1 &amp;&amp; <span class="stringliteral">&quot;teq: bad cast for array type&quot;</span>);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; base1 = c1-&gt;getBaseType();</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; }</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160;</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="comment">// Set base2.</span></div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *d2 = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(t2))</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; {</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; base2 = d2-&gt;getBaseType();</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; }</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; {</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *c2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(t2);</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(c2 &amp;&amp; <span class="stringliteral">&quot;teq: bad cast for array type&quot;</span>);</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; base2 = c2-&gt;getBaseType();</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; }</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160;</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="comment">// For ptr-to-member, there is some imprecision (but soundness) in</span></div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <span class="comment">// that we don&#39;t check the class type.</span></div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">teq</a>(base1, base2);</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; }</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160;</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;DICompositeType&gt;(t1) &amp;&amp; SVFUtil::isa&lt;DICompositeType&gt;(t2))</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; {</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *ct1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(t1);</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *ct2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(t2);</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160;</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <span class="keywordflow">if</span> (ct1-&gt;getTag() != ct2-&gt;getTag()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160;</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; <span class="comment">// Treat all enums the same.</span></div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <span class="keywordflow">if</span> (ct1-&gt;getTag() == dwarf::DW_TAG_enumeration_type)</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; {</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; }</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160;</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <span class="comment">// C++ classes? Check mangled name.</span></div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <span class="keywordflow">if</span> (ct1-&gt;getTag() == dwarf::DW_TAG_class_type)</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; {</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <span class="keywordflow">return</span> ct1-&gt;getIdentifier() == ct2-&gt;getIdentifier();</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; }</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160;</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <span class="comment">// Either union or struct, simply test all fields are equal.</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="comment">// Seems like it is enough to check it was defined in the same place.</span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <span class="comment">// The elements sometimes differ but are referring to the same fields.</span></div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <span class="keywordflow">return</span> ct1-&gt;getName() == ct2-&gt;getName()</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; &amp;&amp; ct1-&gt;getFile() == ct2-&gt;getFile()</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; &amp;&amp; ct1-&gt;getLine() == ct2-&gt;getLine();</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; }</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160;</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <span class="comment">// They were not equal base types (discounting signedness), nor were they</span></div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <span class="comment">// &quot;equal&quot; pointers/references/arrays, nor were they the structurally equivalent,</span></div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="comment">// nor were they completely equal.</span></div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a175ed6ad0c9b23d5617f755ab96c76c4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">SVF::DCHGraph::stripQualifiers</a></div><div class="ttdeci">static const DIType * stripQualifiers(const DIType *)</div><div class="ttdoc">Returns the DIType beneath the qualifiers. Does not strip away &quot;DW_TAG_members&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00754">DCHG.cpp:754</a></div></div>
1838
1838
  <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>
1839
- <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#l00128">BasicTypes.h:128</a></div></div>
1840
- <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#l00129">BasicTypes.h:129</a></div></div>
1839
+ <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#l00129">BasicTypes.h:129</a></div></div>
1840
+ <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#l00130">BasicTypes.h:130</a></div></div>
1841
1841
  <div class="ttc" id="classSVF_1_1DCHGraph_html_acb76ab20da1bfbec00f63d08e48cbddd"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">SVF::DCHGraph::teq</a></div><div class="ttdeci">static bool teq(const DIType *t1, const DIType *t2)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00819">DCHG.cpp:819</a></div></div>
1842
1842
  <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a5f7968b31d2b29b589360067cf48e625"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a></div><div class="ttdeci">llvm::DIBasicType DIBasicType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00095">BasicTypes.h:95</a></div></div>
1843
1843
  <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>
1844
- <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#l00127">BasicTypes.h:127</a></div></div>
1844
+ <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#l00128">BasicTypes.h:128</a></div></div>
1845
1845
  </div><!-- fragment -->
1846
1846
  </div>
1847
1847
  </div>