svf-tools 1.0.475 → 1.0.476

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 (252) hide show
  1. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +5 -5
  3. package/SVF-doxygen/html/html/Andersen_8h_source.html +2 -2
  4. package/SVF-doxygen/html/html/Annotator_8h_source.html +1 -1
  5. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp.html +4 -4
  6. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +1 -1
  7. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +11 -11
  8. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +3 -3
  9. package/SVF-doxygen/html/html/CHG_8cpp.html +2 -2
  10. package/SVF-doxygen/html/html/CHG_8cpp_source.html +8 -8
  11. package/SVF-doxygen/html/html/CHG_8h_source.html +2 -2
  12. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +13 -13
  13. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +3 -3
  14. package/SVF-doxygen/html/html/ConsG_8h_source.html +1 -1
  15. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +2 -2
  16. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
  17. package/SVF-doxygen/html/html/CxtStmt_8h_source.html +2 -2
  18. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +17 -17
  19. package/SVF-doxygen/html/html/DCHG_8h_source.html +8 -8
  20. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
  21. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +1 -1
  22. package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +4 -4
  23. package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +6 -6
  24. package/SVF-doxygen/html/html/ExeState_8cpp_source.html +1 -1
  25. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +3 -3
  26. package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
  27. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
  28. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
  29. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp.html +2 -2
  30. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +2 -2
  31. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +2 -2
  32. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
  33. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +6 -6
  34. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
  35. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +1 -1
  36. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +2 -2
  37. package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
  38. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +2 -2
  39. package/SVF-doxygen/html/html/IRGraph_8h_source.html +2 -2
  40. package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +1 -1
  41. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1 -1
  42. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +3 -3
  43. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +9 -9
  44. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +6 -6
  45. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
  46. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +1 -1
  47. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +1 -1
  48. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +6 -6
  49. package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +1 -1
  50. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +9 -9
  51. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +1 -1
  52. package/SVF-doxygen/html/html/MHP_8cpp.html +2 -2
  53. package/SVF-doxygen/html/html/MHP_8cpp_source.html +9 -9
  54. package/SVF-doxygen/html/html/MHP_8h_source.html +1 -1
  55. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +1 -1
  56. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +3 -3
  57. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +2 -2
  58. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +10 -10
  59. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +3 -3
  60. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +3 -3
  61. package/SVF-doxygen/html/html/MTA_8cpp_source.html +3 -3
  62. package/SVF-doxygen/html/html/MTA_8h_source.html +2 -2
  63. package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +1 -1
  64. package/SVF-doxygen/html/html/MemPartition_8h_source.html +1 -1
  65. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +3 -3
  66. package/SVF-doxygen/html/html/MemRegion_8h_source.html +1 -1
  67. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +6 -6
  68. package/SVF-doxygen/html/html/MemSSA_8h_source.html +3 -3
  69. package/SVF-doxygen/html/html/PCG_8cpp_source.html +4 -4
  70. package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
  71. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +1 -1
  72. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
  73. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +4 -4
  74. package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +3 -3
  75. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +8 -8
  76. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +1 -1
  77. package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h.html +71 -53
  78. package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h_source.html +54 -53
  79. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +3 -3
  80. package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +2 -2
  81. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
  82. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +1 -1
  83. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +2 -2
  84. package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
  85. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +32 -32
  86. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +36 -36
  87. package/SVF-doxygen/html/html/SVFIR_8h_source.html +1 -1
  88. package/SVF-doxygen/html/html/SVFModule_8h_source.html +2 -2
  89. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +4 -4
  90. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +4 -4
  91. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +1 -1
  92. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
  93. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +1 -1
  94. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
  95. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
  96. package/SVF-doxygen/html/html/SymState_8h.html +97 -0
  97. package/SVF-doxygen/html/html/SymState_8h_source.html +95 -0
  98. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +22 -22
  99. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +2 -2
  100. package/SVF-doxygen/html/html/TCT_8cpp_source.html +9 -9
  101. package/SVF-doxygen/html/html/TCT_8h_source.html +7 -7
  102. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +2 -2
  103. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +4 -4
  104. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
  105. package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +1 -1
  106. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
  107. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +9 -9
  108. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +2 -2
  109. package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +0 -2
  110. package/SVF-doxygen/html/html/Util_2BasicTypes_8h_source.html +56 -57
  111. package/SVF-doxygen/html/html/VFGNode_8h_source.html +1 -1
  112. package/SVF-doxygen/html/html/VFG_8cpp_source.html +2 -2
  113. package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
  114. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +1 -1
  115. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +1 -1
  116. package/SVF-doxygen/html/html/WPAPass_8h_source.html +1 -1
  117. package/SVF-doxygen/html/html/annotated.html +35 -33
  118. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +5 -5
  119. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +1 -1
  120. package/SVF-doxygen/html/html/classSVF_1_1Annotator.html +1 -1
  121. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +1 -1
  122. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +16 -16
  123. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +6 -6
  124. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +2 -2
  125. package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +41 -41
  126. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +4 -4
  127. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +50 -50
  128. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +2 -2
  129. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +1 -1
  130. package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +1 -1
  131. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +2 -2
  132. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +6 -6
  133. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +9 -9
  134. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +1 -1
  135. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +1 -1
  136. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +1 -1
  137. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +9 -9
  138. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +1 -1
  139. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +1 -1
  140. package/SVF-doxygen/html/html/classSVF_1_1IteratedDominanceFrontier.html +2 -2
  141. package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +1 -1
  142. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +2 -2
  143. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
  144. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +1 -1
  145. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +17 -17
  146. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +9 -9
  147. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +14 -14
  148. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +6 -6
  149. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +4 -4
  150. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +6 -6
  151. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +14 -14
  152. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +3 -3
  153. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +9 -9
  154. package/SVF-doxygen/html/html/classSVF_1_1MemSSADF.html +1 -1
  155. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +9 -9
  156. package/SVF-doxygen/html/html/classSVF_1_1PTACFInfoBuilder.html +3 -3
  157. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +1 -1
  158. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +8 -8
  159. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +12 -12
  160. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +3 -3
  161. package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +3 -3
  162. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +27 -27
  163. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +2 -2
  164. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +3 -3
  165. package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal.html +3 -3
  166. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +44 -44
  167. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +1 -1
  168. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
  169. package/SVF-doxygen/html/html/classSVF_1_1SymState-members.html +92 -0
  170. package/SVF-doxygen/html/html/classSVF_1_1SymState.html +472 -0
  171. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +26 -26
  172. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +16 -16
  173. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
  174. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
  175. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +1 -1
  176. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
  177. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +13 -13
  178. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +4 -4
  179. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +1 -1
  180. package/SVF-doxygen/html/html/classes.html +101 -100
  181. package/SVF-doxygen/html/html/dir_95e22971b5dbae2382075a3453e365b4.html +2 -0
  182. package/SVF-doxygen/html/html/files.html +4 -3
  183. package/SVF-doxygen/html/html/functions_0x7e.html +3 -0
  184. package/SVF-doxygen/html/html/functions_a.html +12 -6
  185. package/SVF-doxygen/html/html/functions_e.html +8 -5
  186. package/SVF-doxygen/html/html/functions_f.html +4 -6
  187. package/SVF-doxygen/html/html/functions_func_0x7e.html +3 -0
  188. package/SVF-doxygen/html/html/functions_func_g.html +14 -8
  189. package/SVF-doxygen/html/html/functions_func_o.html +9 -4
  190. package/SVF-doxygen/html/html/functions_func_s.html +9 -6
  191. package/SVF-doxygen/html/html/functions_g.html +20 -14
  192. package/SVF-doxygen/html/html/functions_l.html +3 -3
  193. package/SVF-doxygen/html/html/functions_o.html +15 -14
  194. package/SVF-doxygen/html/html/functions_p.html +13 -9
  195. package/SVF-doxygen/html/html/functions_r.html +3 -5
  196. package/SVF-doxygen/html/html/functions_s.html +12 -9
  197. package/SVF-doxygen/html/html/functions_t.html +10 -8
  198. package/SVF-doxygen/html/html/functions_type.html +3 -0
  199. package/SVF-doxygen/html/html/functions_vars_a.html +3 -0
  200. package/SVF-doxygen/html/html/functions_vars_e.html +3 -0
  201. package/SVF-doxygen/html/html/functions_w.html +6 -10
  202. package/SVF-doxygen/html/html/globals_c.html +99 -96
  203. package/SVF-doxygen/html/html/globals_s.html +3 -1
  204. package/SVF-doxygen/html/html/globals_type.html +3 -0
  205. package/SVF-doxygen/html/html/hierarchy.html +155 -153
  206. package/SVF-doxygen/html/html/namespaceSVF.html +21 -37
  207. package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +12 -12
  208. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +3 -3
  209. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +23 -23
  210. package/SVF-doxygen/html/html/namespacemembers_c.html +0 -3
  211. package/SVF-doxygen/html/html/namespacemembers_type.html +0 -3
  212. package/SVF-doxygen/html/html/search/all_1.js +2 -0
  213. package/SVF-doxygen/html/html/search/all_10.js +6 -6
  214. package/SVF-doxygen/html/html/search/all_12.js +2 -2
  215. package/SVF-doxygen/html/html/search/all_13.js +10 -8
  216. package/SVF-doxygen/html/html/search/all_14.js +4 -4
  217. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  218. package/SVF-doxygen/html/html/search/all_1b.js +1 -0
  219. package/SVF-doxygen/html/html/search/all_3.js +1 -1
  220. package/SVF-doxygen/html/html/search/all_5.js +1 -1
  221. package/SVF-doxygen/html/html/search/all_6.js +1 -1
  222. package/SVF-doxygen/html/html/search/all_7.js +2 -0
  223. package/SVF-doxygen/html/html/search/all_8.js +1 -0
  224. package/SVF-doxygen/html/html/search/all_9.js +1 -1
  225. package/SVF-doxygen/html/html/search/all_b.js +1 -1
  226. package/SVF-doxygen/html/html/search/all_c.js +3 -3
  227. package/SVF-doxygen/html/html/search/all_e.js +2 -2
  228. package/SVF-doxygen/html/html/search/all_f.js +9 -9
  229. package/SVF-doxygen/html/html/search/classes_7.js +1 -0
  230. package/SVF-doxygen/html/html/search/classes_f.js +2 -1
  231. package/SVF-doxygen/html/html/search/files_d.js +2 -1
  232. package/SVF-doxygen/html/html/search/functions_11.js +2 -1
  233. package/SVF-doxygen/html/html/search/functions_17.js +1 -0
  234. package/SVF-doxygen/html/html/search/functions_6.js +2 -0
  235. package/SVF-doxygen/html/html/search/functions_e.js +5 -5
  236. package/SVF-doxygen/html/html/search/functions_f.js +1 -1
  237. package/SVF-doxygen/html/html/search/typedefs_0.js +1 -0
  238. package/SVF-doxygen/html/html/search/typedefs_2.js +1 -1
  239. package/SVF-doxygen/html/html/search/variables_1.js +1 -0
  240. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  241. package/SVF-doxygen/html/html/search/variables_5.js +1 -0
  242. package/SVF-doxygen/html/html/search/variables_c.js +1 -1
  243. package/SVF-doxygen/html/html/search/variables_e.js +1 -1
  244. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PTACallGraph_01_5_01_4.html +1 -1
  245. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CallSite_01_4.html +3 -3
  246. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtProc_01_4.html +1 -1
  247. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1SymState_01_4-members.html +81 -0
  248. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1SymState_01_4.html +129 -0
  249. package/include/SVF-FE/BasicTypes.h +1 -0
  250. package/include/Util/BasicTypes.h +0 -1
  251. package/include/Util/SymState.h +118 -0
  252. package/package.json +1 -1
@@ -476,19 +476,19 @@ Additional Inherited Members</h2></td></tr>
476
476
  <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>
477
477
  <div class="ttc" id="classSVF_1_1Options_html_adf6c289ef9f2d0196984dd4024ea4316"><div class="ttname"><a href="classSVF_1_1Options.html#adf6c289ef9f2d0196984dd4024ea4316">SVF::Options::PrintDCHG</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; PrintDCHG</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00208">Options.h:208</a></div></div>
478
478
  <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>
479
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a36ec1ba901eeebe7a242f18510831788"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a36ec1ba901eeebe7a242f18510831788">DebugInfoFinder</a></div><div class="ttdeci">llvm::DebugInfoFinder DebugInfoFinder</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
479
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a36ec1ba901eeebe7a242f18510831788"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a36ec1ba901eeebe7a242f18510831788">DebugInfoFinder</a></div><div class="ttdeci">llvm::DebugInfoFinder DebugInfoFinder</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
480
480
  <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>
481
481
  <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>
482
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
482
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</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
484
  <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>
485
485
  <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>
486
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
486
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</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>
488
- <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#l00101">BasicTypes.h:101</a></div></div>
488
+ <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#l00102">BasicTypes.h:102</a></div></div>
489
489
  <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00070">LLVMModule.h:70</a></div></div>
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#l00102">BasicTypes.h:102</a></div></div>
491
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
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#l00103">BasicTypes.h:103</a></div></div>
491
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
492
492
  <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>
493
493
  <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>
494
494
  </div><!-- fragment -->
@@ -521,7 +521,7 @@ 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="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *type = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a>&gt;(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="SVF-FE_2BasicTypes_8h.html#a9707880a0f9b41d3375e2feb7bc5ebc5">ConstantArray</a> *vtbl = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a9707880a0f9b41d3375e2feb7bc5ebc5">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="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>
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="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *type = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a>&gt;(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="SVF-FE_2BasicTypes_8h.html#a9707880a0f9b41d3375e2feb7bc5ebc5">ConstantArray</a> *vtbl = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a9707880a0f9b41d3375e2feb7bc5ebc5">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="SVF-FE_2BasicTypes_8h.html#aaca93e4092f0f73619d730f18b9e65de">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="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>
525
525
  <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#l00049">BasicTypes.h:49</a></div></div>
526
526
  <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#l00076">BasicTypes.h:76</a></div></div>
527
527
  <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,14 +529,14 @@ Additional Inherited Members</h2></td></tr>
529
529
  <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>
530
530
  <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#l00057">BasicTypes.h:57</a></div></div>
531
531
  <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#l00070">BasicTypes.h:70</a></div></div>
532
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
532
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
533
533
  <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a9707880a0f9b41d3375e2feb7bc5ebc5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a9707880a0f9b41d3375e2feb7bc5ebc5">ConstantArray</a></div><div class="ttdeci">llvm::ConstantArray ConstantArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00060">BasicTypes.h:60</a></div></div>
534
534
  <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>
535
- <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>
536
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>
537
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>
538
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>
539
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="SVF-FE_2BasicTypes_8h_html_aaca93e4092f0f73619d730f18b9e65de"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#aaca93e4092f0f73619d730f18b9e65de">Constant</a></div><div class="ttdeci">llvm::Constant Constant</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00061">BasicTypes.h:61</a></div></div>
540
540
  </div><!-- fragment -->
541
541
  </div>
542
542
  </div>
@@ -683,7 +683,7 @@ Additional Inherited Members</h2></td></tr>
683
683
 
684
684
  <p class="definition">Definition at line <a class="el" href="DCHG_8h_source.html#l00259">259</a> of file <a class="el" href="DCHG_8h_source.html">DCHG.h</a>.</p>
685
685
  <div class="fragment"><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">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="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">hasNode</a>(type))</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; {</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">getNode</a>(type)-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988">getVTable</a>() != <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; }</div><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>
686
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
686
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
687
687
  <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>
688
688
  <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>
689
689
  <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>
@@ -720,16 +720,16 @@ 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; bt-&gt;getName().str();</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="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">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; dt-&gt;getName().str() &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="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">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; ct-&gt;getName().str();</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; sp-&gt;getName().str();</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="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">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; st-&gt;getName().str();</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_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#l00095">BasicTypes.h:95</a></div></div>
724
- <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#l00105">BasicTypes.h:105</a></div></div>
725
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
726
- <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#l00125">BasicTypes.h:125</a></div></div>
727
- <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#l00103">BasicTypes.h:103</a></div></div>
728
- <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#l00101">BasicTypes.h:101</a></div></div>
729
- <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#l00102">BasicTypes.h:102</a></div></div>
730
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_abfc3b60432a782f5eb5ea73f20d34333"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#abfc3b60432a782f5eb5ea73f20d34333">DITypeRefArray</a></div><div class="ttdeci">llvm::DITypeRefArray DITypeRefArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00106">BasicTypes.h:106</a></div></div>
723
+ <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#l00094">BasicTypes.h:94</a></div></div>
724
+ <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#l00106">BasicTypes.h:106</a></div></div>
725
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
726
+ <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#l00124">BasicTypes.h:124</a></div></div>
727
+ <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#l00104">BasicTypes.h:104</a></div></div>
728
+ <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#l00102">BasicTypes.h:102</a></div></div>
729
+ <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#l00103">BasicTypes.h:103</a></div></div>
730
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_abfc3b60432a782f5eb5ea73f20d34333"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#abfc3b60432a782f5eb5ea73f20d34333">DITypeRefArray</a></div><div class="ttdeci">llvm::DITypeRefArray DITypeRefArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00107">BasicTypes.h:107</a></div></div>
731
731
  <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>
732
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
732
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
733
733
  </div><!-- fragment -->
734
734
  </div>
735
735
  </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="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">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="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">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="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *&amp;a, <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">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="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">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="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">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="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">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="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *arrayType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">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="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">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="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">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="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">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="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#l00105">BasicTypes.h:105</a></div></div>
796
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
795
+ <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#l00106">BasicTypes.h:106</a></div></div>
796
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
797
797
  <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>
798
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
798
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</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="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
801
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
802
802
  </div><!-- fragment -->
803
803
  </div>
804
804
  </div>
@@ -835,12 +835,12 @@ Additional Inherited Members</h2></td></tr>
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
836
  <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>
837
837
  <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>
838
- <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#l00105">BasicTypes.h:105</a></div></div>
839
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
840
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
838
+ <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#l00106">BasicTypes.h:106</a></div></div>
839
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
840
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</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="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
843
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
844
844
  </div><!-- fragment -->
845
845
  </div>
846
846
  </div>
@@ -897,7 +897,7 @@ Additional Inherited Members</h2></td></tr>
897
897
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00713">713</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
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="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">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="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">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
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
900
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
901
901
  <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>
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 -->
@@ -932,8 +932,8 @@ 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="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *diType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a>&gt;(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="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
936
- <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#l00101">BasicTypes.h:101</a></div></div>
935
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
936
+ <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#l00100">BasicTypes.h:100</a></div></div>
937
937
  <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>
938
938
  </div><!-- fragment -->
939
939
  </div>
@@ -1002,7 +1002,7 @@ Additional Inherited Members</h2></td></tr>
1002
1002
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00555">555</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
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="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">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
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
1005
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
1006
1006
  <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>
1007
1007
  <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#l00075">BasicTypes.h:75</a></div></div>
1008
1008
  <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>
@@ -1054,7 +1054,7 @@ Additional Inherited Members</h2></td></tr>
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="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *cbase = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">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
1056
  <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>
1057
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
1057
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</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>
1060
1060
  </div><!-- fragment -->
@@ -1242,17 +1242,17 @@ Additional Inherited Members</h2></td></tr>
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
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#l00070">BasicTypes.h:70</a></div></div>
1245
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
1245
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
1246
1246
  <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>
1247
1247
  <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>
1248
1248
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aa09c2b313ff1c1abcc1e5cb3f9ef46a5"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aa09c2b313ff1c1abcc1e5cb3f9ef46a5">SVF::SVFUtil::getFunction</a></div><div class="ttdeci">const SVFFunction * getFunction(std::string 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>
1249
1249
  <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#l00075">BasicTypes.h:75</a></div></div>
1250
1250
  <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>
1251
- <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#l00231">BasicTypes.h:231</a></div></div>
1251
+ <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#l00230">BasicTypes.h:230</a></div></div>
1252
1252
  <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>
1253
1253
  <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>
1254
1254
  <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#l00554">CPPUtil.cpp:554</a></div></div>
1255
- <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#l00259">BasicTypes.h:259</a></div></div>
1255
+ <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#l00258">BasicTypes.h:258</a></div></div>
1256
1256
  </div><!-- fragment -->
1257
1257
  </div>
1258
1258
  </div>
@@ -1318,12 +1318,12 @@ Additional Inherited Members</h2></td></tr>
1318
1318
  <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>
1319
1319
  <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>
1320
1320
  <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>
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#l00104">BasicTypes.h:104</a></div></div>
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#l00105">BasicTypes.h:105</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
- <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#l00105">BasicTypes.h:105</a></div></div>
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#l00106">BasicTypes.h:106</a></div></div>
1324
1324
  <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>
1325
1325
  <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>
1326
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
1326
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</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>
1328
1328
  </div><!-- fragment -->
1329
1329
  </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="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *typedefDerivedType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">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="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">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="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">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="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
1430
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</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="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
1433
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</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="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">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="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">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="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">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="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
1641
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
1642
1642
  <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>
1643
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
1643
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</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="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
1645
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
1646
1646
  </div><!-- fragment -->
1647
1647
  </div>
1648
1648
  </div>
@@ -1724,7 +1724,7 @@ Additional Inherited Members</h2></td></tr>
1724
1724
  <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>
1725
1725
  <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>
1726
1726
  <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>
1727
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
1727
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
1728
1728
  <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>
1729
1729
  <div class="ttc" id="classSVF_1_1DCHNode_html_ac77edc44c3c5acc185c27c018837d066"><div class="ttname"><a href="classSVF_1_1DCHNode.html#ac77edc44c3c5acc185c27c018837d066">SVF::DCHNode::getTypedefs</a></div><div class="ttdeci">const Set&lt; const DIDerivedType * &gt; &amp; getTypedefs(void) const</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00159">DCHG.h:159</a></div></div>
1730
1730
  <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>
@@ -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="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *at = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">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="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
1762
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</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 -->
@@ -1794,7 +1794,7 @@ Additional Inherited Members</h2></td></tr>
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="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *dt = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">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
1796
  <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>
1797
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
1797
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
1798
1798
  </div><!-- fragment -->
1799
1799
  </div>
1800
1800
  </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="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">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="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">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="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *c1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">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="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">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="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *c2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">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="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *ct1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">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="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *ct2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">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="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
1840
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
1839
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
1840
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</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
- <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#l00102">BasicTypes.h:102</a></div></div>
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#l00103">BasicTypes.h:103</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="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
1844
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
1845
1845
  </div><!-- fragment -->
1846
1846
  </div>
1847
1847
  </div>