svf-tools 1.0.552 → 1.0.555

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 (355) hide show
  1. package/README.md +11 -1
  2. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
  3. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +7 -7
  5. package/SVF-doxygen/html/html/Andersen_8h_source.html +2 -2
  6. package/SVF-doxygen/html/html/Annotator_8h_source.html +1 -1
  7. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp.html +1 -1
  8. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +3 -3
  9. package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +1 -1
  10. package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +8 -8
  11. package/SVF-doxygen/html/html/CFLAlias_8h_source.html +2 -2
  12. package/SVF-doxygen/html/html/CFLGraph_8cpp_source.html +1 -1
  13. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +18 -18
  14. package/SVF-doxygen/html/html/CHGBuilder_8h.html +1 -0
  15. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +11 -10
  16. package/SVF-doxygen/html/html/CHG_8cpp.html +2 -2
  17. package/SVF-doxygen/html/html/CHG_8cpp_source.html +8 -8
  18. package/SVF-doxygen/html/html/CHG_8h_source.html +3 -3
  19. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +17 -17
  20. package/SVF-doxygen/html/html/CPPUtil_8h_source.html +1 -1
  21. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +4 -4
  22. package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +1 -1
  23. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/html/ConsG_8h_source.html +1 -1
  25. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +2 -2
  26. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
  27. package/SVF-doxygen/html/html/CoreBitVector_8cpp_source.html +1 -1
  28. package/SVF-doxygen/html/html/CxtStmt_8h_source.html +3 -3
  29. package/SVF-doxygen/html/html/DCHG_8cpp.html +2 -2
  30. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +38 -35
  31. package/SVF-doxygen/html/html/DCHG_8h_source.html +9 -10
  32. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +11 -14
  33. package/SVF-doxygen/html/html/DDAPass_8h_source.html +12 -13
  34. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +1 -1
  35. package/SVF-doxygen/html/html/DPItem_8h_source.html +2 -2
  36. package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +5 -5
  37. package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +7 -7
  38. package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +2 -2
  39. package/SVF-doxygen/html/html/DoubleFreeChecker_8h_source.html +1 -1
  40. package/SVF-doxygen/html/html/ExeState_8cpp_source.html +3 -3
  41. package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +5 -5
  42. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +4 -4
  43. package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
  44. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
  45. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
  46. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +1 -1
  47. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
  48. package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +1 -1
  49. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
  50. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +9 -9
  51. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
  52. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +2 -2
  53. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +5 -5
  54. package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
  55. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +5 -5
  56. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +1 -1
  57. package/SVF-doxygen/html/html/IRGraph_8h_source.html +2 -2
  58. package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +3 -3
  59. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +12 -12
  60. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +20 -18
  61. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +27 -27
  62. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +17 -17
  63. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +2 -2
  64. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +1 -1
  65. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +3 -3
  66. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +7 -7
  67. package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +1 -1
  68. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +10 -10
  69. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +1 -1
  70. package/SVF-doxygen/html/html/MHP_8cpp.html +2 -2
  71. package/SVF-doxygen/html/html/MHP_8cpp_source.html +11 -11
  72. package/SVF-doxygen/html/html/MHP_8h_source.html +3 -3
  73. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +1 -1
  74. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +5 -5
  75. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +3 -3
  76. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +12 -12
  77. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +4 -4
  78. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +4 -4
  79. package/SVF-doxygen/html/html/MTA_8cpp_source.html +4 -4
  80. package/SVF-doxygen/html/html/MTA_8h_source.html +3 -3
  81. package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +1 -1
  82. package/SVF-doxygen/html/html/MemPartition_8h_source.html +1 -1
  83. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +6 -6
  84. package/SVF-doxygen/html/html/MemRegion_8h_source.html +1 -1
  85. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +10 -10
  86. package/SVF-doxygen/html/html/MemSSA_8h_source.html +3 -3
  87. package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +2 -2
  88. package/SVF-doxygen/html/html/PCG_8cpp_source.html +6 -6
  89. package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
  90. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +6 -6
  91. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
  92. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +1 -1
  93. package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +2 -2
  94. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +2 -2
  95. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +11 -11
  96. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +1 -1
  97. package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +1 -1
  98. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +1 -1
  99. package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h.html +2 -0
  100. package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h_source.html +110 -109
  101. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +4 -4
  102. package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +2 -2
  103. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
  104. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +1 -1
  105. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +4 -4
  106. package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
  107. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +61 -61
  108. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +47 -47
  109. package/SVF-doxygen/html/html/SVFIR_8h_source.html +1 -1
  110. package/SVF-doxygen/html/html/SVFModule_8h_source.html +4 -4
  111. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
  112. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +9 -9
  113. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +49 -52
  114. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +2 -2
  115. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +2 -2
  116. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +2 -2
  117. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +2 -2
  118. package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +10 -10
  119. package/SVF-doxygen/html/html/SaberCondAllocator_8h_source.html +4 -4
  120. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
  121. package/SVF-doxygen/html/html/SparseBitVector_8h_source.html +1 -1
  122. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
  123. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +34 -34
  124. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +1 -1
  125. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +5 -5
  126. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +5 -5
  127. package/SVF-doxygen/html/html/TCT_8cpp_source.html +12 -12
  128. package/SVF-doxygen/html/html/TCT_8h_source.html +8 -8
  129. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +4 -4
  130. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +4 -4
  131. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +2 -2
  132. package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +2 -2
  133. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
  134. package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +0 -2
  135. package/SVF-doxygen/html/html/Util_2BasicTypes_8h_source.html +79 -80
  136. package/SVF-doxygen/html/html/VFGNode_8h_source.html +1 -1
  137. package/SVF-doxygen/html/html/VFG_8cpp_source.html +3 -3
  138. package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
  139. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +1 -1
  140. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +9 -12
  141. package/SVF-doxygen/html/html/WPAPass_8h_source.html +10 -11
  142. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  143. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  144. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
  145. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
  146. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +1 -1
  148. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +7 -7
  149. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +1 -1
  150. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +1 -1
  151. package/SVF-doxygen/html/html/classSVF_1_1Annotator.html +1 -1
  152. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +1 -1
  153. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +2 -2
  154. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
  155. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  156. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +1 -1
  157. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +1 -1
  158. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +2 -2
  159. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +8 -8
  160. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +50 -50
  161. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +6 -6
  162. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +1 -1
  163. package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +1 -1
  164. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +3 -3
  165. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +2 -2
  166. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +1 -1
  167. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  168. package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +41 -41
  169. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
  170. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
  171. package/SVF-doxygen/html/html/classSVF_1_1CondStdSet.html +1 -1
  172. package/SVF-doxygen/html/html/classSVF_1_1CondVar.html +1 -1
  173. package/SVF-doxygen/html/html/classSVF_1_1ContextCond.html +3 -3
  174. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +4 -4
  175. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
  176. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +1 -1
  177. package/SVF-doxygen/html/html/classSVF_1_1CoreBitVector.html +2 -2
  178. package/SVF-doxygen/html/html/classSVF_1_1CxtDPItem.html +2 -2
  179. package/SVF-doxygen/html/html/classSVF_1_1CxtProc.html +1 -1
  180. package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
  181. package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
  182. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph-members.html +1 -1
  183. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +114 -111
  184. package/SVF-doxygen/html/html/classSVF_1_1DDAPass-members.html +5 -6
  185. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +42 -79
  186. package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +1 -1
  187. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +1 -1
  188. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +2 -2
  189. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +1 -1
  190. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +1 -1
  191. package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +5 -5
  192. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI-members.html +1 -1
  193. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +8 -8
  194. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI_1_1Operation-members.html +1 -1
  195. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI_1_1Operation.html +5 -5
  196. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
  197. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +2 -2
  198. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +1 -1
  199. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +12 -12
  200. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
  201. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
  202. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
  203. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
  204. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +3 -3
  205. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +4 -4
  206. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +1 -1
  207. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
  208. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +1 -1
  209. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +1 -1
  210. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +1 -1
  211. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +2 -2
  212. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +13 -13
  213. package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +1 -1
  214. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
  215. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -1
  216. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +1 -1
  217. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +1 -1
  218. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +1 -1
  219. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  220. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  221. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +1 -1
  222. package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +1 -1
  223. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +1 -1
  224. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +1 -1
  225. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +1 -1
  226. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
  227. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  228. package/SVF-doxygen/html/html/classSVF_1_1IteratedDominanceFrontier.html +2 -2
  229. package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +3 -3
  230. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet-members.html +20 -19
  231. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +95 -54
  232. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +4 -4
  233. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
  234. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +1 -1
  235. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +4 -4
  236. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +20 -20
  237. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +9 -9
  238. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +19 -19
  239. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +12 -12
  240. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
  241. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
  242. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +4 -4
  243. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +10 -10
  244. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +15 -15
  245. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +4 -4
  246. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +1 -1
  247. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +13 -13
  248. package/SVF-doxygen/html/html/classSVF_1_1MemSSADF.html +1 -1
  249. package/SVF-doxygen/html/html/classSVF_1_1MutablePTData.html +2 -2
  250. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +1 -1
  251. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
  252. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +11 -11
  253. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
  254. package/SVF-doxygen/html/html/classSVF_1_1PTACFInfoBuilder.html +4 -4
  255. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +1 -1
  256. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +4 -4
  257. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +2 -2
  258. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +1 -1
  259. package/SVF-doxygen/html/html/classSVF_1_1PersistentIncDFPTData.html +2 -2
  260. package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +2 -2
  261. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
  262. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +16 -16
  263. package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +3 -3
  264. package/SVF-doxygen/html/html/classSVF_1_1PointsTo_1_1PointsToIterator.html +2 -2
  265. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +1 -1
  266. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +4 -4
  267. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +1 -1
  268. package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +1 -1
  269. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +1 -1
  270. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +1 -1
  271. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  272. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +1 -1
  273. package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +3 -3
  274. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +61 -61
  275. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +3 -3
  276. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
  277. package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal.html +3 -3
  278. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +123 -120
  279. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +1 -1
  280. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +3 -3
  281. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +5 -5
  282. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +4 -4
  283. package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +14 -14
  284. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
  285. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
  286. package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector.html +2 -2
  287. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +1 -1
  288. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
  289. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +1 -1
  290. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +40 -40
  291. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +8 -8
  292. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +19 -19
  293. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  294. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  295. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +4 -4
  296. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +4 -4
  297. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +1 -1
  298. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +1 -1
  299. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +1 -1
  300. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +1 -1
  301. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
  302. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
  303. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  304. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +4 -4
  305. package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +1 -1
  306. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
  307. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
  308. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +1 -1
  309. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +1 -1
  310. package/SVF-doxygen/html/html/classSVF_1_1WPAPass-members.html +4 -5
  311. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +28 -66
  312. package/SVF-doxygen/html/html/functions_b.html +1 -1
  313. package/SVF-doxygen/html/html/functions_func_b.html +1 -1
  314. package/SVF-doxygen/html/html/functions_func_g.html +8 -8
  315. package/SVF-doxygen/html/html/functions_func_r.html +3 -3
  316. package/SVF-doxygen/html/html/functions_g.html +9 -9
  317. package/SVF-doxygen/html/html/functions_r.html +2 -4
  318. package/SVF-doxygen/html/html/namespaceSVF.html +141 -141
  319. package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +49 -49
  320. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +168 -171
  321. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +28 -28
  322. package/SVF-doxygen/html/html/search/all_11.js +1 -1
  323. package/SVF-doxygen/html/html/search/all_13.js +1 -1
  324. package/SVF-doxygen/html/html/search/all_2.js +1 -1
  325. package/SVF-doxygen/html/html/search/all_7.js +3 -3
  326. package/SVF-doxygen/html/html/search/functions_1.js +1 -1
  327. package/SVF-doxygen/html/html/search/functions_10.js +1 -1
  328. package/SVF-doxygen/html/html/search/functions_6.js +3 -3
  329. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4.html +3 -3
  330. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  331. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +2 -2
  332. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +1 -1
  333. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PTACallGraph_01_5_01_4.html +3 -3
  334. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +4 -4
  335. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +4 -4
  336. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CallSite_01_4.html +3 -3
  337. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtProc_01_4.html +1 -1
  338. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  339. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  340. package/include/DDA/DDAPass.h +0 -3
  341. package/include/SVF-FE/BasicTypes.h +1 -0
  342. package/include/SVF-FE/CHGBuilder.h +1 -0
  343. package/include/SVF-FE/DCHG.h +1 -1
  344. package/include/SVF-FE/LLVMModule.h +17 -0
  345. package/include/Util/BasicTypes.h +0 -1
  346. package/include/Util/ExtAPI.h +2 -2
  347. package/include/Util/ExtAPI.json +3 -3
  348. package/include/Util/SVFUtil.h +1 -13
  349. package/include/WPA/WPAPass.h +0 -3
  350. package/lib/DDA/DDAPass.cpp +0 -7
  351. package/lib/SVF-FE/DCHG.cpp +4 -7
  352. package/lib/SVF-FE/SVFIRBuilder.cpp +63 -23
  353. package/lib/Util/ExtAPI.cpp +1 -1
  354. package/lib/WPA/WPAPass.cpp +0 -10
  355. package/package.json +1 -1
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">DCHG.h</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="DCHG_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===----- DCHG.h -- CHG using DWARF debug info ---------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This is based upon the original CHA.h (now CHG.h).</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * DCHG.h</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * Created on: Aug 23, 2019</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * Author: Mohamad Barbar</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// TODO: add a flag such that getCanonicalType returns its arg so</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// that the impl. does not &quot;node collapsing&quot; based on teq.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#ifndef DCHG_H_</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#define DCHG_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="GenericGraph_8h.html">Graphs/GenericGraph.h</a>&quot;</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CHG_8h.html">Graphs/CHG.h</a>&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CPPUtil_8h.html">SVF-FE/CPPUtil.h</a>&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="WorkList_8h.html">Util/WorkList.h</a>&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">class </span>SVFModule;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">class </span>DCHNode;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html"> 30</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1DCHEdge.html">DCHEdge</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1GenericEdge.html">GenericEdge</a>&lt;DCHNode&gt;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">enum</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba9c05805c60fe04033bd9815968059e90"> 35</a></span>&#160; <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba9c05805c60fe04033bd9815968059e90">INHERITANCE</a>, <span class="comment">// inheritance relation</span></div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3e807b4caeb170c5cd1e855ac1a92d77"> 36</a></span>&#160; <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3e807b4caeb170c5cd1e855ac1a92d77">INSTANCE</a>, <span class="comment">// template-instance relation</span></div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3b49b95b713f585b717810dce5ac6564"> 37</a></span>&#160; <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3b49b95b713f585b717810dce5ac6564">FIRST_FIELD</a>, <span class="comment">// src -ff-&gt; dst =&gt; dst is first field of src</span></div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba8b07351616a1798fa34ec3828f485ebb"> 38</a></span>&#160; <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba8b07351616a1798fa34ec3828f485ebb">STD_DEF</a> <span class="comment">// Edges defined by the standard like (int -std-&gt; char)</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// We also make the char --&gt; void edge a STD_DEF edge.</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; };</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a2580878ab964494ee5c7840e16ef84b3"> 42</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericNode.html">GenericNode&lt;DCHNode, DCHEdge&gt;::GEdgeSetTy</a> <a class="code" href="classSVF_1_1DCHEdge.html#a2580878ab964494ee5c7840e16ef84b3">DCHEdgeSetTy</a>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a17e3db6d11e0752064194ffc46cd9afe"> 44</a></span>&#160; <a class="code" href="classSVF_1_1DCHEdge.html#a17e3db6d11e0752064194ffc46cd9afe">DCHEdge</a>(<a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *<a class="code" href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">src</a>, <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *<a class="code" href="classSVF_1_1GenericEdge.html#aa41cb7482bdab1ba328f4b94f30f3ee4">dst</a>, <a class="code" href="classSVF_1_1GenericEdge.html#aab8892b73370c32b48621cd1d0cce614">GEdgeFlag</a> k = 0)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; : <a class="code" href="classSVF_1_1GenericEdge.html">GenericEdge</a>&lt;<a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a>&gt;(src, dst, k), <a class="code" href="classSVF_1_1DCHEdge.html#a41bd0d95d588aa7fb77e83dc91654493">offset</a>(0)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a500ccfa8f8327ab792844698423d8578"> 49</a></span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1DCHEdge.html#a500ccfa8f8327ab792844698423d8578">getConstantFieldIdx</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHEdge.html#a41bd0d95d588aa7fb77e83dc91654493">offset</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a70f757826082c95766c8324c1264e977"> 54</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHEdge.html#a70f757826082c95766c8324c1264e977">setOffset</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1DCHEdge.html#a41bd0d95d588aa7fb77e83dc91654493">offset</a>)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; this-&gt;offset = <a class="code" href="classSVF_1_1DCHEdge.html#a41bd0d95d588aa7fb77e83dc91654493">offset</a>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a41bd0d95d588aa7fb77e83dc91654493"> 60</a></span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1DCHEdge.html#a41bd0d95d588aa7fb77e83dc91654493">offset</a>;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;};</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html"> 63</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1GenericNode.html">GenericNode</a>&lt;DCHNode, DCHEdge&gt;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;{</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a029988e54846db9aca2584e1c10283e3"> 66</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">enum</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a029988e54846db9aca2584e1c10283e3a06075ea779ab7777fd25e0e45c462a73"> 68</a></span>&#160; PURE_ABSTRACT = 0x1, <span class="comment">// pure virtual abstract class</span></div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a029988e54846db9aca2584e1c10283e3a1d2b2d38bfc09259f63933e9ab23aecc"> 69</a></span>&#160; MULTI_INHERITANCE = 0x2, <span class="comment">// multi inheritance class</span></div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a029988e54846db9aca2584e1c10283e3a38e9932af7d38e26c84fb0edbd083afc"> 70</a></span>&#160; TEMPLATE = 0x04, <span class="comment">// template class</span></div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a029988e54846db9aca2584e1c10283e3ad5c99cf0681af30e8ed4cc59cc2371cb"> 71</a></span>&#160; SCALAR = 0x08 <span class="comment">// non-class scalar type</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; } <a class="code" href="classSVF_1_1DCHNode.html#a029988e54846db9aca2584e1c10283e3">CLASSATTR</a>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#aebd4fb544e8a97164901ab602e0fe7fc"> 74</a></span>&#160; <span class="keyword">typedef</span> std::vector&lt;const Function*&gt; <a class="code" href="classSVF_1_1DCHNode.html#aebd4fb544e8a97164901ab602e0fe7fc">FuncVector</a>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a3e81cc40aa1c37999cead00f1af85a6e"> 76</a></span>&#160; <a class="code" href="classSVF_1_1DCHNode.html#a3e81cc40aa1c37999cead00f1af85a6e">DCHNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *diType, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i = 0, <a class="code" href="classSVF_1_1GenericNode.html#a3f20339b5295e11beb0f9adb95c7aa5b">GNodeK</a> k = 0)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; : <a class="code" href="classSVF_1_1GenericNode.html">GenericNode</a>&lt;<a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a>, <a class="code" href="classSVF_1_1DCHEdge.html">DCHEdge</a>&gt;(i, k), vtable(nullptr), flags(0)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; this-&gt;diType = diType;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">if</span> (diType == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; typeName = <span class="stringliteral">&quot;null-void&quot;</span>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (diType-&gt;getRawName() != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; typeName = diType-&gt;getName().str();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; typeName = <span class="stringliteral">&quot;unnamed!&quot;</span>;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#ab2d407888f4cf9fd5d9ae0b16ef2af49"> 94</a></span>&#160; <a class="code" href="classSVF_1_1DCHNode.html#ab2d407888f4cf9fd5d9ae0b16ef2af49">~DCHNode</a>() { }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153"> 96</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> diType;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a089af6085dec833b58133a9e834dab54"> 101</a></span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1DCHNode.html#a089af6085dec833b58133a9e834dab54">getName</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">return</span> typeName;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a4e08c543fa2ae557ff835b1a0f3c53a4"> 108</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHNode.html#a4e08c543fa2ae557ff835b1a0f3c53a4">setFlag</a>(<a class="code" href="classSVF_1_1DCHNode.html#a029988e54846db9aca2584e1c10283e3">CLASSATTR</a> mask)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; flags |= mask;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a743bc5df582114c45d1907d62a42a39c"> 112</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHNode.html#a743bc5df582114c45d1907d62a42a39c">hasFlag</a>(<a class="code" href="classSVF_1_1DCHNode.html#a029988e54846db9aca2584e1c10283e3">CLASSATTR</a> mask)<span class="keyword"> const</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> (flags &amp; mask) == mask;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#afa271fdb9c1aa3589f41655813a2de8e"> 120</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHNode.html#afa271fdb9c1aa3589f41655813a2de8e">setPureAbstract</a>()</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; setFlag(PURE_ABSTRACT);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a798e80f0cc5951789474abc3a0999166"> 124</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHNode.html#a798e80f0cc5951789474abc3a0999166">setMultiInheritance</a>()</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; setFlag(MULTI_INHERITANCE);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a3947007a7b8074f06064e34de9d980fe"> 128</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHNode.html#a3947007a7b8074f06064e34de9d980fe">setTemplate</a>()</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; setFlag(TEMPLATE);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a917265fa44ed08b66a6bd722f318bfa4"> 132</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHNode.html#a917265fa44ed08b66a6bd722f318bfa4">setScalar</a>()</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; setFlag(SCALAR);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; }</div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#aed5e8397d43b602b79425acdae5e01f5"> 136</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHNode.html#aed5e8397d43b602b79425acdae5e01f5">isPureAbstract</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">return</span> hasFlag(PURE_ABSTRACT);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a42026e30e790bce5be03da3e45353c8d"> 140</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHNode.html#a42026e30e790bce5be03da3e45353c8d">isMultiInheritance</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">return</span> hasFlag(MULTI_INHERITANCE);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#ada436c7cb9108898c520952a87ebd01d"> 144</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHNode.html#ada436c7cb9108898c520952a87ebd01d">isTemplate</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">return</span> hasFlag(TEMPLATE);</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"><a class="line" href="classSVF_1_1DCHNode.html#a50cf99ff5cc910512c1ce3987c7395ef"> 148</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHNode.html#a50cf99ff5cc910512c1ce3987c7395ef">isScalar</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">return</span> hasFlag(SCALAR);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a9d1016e3da3462664198b1125dfc8f6e"> 154</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHNode.html#a9d1016e3da3462664198b1125dfc8f6e">addTypedef</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *diTypedef)</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; typedefs.insert(diTypedef);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div><div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#ac77edc44c3c5acc185c27c018837d066"> 159</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const DIDerivedType *&gt;</a> &amp;<a class="code" href="classSVF_1_1DCHNode.html#ac77edc44c3c5acc185c27c018837d066">getTypedefs</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">return</span> typedefs;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#ab8a339276172b8aa0fc915e5bde0b3db"> 164</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHNode.html#ab8a339276172b8aa0fc915e5bde0b3db">setVTable</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; vtable = vtbl;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988"> 169</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *<a class="code" href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988">getVTable</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span> vtable;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a0669b995c4fe72f206154f5cf6889fe8"> 175</a></span>&#160; <span class="keyword">const</span> std::vector&lt;std::vector&lt;const Function *&gt;&gt; &amp;<a class="code" href="classSVF_1_1DCHNode.html#a0669b995c4fe72f206154f5cf6889fe8">getVfnVectors</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">return</span> vfnVectors;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a11ad6b4fc518f6307727f6b76f7f6f53"> 181</a></span>&#160; std::vector&lt;const Function *&gt; &amp;<a class="code" href="classSVF_1_1DCHNode.html#a11ad6b4fc518f6307727f6b76f7f6f53">getVfnVector</a>(<span class="keywordtype">unsigned</span> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">if</span> (vfnVectors.size() &lt; n + 1)</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; vfnVectors.resize(n + 1);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</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; <span class="keywordflow">return</span> vfnVectors[<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>];</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;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a05b5b4539273ac5d21d8cbcfa712a439"> 193</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="classSVF_1_1DCHNode.html#a05b5b4539273ac5d21d8cbcfa712a439">diType</a>;</div><div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#abafa483be12690549fbcccaf4c3fa511"> 195</a></span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const DIDerivedType *&gt;</a> <a class="code" href="classSVF_1_1DCHNode.html#abafa483be12690549fbcccaf4c3fa511">typedefs</a>;</div><div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a620ac2c6a9095510be5999431ff54b6d"> 196</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a>* <a class="code" href="classSVF_1_1DCHNode.html#a620ac2c6a9095510be5999431ff54b6d">vtable</a>;</div><div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a8a7b412262af7a90c9ef583b6a8c10fc"> 197</a></span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1DCHNode.html#a8a7b412262af7a90c9ef583b6a8c10fc">typeName</a>;</div><div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a0b2c21429fd28c50965737a0baa2e90b"> 198</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classSVF_1_1DCHNode.html#a0b2c21429fd28c50965737a0baa2e90b">flags</a>;</div><div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a56659a23b59051eba77c9a532f4489a1"> 200</a></span>&#160; std::vector&lt;const Function *&gt; <a class="code" href="classSVF_1_1DCHNode.html#a56659a23b59051eba77c9a532f4489a1">primaryVTable</a>;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#af479bf99a759b5dd68619e24f00bfa10"> 204</a></span>&#160; std::vector&lt;std::vector&lt;const Function*&gt;&gt; <a class="code" href="classSVF_1_1DCHNode.html#af479bf99a759b5dd68619e24f00bfa10">vfnVectors</a>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;};</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html"> 208</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</a>, <span class="keyword">public</span> <a class="code" href="classSVF_1_1GenericGraph.html">GenericGraph</a>&lt;DCHNode, DCHEdge&gt;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;{</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *stripQualifiers(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *stripArray(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> teq(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t2);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> diTypeToStr(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// Returns whether t is an array, a struct, a class, a union, or neither.</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> isAgg(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a7cbea4d5399333497faa3f8d213e365e"> 233</a></span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a7cbea4d5399333497faa3f8d213e365e">DCHGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a> *svfMod)</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; : svfModule(svfMod), numTypes(0) <span class="comment">// vfID(0), buildingCHGTime(0) {</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; this-&gt;kind = DI;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#ae358abf5a377f480ecaea4df7a9fbdfd"> 239</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1DCHGraph.html#ae358abf5a377f480ecaea4df7a9fbdfd">~DCHGraph</a>() { };</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> buildCHG(<span class="keywordtype">bool</span> extend);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a587baf86ecc2fdbecfcf85310673e9f4"> 245</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHGraph.html#a587baf86ecc2fdbecfcf85310673e9f4">dump</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; filename)</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="classllvm_1_1GraphPrinter.html#af6ed328e74882d2b5e2b4039cb836928">GraphPrinter::WriteGraphToFile</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>(), filename, <span class="keyword">this</span>);</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordtype">void</span> <a class="code" href="cJSON_8cpp.html#ae71e2aec89bf140e6430cb7d5ca417c5">print</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a1494aeef22e15baaa160e8d598dd7de0"> 252</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHGraph.html#a1494aeef22e15baaa160e8d598dd7de0">csHasVFnsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">return</span> csHasVtblsBasedonCHA(cs);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7">VFunSet</a> &amp;getCSVFsBasedonCHA(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs) <span class="keyword">override</span>;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a2fef8f7209f100c7a266cf3102b1219b"> 259</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHGraph.html#a2fef8f7209f100c7a266cf3102b1219b">csHasVtblsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = getCanonicalType(getCSStaticType(cs));</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> (!hasNode(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> getNode(type)-&gt;getVTable() != <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; }</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a> &amp;getCSVtblsBasedonCHA(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs) <span class="keyword">override</span>;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> getVFnsFromVtbls(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a> &amp;vtbls, <a class="code" href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7">VFunSet</a> &amp;virtualFunctions) <span class="keyword">override</span>;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isBase(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a8a1a0a26c50cc4becfc754bb68d1dc6b">a</a>, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>, <span class="keywordtype">bool</span> firstField);</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isFieldOf(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *f, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *b);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#af9970ff0ef4a8f4c638da9f519d14a21"> 280</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHGraph.html#af9970ff0ef4a8f4c638da9f519d14a21">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</a> *chg)</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">return</span> chg-&gt;<a class="code" href="classSVF_1_1CommonCHGraph.html#adf2a02fff9d7dd9fc9d92121e5e28f8b">getKind</a>() == DI;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *getCanonicalType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#acaff636e6a9cf59363d6ee00435c04ff"> 291</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="classSVF_1_1DCHGraph.html#acaff636e6a9cf59363d6ee00435c04ff">getFieldType</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *base, <span class="keywordtype">unsigned</span> idx)</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; base = getCanonicalType(base);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">if</span> (base == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// Conservative; the base object is untyped, sadly.</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="comment">// For TBHC this is conservative because the union type is lower in the DCHG</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// than its fields. TODO: make more precise.</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">if</span> (base-&gt;getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">return</span> base;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">if</span> (base-&gt;getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; {</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *cbase = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(base);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; assert(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; assert(fieldTypes.find(base) != fieldTypes.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 = fieldTypes[base];</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; assert(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> getCanonicalType(fields[idx]);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;</div><div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824"> 327</a></span>&#160; <span class="keyword">const</span> std::vector&lt;const DIType *&gt; &amp;<a class="code" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">getFieldTypes</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *base)</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; base = getCanonicalType(base);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; assert(fieldTypes.find(base) != fieldTypes.end() &amp;&amp; <span class="stringliteral">&quot;DCHG: base not flattened!&quot;</span>);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">return</span> fieldTypes[base];</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; }</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; <span class="comment">// Returns the number of fields in base (length of getFieldTypes).</span></div><div class="line"><a name="l00335"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a0788694fbff155949fc4f4d6487c223e"> 335</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="classSVF_1_1DCHGraph.html#a0788694fbff155949fc4f4d6487c223e">getNumFields</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *base)</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; base = getCanonicalType(base);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; assert(fieldTypes.find(base) != fieldTypes.end() &amp;&amp; <span class="stringliteral">&quot;DCHG: base not flattened!&quot;</span>);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">return</span> fieldTypes[base].size();</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; }</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a159e158c794fff115d5642b85963f43b"> 343</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const DIType *&gt;</a> &amp;<a class="code" href="classSVF_1_1DCHGraph.html#a159e158c794fff115d5642b85963f43b">getAggs</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *base)</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; {</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; base = getCanonicalType(base);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; assert(containingAggs.find(base) != containingAggs.end() &amp;&amp; <span class="stringliteral">&quot;DCHG: aggregates not gathered for base!&quot;</span>);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">return</span> containingAggs[base];</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; }</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordtype">bool</span> isFirstField(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *f, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *b);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00354"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a85a3c9a6a60a4379717773f8722ae42e"> 354</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a> *<a class="code" href="classSVF_1_1DCHGraph.html#a85a3c9a6a60a4379717773f8722ae42e">svfModule</a>;</div><div class="line"><a name="l00356"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e"> 356</a></span>&#160; <span class="keywordtype">bool</span> extended = <span class="keyword">false</span>;</div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a581ce71cbc7994f71c9a6b9b145d3b9f"> 358</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const DIType *, DCHNode *&gt;</a> <a class="code" href="classSVF_1_1DCHGraph.html#a581ce71cbc7994f71c9a6b9b145d3b9f">diTypeToNodeMap</a>;</div><div class="line"><a name="l00360"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708"> 360</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const GlobalValue *, const DIType *&gt;</a> <a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>;</div><div class="line"><a name="l00362"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#ac0d5f1e10f642aac5b64792bf5fcbd9d"> 362</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const DIType *, NodeBS&gt;</a> <a class="code" href="classSVF_1_1DCHGraph.html#ac0d5f1e10f642aac5b64792bf5fcbd9d">chaMap</a>;</div><div class="line"><a name="l00364"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#abe8d313b501182ab62f2276a19d670a4"> 364</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const DIType *, NodeBS&gt;</a> <a class="code" href="classSVF_1_1DCHGraph.html#abe8d313b501182ab62f2276a19d670a4">chaFFMap</a>;</div><div class="line"><a name="l00366"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155"> 366</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const DIType *, VTableSet&gt;</a> <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>;</div><div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#ad79a569e77f94fa8494eed3f18e07e90"> 368</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CallSite, VFunSet&gt;</a> <a class="code" href="classSVF_1_1DCHGraph.html#ad79a569e77f94fa8494eed3f18e07e90">csCHAMap</a>;</div><div class="line"><a name="l00370"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1"> 370</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const DIType *, const DIType *&gt;</a> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>;</div><div class="line"><a name="l00372"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393"> 372</a></span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const DIType *&gt;</a> <a class="code" href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">canonicalTypes</a>;</div><div class="line"><a name="l00374"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a"> 374</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const DIType *, std::vector&lt;const DIType *&gt;</a>&gt; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>;</div><div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9"> 376</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const DIType *, Set&lt;const DIType *&gt;</a>&gt; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordtype">void</span> handleDIBasicType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ada0513be7e25325325ccc9183aeca278">DIBasicType</a> *basicType);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordtype">void</span> handleDICompositeType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *compositeType);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordtype">void</span> handleDIDerivedType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *derivedType);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordtype">void</span> handleDISubroutineType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a090e0791e8c200104ed3ab6bab157129">DISubroutineType</a> *subroutineType);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordtype">void</span> buildVTables(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;module);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> &amp;cha(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, <span class="keywordtype">bool</span> firstField);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordtype">void</span> handleTypedef(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *typedefType);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordtype">void</span> flatten(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordtype">void</span> gatherAggs(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *getOrCreateNode(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;</div><div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6"> 407</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">getCSStaticType</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;<span class="keyword"> </span>{</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.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>()-&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; assert(md != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;Missing type metadata at virtual callsite&quot;</span>);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *diType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a>&gt;(md);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; assert(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="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00417"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25"> 417</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">hasNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; type = getCanonicalType(type);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">return</span> diTypeToNodeMap.find(type) != diTypeToNodeMap.end();</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;</div><div class="line"><a name="l00424"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d"> 424</a></span>&#160; <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *<a class="code" href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">getNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; {</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; type = getCanonicalType(type);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">if</span> (hasNode(type))</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; {</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">return</span> diTypeToNodeMap.at(type);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <a class="code" href="classSVF_1_1DCHEdge.html">DCHEdge</a> *addEdge(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t2, <a class="code" href="classSVF_1_1GenericEdge.html#a5aceeb48929f54264807b36569019a8a">DCHEdge::GEdgeKind</a> et);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="classSVF_1_1DCHEdge.html">DCHEdge</a> *<a class="code" href="CHG_8cpp.html#a4c6cbac96543cd55e4df050a33512ac5">hasEdge</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t2, <a class="code" href="classSVF_1_1GenericEdge.html#a5aceeb48929f54264807b36569019a8a">DCHEdge::GEdgeKind</a> et);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;</div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a76fd3154a31584bb64683f2d762cc56c"> 442</a></span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1DCHGraph.html#a76fd3154a31584bb64683f2d762cc56c">numTypes</a>;</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;};</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;{</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="comment">/* !</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;<span class="comment"> * GraphTraits specializations for generic graph algorithms.</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;<span class="comment"> * Provide graph traits for traversing from a constraint node using standard graph traversals.</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1DCHNode_01_5_01_4.html"> 453</a></span>&#160;<span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>GraphTraits&lt;<a class="code" href="namespaceSVF.html">SVF</a>::DCHNode*&gt; : <span class="keyword">public</span> GraphTraits&lt;SVF::GenericNode&lt;SVF::DCHNode,SVF::DCHEdge&gt;* &gt;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;{</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;};</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00459"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1DCHNode_01_5_01_4_01_4.html"> 459</a></span>&#160;<span class="keyword">struct </span>GraphTraits&lt;Inverse&lt;SVF::DCHNode*&gt; &gt; : <span class="keyword">public</span> GraphTraits&lt;Inverse&lt;SVF::GenericNode&lt;SVF::DCHNode,SVF::DCHEdge&gt;* &gt; &gt;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;{</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;};</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;</div><div class="line"><a name="l00463"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1DCHGraph_01_5_01_4.html"> 463</a></span>&#160;<span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>GraphTraits&lt;SVF::DCHGraph*&gt; : <span class="keyword">public</span> GraphTraits&lt;SVF::GenericGraph&lt;SVF::DCHNode,SVF::DCHEdge&gt;* &gt;</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;{</div><div class="line"><a name="l00465"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1DCHGraph_01_5_01_4.html#a7f54c1b4b286ea5b46471741e4c34b54"> 465</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DCHNode.html">SVF::DCHNode</a> *<a class="code" href="structllvm_1_1GraphTraits_3_01SVF_1_1DCHGraph_01_5_01_4.html#a7f54c1b4b286ea5b46471741e4c34b54">NodeRef</a>;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;};</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;} <span class="comment">// End namespace llvm</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* DCHG_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1DCHGraph_html_a0788694fbff155949fc4f4d6487c223e"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a0788694fbff155949fc4f4d6487c223e">SVF::DCHGraph::getNumFields</a></div><div class="ttdeci">unsigned getNumFields(const DIType *base)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00335">DCHG.h:335</a></div></div>
69
+ <a href="DCHG_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===----- DCHG.h -- CHG using DWARF debug info ---------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This is based upon the original CHA.h (now CHG.h).</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * DCHG.h</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * Created on: Aug 23, 2019</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * Author: Mohamad Barbar</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// TODO: add a flag such that getCanonicalType returns its arg so</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// that the impl. does not &quot;node collapsing&quot; based on teq.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#ifndef DCHG_H_</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#define DCHG_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="GenericGraph_8h.html">Graphs/GenericGraph.h</a>&quot;</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CHG_8h.html">Graphs/CHG.h</a>&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CPPUtil_8h.html">SVF-FE/CPPUtil.h</a>&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="WorkList_8h.html">Util/WorkList.h</a>&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">class </span>SVFModule;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">class </span>DCHNode;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html"> 30</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1DCHEdge.html">DCHEdge</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1GenericEdge.html">GenericEdge</a>&lt;DCHNode&gt;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">enum</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba9c05805c60fe04033bd9815968059e90"> 35</a></span>&#160; <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba9c05805c60fe04033bd9815968059e90">INHERITANCE</a>, <span class="comment">// inheritance relation</span></div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3e807b4caeb170c5cd1e855ac1a92d77"> 36</a></span>&#160; <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3e807b4caeb170c5cd1e855ac1a92d77">INSTANCE</a>, <span class="comment">// template-instance relation</span></div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3b49b95b713f585b717810dce5ac6564"> 37</a></span>&#160; <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3b49b95b713f585b717810dce5ac6564">FIRST_FIELD</a>, <span class="comment">// src -ff-&gt; dst =&gt; dst is first field of src</span></div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba8b07351616a1798fa34ec3828f485ebb"> 38</a></span>&#160; <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba8b07351616a1798fa34ec3828f485ebb">STD_DEF</a> <span class="comment">// Edges defined by the standard like (int -std-&gt; char)</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// We also make the char --&gt; void edge a STD_DEF edge.</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; };</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a2580878ab964494ee5c7840e16ef84b3"> 42</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericNode.html">GenericNode&lt;DCHNode, DCHEdge&gt;::GEdgeSetTy</a> <a class="code" href="classSVF_1_1DCHEdge.html#a2580878ab964494ee5c7840e16ef84b3">DCHEdgeSetTy</a>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a17e3db6d11e0752064194ffc46cd9afe"> 44</a></span>&#160; <a class="code" href="classSVF_1_1DCHEdge.html#a17e3db6d11e0752064194ffc46cd9afe">DCHEdge</a>(<a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *<a class="code" href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">src</a>, <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *<a class="code" href="classSVF_1_1GenericEdge.html#aa41cb7482bdab1ba328f4b94f30f3ee4">dst</a>, <a class="code" href="classSVF_1_1GenericEdge.html#aab8892b73370c32b48621cd1d0cce614">GEdgeFlag</a> k = 0)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; : <a class="code" href="classSVF_1_1GenericEdge.html">GenericEdge</a>&lt;<a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a>&gt;(src, dst, k), <a class="code" href="classSVF_1_1DCHEdge.html#a41bd0d95d588aa7fb77e83dc91654493">offset</a>(0)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a500ccfa8f8327ab792844698423d8578"> 49</a></span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1DCHEdge.html#a500ccfa8f8327ab792844698423d8578">getConstantFieldIdx</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHEdge.html#a41bd0d95d588aa7fb77e83dc91654493">offset</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a70f757826082c95766c8324c1264e977"> 54</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHEdge.html#a70f757826082c95766c8324c1264e977">setOffset</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1DCHEdge.html#a41bd0d95d588aa7fb77e83dc91654493">offset</a>)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; this-&gt;offset = <a class="code" href="classSVF_1_1DCHEdge.html#a41bd0d95d588aa7fb77e83dc91654493">offset</a>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHEdge.html#a41bd0d95d588aa7fb77e83dc91654493"> 60</a></span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1DCHEdge.html#a41bd0d95d588aa7fb77e83dc91654493">offset</a>;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;};</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html"> 63</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1GenericNode.html">GenericNode</a>&lt;DCHNode, DCHEdge&gt;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;{</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a029988e54846db9aca2584e1c10283e3"> 66</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">enum</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a029988e54846db9aca2584e1c10283e3a06075ea779ab7777fd25e0e45c462a73"> 68</a></span>&#160; PURE_ABSTRACT = 0x1, <span class="comment">// pure virtual abstract class</span></div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a029988e54846db9aca2584e1c10283e3a1d2b2d38bfc09259f63933e9ab23aecc"> 69</a></span>&#160; MULTI_INHERITANCE = 0x2, <span class="comment">// multi inheritance class</span></div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a029988e54846db9aca2584e1c10283e3a38e9932af7d38e26c84fb0edbd083afc"> 70</a></span>&#160; TEMPLATE = 0x04, <span class="comment">// template class</span></div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a029988e54846db9aca2584e1c10283e3ad5c99cf0681af30e8ed4cc59cc2371cb"> 71</a></span>&#160; SCALAR = 0x08 <span class="comment">// non-class scalar type</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; } <a class="code" href="classSVF_1_1DCHNode.html#a029988e54846db9aca2584e1c10283e3">CLASSATTR</a>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#aebd4fb544e8a97164901ab602e0fe7fc"> 74</a></span>&#160; <span class="keyword">typedef</span> std::vector&lt;const Function*&gt; <a class="code" href="classSVF_1_1DCHNode.html#aebd4fb544e8a97164901ab602e0fe7fc">FuncVector</a>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a3e81cc40aa1c37999cead00f1af85a6e"> 76</a></span>&#160; <a class="code" href="classSVF_1_1DCHNode.html#a3e81cc40aa1c37999cead00f1af85a6e">DCHNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *diType, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i = 0, <a class="code" href="classSVF_1_1GenericNode.html#a3f20339b5295e11beb0f9adb95c7aa5b">GNodeK</a> k = 0)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; : <a class="code" href="classSVF_1_1GenericNode.html">GenericNode</a>&lt;<a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a>, <a class="code" href="classSVF_1_1DCHEdge.html">DCHEdge</a>&gt;(i, k), vtable(nullptr), flags(0)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; this-&gt;diType = diType;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">if</span> (diType == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; typeName = <span class="stringliteral">&quot;null-void&quot;</span>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (diType-&gt;getRawName() != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; typeName = diType-&gt;getName().str();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; typeName = <span class="stringliteral">&quot;unnamed!&quot;</span>;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#ab2d407888f4cf9fd5d9ae0b16ef2af49"> 94</a></span>&#160; <a class="code" href="classSVF_1_1DCHNode.html#ab2d407888f4cf9fd5d9ae0b16ef2af49">~DCHNode</a>() { }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153"> 96</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> diType;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a089af6085dec833b58133a9e834dab54"> 101</a></span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1DCHNode.html#a089af6085dec833b58133a9e834dab54">getName</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">return</span> typeName;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a4e08c543fa2ae557ff835b1a0f3c53a4"> 108</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHNode.html#a4e08c543fa2ae557ff835b1a0f3c53a4">setFlag</a>(<a class="code" href="classSVF_1_1DCHNode.html#a029988e54846db9aca2584e1c10283e3">CLASSATTR</a> mask)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; flags |= mask;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a743bc5df582114c45d1907d62a42a39c"> 112</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHNode.html#a743bc5df582114c45d1907d62a42a39c">hasFlag</a>(<a class="code" href="classSVF_1_1DCHNode.html#a029988e54846db9aca2584e1c10283e3">CLASSATTR</a> mask)<span class="keyword"> const</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> (flags &amp; mask) == mask;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#afa271fdb9c1aa3589f41655813a2de8e"> 120</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHNode.html#afa271fdb9c1aa3589f41655813a2de8e">setPureAbstract</a>()</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; setFlag(PURE_ABSTRACT);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a798e80f0cc5951789474abc3a0999166"> 124</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHNode.html#a798e80f0cc5951789474abc3a0999166">setMultiInheritance</a>()</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; setFlag(MULTI_INHERITANCE);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a3947007a7b8074f06064e34de9d980fe"> 128</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHNode.html#a3947007a7b8074f06064e34de9d980fe">setTemplate</a>()</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; setFlag(TEMPLATE);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a917265fa44ed08b66a6bd722f318bfa4"> 132</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHNode.html#a917265fa44ed08b66a6bd722f318bfa4">setScalar</a>()</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; setFlag(SCALAR);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; }</div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#aed5e8397d43b602b79425acdae5e01f5"> 136</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHNode.html#aed5e8397d43b602b79425acdae5e01f5">isPureAbstract</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">return</span> hasFlag(PURE_ABSTRACT);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a42026e30e790bce5be03da3e45353c8d"> 140</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHNode.html#a42026e30e790bce5be03da3e45353c8d">isMultiInheritance</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">return</span> hasFlag(MULTI_INHERITANCE);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#ada436c7cb9108898c520952a87ebd01d"> 144</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHNode.html#ada436c7cb9108898c520952a87ebd01d">isTemplate</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">return</span> hasFlag(TEMPLATE);</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"><a class="line" href="classSVF_1_1DCHNode.html#a50cf99ff5cc910512c1ce3987c7395ef"> 148</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHNode.html#a50cf99ff5cc910512c1ce3987c7395ef">isScalar</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">return</span> hasFlag(SCALAR);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a9d1016e3da3462664198b1125dfc8f6e"> 154</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHNode.html#a9d1016e3da3462664198b1125dfc8f6e">addTypedef</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *diTypedef)</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; typedefs.insert(diTypedef);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div><div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#ac77edc44c3c5acc185c27c018837d066"> 159</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const DIDerivedType *&gt;</a> &amp;<a class="code" href="classSVF_1_1DCHNode.html#ac77edc44c3c5acc185c27c018837d066">getTypedefs</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">return</span> typedefs;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#ab8a339276172b8aa0fc915e5bde0b3db"> 164</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHNode.html#ab8a339276172b8aa0fc915e5bde0b3db">setVTable</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; vtable = vtbl;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988"> 169</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *<a class="code" href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988">getVTable</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span> vtable;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a0669b995c4fe72f206154f5cf6889fe8"> 175</a></span>&#160; <span class="keyword">const</span> std::vector&lt;std::vector&lt;const Function *&gt;&gt; &amp;<a class="code" href="classSVF_1_1DCHNode.html#a0669b995c4fe72f206154f5cf6889fe8">getVfnVectors</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">return</span> vfnVectors;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a11ad6b4fc518f6307727f6b76f7f6f53"> 181</a></span>&#160; std::vector&lt;const Function *&gt; &amp;<a class="code" href="classSVF_1_1DCHNode.html#a11ad6b4fc518f6307727f6b76f7f6f53">getVfnVector</a>(<span class="keywordtype">unsigned</span> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">if</span> (vfnVectors.size() &lt; n + 1)</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; vfnVectors.resize(n + 1);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</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; <span class="keywordflow">return</span> vfnVectors[<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>];</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;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a05b5b4539273ac5d21d8cbcfa712a439"> 193</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="classSVF_1_1DCHNode.html#a05b5b4539273ac5d21d8cbcfa712a439">diType</a>;</div><div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#abafa483be12690549fbcccaf4c3fa511"> 195</a></span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const DIDerivedType *&gt;</a> <a class="code" href="classSVF_1_1DCHNode.html#abafa483be12690549fbcccaf4c3fa511">typedefs</a>;</div><div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a620ac2c6a9095510be5999431ff54b6d"> 196</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a>* <a class="code" href="classSVF_1_1DCHNode.html#a620ac2c6a9095510be5999431ff54b6d">vtable</a>;</div><div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a8a7b412262af7a90c9ef583b6a8c10fc"> 197</a></span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1DCHNode.html#a8a7b412262af7a90c9ef583b6a8c10fc">typeName</a>;</div><div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a0b2c21429fd28c50965737a0baa2e90b"> 198</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classSVF_1_1DCHNode.html#a0b2c21429fd28c50965737a0baa2e90b">flags</a>;</div><div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#a56659a23b59051eba77c9a532f4489a1"> 200</a></span>&#160; std::vector&lt;const Function *&gt; <a class="code" href="classSVF_1_1DCHNode.html#a56659a23b59051eba77c9a532f4489a1">primaryVTable</a>;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHNode.html#af479bf99a759b5dd68619e24f00bfa10"> 204</a></span>&#160; std::vector&lt;std::vector&lt;const Function*&gt;&gt; <a class="code" href="classSVF_1_1DCHNode.html#af479bf99a759b5dd68619e24f00bfa10">vfnVectors</a>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;};</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html"> 208</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</a>, <span class="keyword">public</span> <a class="code" href="classSVF_1_1GenericGraph.html">GenericGraph</a>&lt;DCHNode, DCHEdge&gt;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;{</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *stripQualifiers(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *stripArray(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> teq(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t2);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> diTypeToStr(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// Returns whether t is an array, a struct, a class, a union, or neither.</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> isAgg(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a7cbea4d5399333497faa3f8d213e365e"> 233</a></span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a7cbea4d5399333497faa3f8d213e365e">DCHGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a> *svfMod)</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; : svfModule(svfMod), numTypes(0) <span class="comment">// vfID(0), buildingCHGTime(0) {</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; this-&gt;kind = DI;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#ae358abf5a377f480ecaea4df7a9fbdfd"> 239</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1DCHGraph.html#ae358abf5a377f480ecaea4df7a9fbdfd">~DCHGraph</a>() { };</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> buildCHG(<span class="keywordtype">bool</span> extend);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a587baf86ecc2fdbecfcf85310673e9f4"> 245</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DCHGraph.html#a587baf86ecc2fdbecfcf85310673e9f4">dump</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; filename)</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="classllvm_1_1GraphPrinter.html#af6ed328e74882d2b5e2b4039cb836928">GraphPrinter::WriteGraphToFile</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>(), filename, <span class="keyword">this</span>);</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordtype">void</span> <a class="code" href="cJSON_8cpp.html#ae71e2aec89bf140e6430cb7d5ca417c5">print</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a1494aeef22e15baaa160e8d598dd7de0"> 252</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHGraph.html#a1494aeef22e15baaa160e8d598dd7de0">csHasVFnsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">return</span> csHasVtblsBasedonCHA(cs);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7">VFunSet</a> &amp;getCSVFsBasedonCHA(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs) <span class="keyword">override</span>;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a2fef8f7209f100c7a266cf3102b1219b"> 259</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHGraph.html#a2fef8f7209f100c7a266cf3102b1219b">csHasVtblsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = getCanonicalType(getCSStaticType(cs));</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> (!hasNode(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> getNode(type)-&gt;getVTable() != <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; }</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a> &amp;getCSVtblsBasedonCHA(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs) <span class="keyword">override</span>;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> getVFnsFromVtbls(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a> &amp;vtbls, <a class="code" href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7">VFunSet</a> &amp;virtualFunctions) <span class="keyword">override</span>;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isBase(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a8a1a0a26c50cc4becfc754bb68d1dc6b">a</a>, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>, <span class="keywordtype">bool</span> firstField);</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isFieldOf(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *f, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *b);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#af9970ff0ef4a8f4c638da9f519d14a21"> 280</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHGraph.html#af9970ff0ef4a8f4c638da9f519d14a21">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</a> *chg)</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">return</span> chg-&gt;<a class="code" href="classSVF_1_1CommonCHGraph.html#adf2a02fff9d7dd9fc9d92121e5e28f8b">getKind</a>() == DI;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *getCanonicalType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#acaff636e6a9cf59363d6ee00435c04ff"> 291</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="classSVF_1_1DCHGraph.html#acaff636e6a9cf59363d6ee00435c04ff">getFieldType</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *base, <span class="keywordtype">unsigned</span> idx)</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; base = getCanonicalType(base);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">if</span> (base == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// Conservative; the base object is untyped, sadly.</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="comment">// For TBHC this is conservative because the union type is lower in the DCHG</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// than its fields. TODO: make more precise.</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">if</span> (base-&gt;getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">return</span> base;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">if</span> (base-&gt;getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; {</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *cbase = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(base);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; assert(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; assert(fieldTypes.find(base) != fieldTypes.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 = fieldTypes[base];</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; assert(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> getCanonicalType(fields[idx]);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;</div><div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824"> 327</a></span>&#160; <span class="keyword">const</span> std::vector&lt;const DIType *&gt; &amp;<a class="code" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">getFieldTypes</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *base)</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; base = getCanonicalType(base);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; assert(fieldTypes.find(base) != fieldTypes.end() &amp;&amp; <span class="stringliteral">&quot;DCHG: base not flattened!&quot;</span>);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">return</span> fieldTypes[base];</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; }</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; <span class="comment">// Returns the number of fields in base (length of getFieldTypes).</span></div><div class="line"><a name="l00335"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a0788694fbff155949fc4f4d6487c223e"> 335</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="classSVF_1_1DCHGraph.html#a0788694fbff155949fc4f4d6487c223e">getNumFields</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *base)</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; base = getCanonicalType(base);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; assert(fieldTypes.find(base) != fieldTypes.end() &amp;&amp; <span class="stringliteral">&quot;DCHG: base not flattened!&quot;</span>);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">return</span> fieldTypes[base].size();</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; }</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a159e158c794fff115d5642b85963f43b"> 343</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const DIType *&gt;</a> &amp;<a class="code" href="classSVF_1_1DCHGraph.html#a159e158c794fff115d5642b85963f43b">getAggs</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *base)</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; {</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; base = getCanonicalType(base);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; assert(containingAggs.find(base) != containingAggs.end() &amp;&amp; <span class="stringliteral">&quot;DCHG: aggregates not gathered for base!&quot;</span>);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">return</span> containingAggs[base];</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; }</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordtype">bool</span> isFirstField(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *f, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *b);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00354"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a85a3c9a6a60a4379717773f8722ae42e"> 354</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a> *<a class="code" href="classSVF_1_1DCHGraph.html#a85a3c9a6a60a4379717773f8722ae42e">svfModule</a>;</div><div class="line"><a name="l00356"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e"> 356</a></span>&#160; <span class="keywordtype">bool</span> extended = <span class="keyword">false</span>;</div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a581ce71cbc7994f71c9a6b9b145d3b9f"> 358</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const DIType *, DCHNode *&gt;</a> <a class="code" href="classSVF_1_1DCHGraph.html#a581ce71cbc7994f71c9a6b9b145d3b9f">diTypeToNodeMap</a>;</div><div class="line"><a name="l00360"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708"> 360</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const GlobalValue *, const DIType *&gt;</a> <a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>;</div><div class="line"><a name="l00362"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#ac0d5f1e10f642aac5b64792bf5fcbd9d"> 362</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const DIType *, NodeBS&gt;</a> <a class="code" href="classSVF_1_1DCHGraph.html#ac0d5f1e10f642aac5b64792bf5fcbd9d">chaMap</a>;</div><div class="line"><a name="l00364"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#abe8d313b501182ab62f2276a19d670a4"> 364</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const DIType *, NodeBS&gt;</a> <a class="code" href="classSVF_1_1DCHGraph.html#abe8d313b501182ab62f2276a19d670a4">chaFFMap</a>;</div><div class="line"><a name="l00366"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155"> 366</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const DIType *, VTableSet&gt;</a> <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>;</div><div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#ad79a569e77f94fa8494eed3f18e07e90"> 368</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CallSite, VFunSet&gt;</a> <a class="code" href="classSVF_1_1DCHGraph.html#ad79a569e77f94fa8494eed3f18e07e90">csCHAMap</a>;</div><div class="line"><a name="l00370"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1"> 370</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const DIType *, const DIType *&gt;</a> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>;</div><div class="line"><a name="l00372"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393"> 372</a></span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const DIType *&gt;</a> <a class="code" href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">canonicalTypes</a>;</div><div class="line"><a name="l00374"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a"> 374</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const DIType *, std::vector&lt;const DIType *&gt;</a>&gt; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>;</div><div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9"> 376</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const DIType *, Set&lt;const DIType *&gt;</a>&gt; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordtype">void</span> handleDIBasicType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ada0513be7e25325325ccc9183aeca278">DIBasicType</a> *basicType);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordtype">void</span> handleDICompositeType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *compositeType);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordtype">void</span> handleDIDerivedType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *derivedType);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordtype">void</span> handleDISubroutineType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a090e0791e8c200104ed3ab6bab157129">DISubroutineType</a> *subroutineType);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordtype">void</span> buildVTables(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a> &amp;module);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> &amp;cha(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, <span class="keywordtype">bool</span> firstField);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordtype">void</span> handleTypedef(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *typedefType);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordtype">void</span> flatten(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordtype">void</span> gatherAggs(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *getOrCreateNode(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;</div><div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6"> 407</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">getCSStaticType</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;<span class="keyword"> </span>{</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.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>()-&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; assert(md != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;Missing type metadata at virtual callsite&quot;</span>);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *diType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a>&gt;(md);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; assert(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="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00417"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25"> 417</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">hasNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; type = getCanonicalType(type);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">return</span> diTypeToNodeMap.find(type) != diTypeToNodeMap.end();</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;</div><div class="line"><a name="l00424"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d"> 424</a></span>&#160; <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *<a class="code" href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">getNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; {</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; type = getCanonicalType(type);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">if</span> (hasNode(type))</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; {</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">return</span> diTypeToNodeMap.at(type);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <a class="code" href="classSVF_1_1DCHEdge.html">DCHEdge</a> *addEdge(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t2, <a class="code" href="classSVF_1_1GenericEdge.html#a5aceeb48929f54264807b36569019a8a">DCHEdge::GEdgeKind</a> et);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="classSVF_1_1DCHEdge.html">DCHEdge</a> *<a class="code" href="CHG_8cpp.html#a4c6cbac96543cd55e4df050a33512ac5">hasEdge</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t2, <a class="code" href="classSVF_1_1GenericEdge.html#a5aceeb48929f54264807b36569019a8a">DCHEdge::GEdgeKind</a> et);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;</div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="classSVF_1_1DCHGraph.html#a76fd3154a31584bb64683f2d762cc56c"> 442</a></span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1DCHGraph.html#a76fd3154a31584bb64683f2d762cc56c">numTypes</a>;</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;};</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;{</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="comment">/* !</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;<span class="comment"> * GraphTraits specializations for generic graph algorithms.</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;<span class="comment"> * Provide graph traits for traversing from a constraint node using standard graph traversals.</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1DCHNode_01_5_01_4.html"> 453</a></span>&#160;<span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>GraphTraits&lt;<a class="code" href="namespaceSVF.html">SVF</a>::DCHNode*&gt; : <span class="keyword">public</span> GraphTraits&lt;SVF::GenericNode&lt;SVF::DCHNode,SVF::DCHEdge&gt;* &gt;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;{</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;};</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00459"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1DCHNode_01_5_01_4_01_4.html"> 459</a></span>&#160;<span class="keyword">struct </span>GraphTraits&lt;Inverse&lt;SVF::DCHNode*&gt; &gt; : <span class="keyword">public</span> GraphTraits&lt;Inverse&lt;SVF::GenericNode&lt;SVF::DCHNode,SVF::DCHEdge&gt;* &gt; &gt;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;{</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;};</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;</div><div class="line"><a name="l00463"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1DCHGraph_01_5_01_4.html"> 463</a></span>&#160;<span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>GraphTraits&lt;SVF::DCHGraph*&gt; : <span class="keyword">public</span> GraphTraits&lt;SVF::GenericGraph&lt;SVF::DCHNode,SVF::DCHEdge&gt;* &gt;</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;{</div><div class="line"><a name="l00465"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1DCHGraph_01_5_01_4.html#a7f54c1b4b286ea5b46471741e4c34b54"> 465</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DCHNode.html">SVF::DCHNode</a> *<a class="code" href="structllvm_1_1GraphTraits_3_01SVF_1_1DCHGraph_01_5_01_4.html#a7f54c1b4b286ea5b46471741e4c34b54">NodeRef</a>;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;};</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;} <span class="comment">// End namespace llvm</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* DCHG_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1DCHGraph_html_a0788694fbff155949fc4f4d6487c223e"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a0788694fbff155949fc4f4d6487c223e">SVF::DCHGraph::getNumFields</a></div><div class="ttdeci">unsigned getNumFields(const DIType *base)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00335">DCHG.h:335</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1DCHGraph_html_adc7a17f70ac3fa89624ad874dbd16ff9"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">SVF::DCHGraph::containingAggs</a></div><div class="ttdeci">Map&lt; const DIType *, Set&lt; const DIType * &gt; &gt; containingAggs</div><div class="ttdoc">Maps aggregate types to all the aggregate types it transitively contains. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00376">DCHG.h:376</a></div></div>
71
71
  <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>
72
72
  <div class="ttc" id="classSVF_1_1DCHNode_html_a56659a23b59051eba77c9a532f4489a1"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a56659a23b59051eba77c9a532f4489a1">SVF::DCHNode::primaryVTable</a></div><div class="ttdeci">std::vector&lt; const Function * &gt; primaryVTable</div><div class="ttdoc">The virtual functions which this class actually defines/overrides. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00200">DCHG.h:200</a></div></div>
@@ -76,7 +76,6 @@ $(function() {
76
76
  <div class="ttc" id="CHG_8h_html"><div class="ttname"><a href="CHG_8h.html">CHG.h</a></div></div>
77
77
  <div class="ttc" id="classSVF_1_1DCHEdge_html"><div class="ttname"><a href="classSVF_1_1DCHEdge.html">SVF::DCHEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00030">DCHG.h:30</a></div></div>
78
78
  <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>
79
- <div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00077">BasicTypes.h:77</a></div></div>
80
79
  <div class="ttc" id="namespacellvm_html"><div class="ttname"><a href="namespacellvm.html">llvm</a></div><div class="ttdef"><b>Definition:</b> <a href="CFLGraph_8h_source.html#l00118">CFLGraph.h:118</a></div></div>
81
80
  <div class="ttc" id="classSVF_1_1DCHEdge_html_a70f757826082c95766c8324c1264e977"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a70f757826082c95766c8324c1264e977">SVF::DCHEdge::setOffset</a></div><div class="ttdeci">void setOffset(u32_t offset)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00054">DCHG.h:54</a></div></div>
82
81
  <div class="ttc" id="CPPUtil_8h_html"><div class="ttname"><a href="CPPUtil_8h.html">CPPUtil.h</a></div></div>
@@ -90,13 +89,13 @@ $(function() {
90
89
  <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>
91
90
  <div class="ttc" id="SVFUtil_8h_html"><div class="ttname"><a href="SVFUtil_8h.html">SVFUtil.h</a></div></div>
92
91
  <div class="ttc" id="classSVF_1_1DCHGraph_html_ae358abf5a377f480ecaea4df7a9fbdfd"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#ae358abf5a377f480ecaea4df7a9fbdfd">SVF::DCHGraph::~DCHGraph</a></div><div class="ttdeci">virtual ~DCHGraph()</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00239">DCHG.h:239</a></div></div>
93
- <div class="ttc" id="classSVF_1_1CallSite_html_ab36a6a35eea673d4bdca615efc4336b1"><div class="ttname"><a href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">SVF::CallSite::getInstruction</a></div><div class="ttdeci">CallBase * getInstruction() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00259">BasicTypes.h:259</a></div></div>
92
+ <div class="ttc" id="classSVF_1_1CallSite_html_ab36a6a35eea673d4bdca615efc4336b1"><div class="ttname"><a href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">SVF::CallSite::getInstruction</a></div><div class="ttdeci">CallBase * getInstruction() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00258">BasicTypes.h:258</a></div></div>
94
93
  <div class="ttc" id="classSVF_1_1DCHGraph_html_abe8d313b501182ab62f2276a19d670a4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#abe8d313b501182ab62f2276a19d670a4">SVF::DCHGraph::chaFFMap</a></div><div class="ttdeci">Map&lt; const DIType *, NodeBS &gt; chaFFMap</div><div class="ttdoc">Maps types to all children but also considering first field. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00364">DCHG.h:364</a></div></div>
95
94
  <div class="ttc" id="classSVF_1_1DCHGraph_html"><div class="ttname"><a href="classSVF_1_1DCHGraph.html">SVF::DCHGraph</a></div><div class="ttdoc">Dwarf based CHG. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00208">DCHG.h:208</a></div></div>
96
95
  <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>
97
96
  <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>
98
97
  <div class="ttc" id="classSVF_1_1DCHEdge_html_a48f01c4a02c4e278a1ab70b16efdef4ba3b49b95b713f585b717810dce5ac6564"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3b49b95b713f585b717810dce5ac6564">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>
99
- <div class="ttc" id="namespaceSVF_html_aded9b991c77acc5284ccead0739e84f1"><div class="ttname"><a href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">SVF::DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00145">BasicTypes.h:145</a></div></div>
98
+ <div class="ttc" id="namespaceSVF_html_aded9b991c77acc5284ccead0739e84f1"><div class="ttname"><a href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">SVF::DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00146">BasicTypes.h:146</a></div></div>
100
99
  <div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00041">SVFModule.h:41</a></div></div>
101
100
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a587baf86ecc2fdbecfcf85310673e9f4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a587baf86ecc2fdbecfcf85310673e9f4">SVF::DCHGraph::dump</a></div><div class="ttdeci">void dump(const std::string &amp;filename)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00245">DCHG.h:245</a></div></div>
102
101
  <div class="ttc" id="classSVF_1_1DCHNode_html_aaf4036d892bdae02a01d31bfe3db2153"><div class="ttname"><a href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">SVF::DCHNode::getType</a></div><div class="ttdeci">const DIType * getType(void) const</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00096">DCHG.h:96</a></div></div>
@@ -113,7 +112,7 @@ $(function() {
113
112
  <div class="ttc" id="cJSON_8h_html_a1a175e87536301df98c805ac0636ad7c"><div class="ttname"><a href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a></div><div class="ttdeci">const cJSON *const b</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00255">cJSON.h:255</a></div></div>
114
113
  <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>
115
114
  <div class="ttc" id="classSVF_1_1DCHNode_html_a05b5b4539273ac5d21d8cbcfa712a439"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a05b5b4539273ac5d21d8cbcfa712a439">SVF::DCHNode::diType</a></div><div class="ttdeci">const DIType * diType</div><div class="ttdoc">Type of this node. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00193">DCHG.h:193</a></div></div>
116
- <div class="ttc" id="namespaceSVF_html_a090e0791e8c200104ed3ab6bab157129"><div class="ttname"><a href="namespaceSVF.html#a090e0791e8c200104ed3ab6bab157129">SVF::DISubroutineType</a></div><div class="ttdeci">llvm::DISubroutineType DISubroutineType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00148">BasicTypes.h:148</a></div></div>
115
+ <div class="ttc" id="namespaceSVF_html_a090e0791e8c200104ed3ab6bab157129"><div class="ttname"><a href="namespaceSVF.html#a090e0791e8c200104ed3ab6bab157129">SVF::DISubroutineType</a></div><div class="ttdeci">llvm::DISubroutineType DISubroutineType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00149">BasicTypes.h:149</a></div></div>
117
116
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a2fef8f7209f100c7a266cf3102b1219b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a2fef8f7209f100c7a266cf3102b1219b">SVF::DCHGraph::csHasVtblsBasedonCHA</a></div><div class="ttdeci">virtual bool csHasVtblsBasedonCHA(CallSite cs) override</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00259">DCHG.h:259</a></div></div>
118
117
  <div class="ttc" id="classSVF_1_1DCHNode_html_a3947007a7b8074f06064e34de9d980fe"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a3947007a7b8074f06064e34de9d980fe">SVF::DCHNode::setTemplate</a></div><div class="ttdeci">void setTemplate()</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00128">DCHG.h:128</a></div></div>
119
118
  <div class="ttc" id="classSVF_1_1DCHEdge_html_a48f01c4a02c4e278a1ab70b16efdef4ba3e807b4caeb170c5cd1e855ac1a92d77"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3e807b4caeb170c5cd1e855ac1a92d77">SVF::DCHEdge::INSTANCE</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00036">DCHG.h:36</a></div></div>
@@ -123,7 +122,7 @@ $(function() {
123
122
  <div class="ttc" id="GenericGraph_8h_html"><div class="ttname"><a href="GenericGraph_8h.html">GenericGraph.h</a></div></div>
124
123
  <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>
125
124
  <div class="ttc" id="classSVF_1_1GenericEdge_html_aab8892b73370c32b48621cd1d0cce614"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#aab8892b73370c32b48621cd1d0cce614">SVF::GenericEdge&lt; DCHNode &gt;::GEdgeFlag</a></div><div class="ttdeci">u64_t GEdgeFlag</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00052">GenericGraph.h:52</a></div></div>
126
- <div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00146">BasicTypes.h:146</a></div></div>
125
+ <div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00147">BasicTypes.h:147</a></div></div>
127
126
  <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>
128
127
  <div class="ttc" id="classllvm_1_1GraphPrinter_html_af6ed328e74882d2b5e2b4039cb836928"><div class="ttname"><a href="classllvm_1_1GraphPrinter.html#af6ed328e74882d2b5e2b4039cb836928">llvm::GraphPrinter::WriteGraphToFile</a></div><div class="ttdeci">static void WriteGraphToFile(SVF::OutStream &amp;O, const std::string &amp;GraphName, const GraphType &amp;GT, bool simple=false)</div><div class="ttdef"><b>Definition:</b> <a href="GraphPrinter_8h_source.html#l00058">GraphPrinter.h:58</a></div></div>
129
128
  <div class="ttc" id="classSVF_1_1DCHNode_html_ab2d407888f4cf9fd5d9ae0b16ef2af49"><div class="ttname"><a href="classSVF_1_1DCHNode.html#ab2d407888f4cf9fd5d9ae0b16ef2af49">SVF::DCHNode::~DCHNode</a></div><div class="ttdeci">~DCHNode()</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00094">DCHG.h:94</a></div></div>
@@ -145,16 +144,16 @@ $(function() {
145
144
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a7cbea4d5399333497faa3f8d213e365e"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a7cbea4d5399333497faa3f8d213e365e">SVF::DCHGraph::DCHGraph</a></div><div class="ttdeci">DCHGraph(const SVFModule *svfMod)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00233">DCHG.h:233</a></div></div>
146
145
  <div class="ttc" id="classSVF_1_1DCHGraph_html_acaff636e6a9cf59363d6ee00435c04ff"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#acaff636e6a9cf59363d6ee00435c04ff">SVF::DCHGraph::getFieldType</a></div><div class="ttdeci">const DIType * getFieldType(const DIType *base, unsigned idx)</div><div class="ttdoc">Returns the type of field number idx (flattened) in base. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00291">DCHG.h:291</a></div></div>
147
146
  <div class="ttc" id="classSVF_1_1DCHNode_html_aebd4fb544e8a97164901ab602e0fe7fc"><div class="ttname"><a href="classSVF_1_1DCHNode.html#aebd4fb544e8a97164901ab602e0fe7fc">SVF::DCHNode::FuncVector</a></div><div class="ttdeci">std::vector&lt; const Function * &gt; FuncVector</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00074">DCHG.h:74</a></div></div>
148
- <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>
147
+ <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#l00099">BasicTypes.h:99</a></div></div>
149
148
  <div class="ttc" id="cJSON_8cpp_html_a8a1a0a26c50cc4becfc754bb68d1dc6b"><div class="ttname"><a href="cJSON_8cpp.html#a8a1a0a26c50cc4becfc754bb68d1dc6b">a</a></div><div class="ttdeci">cJSON * a</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02560">cJSON.cpp:2560</a></div></div>
150
149
  <div class="ttc" id="classSVF_1_1DCHNode_html_a743bc5df582114c45d1907d62a42a39c"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a743bc5df582114c45d1907d62a42a39c">SVF::DCHNode::hasFlag</a></div><div class="ttdeci">bool hasFlag(CLASSATTR mask) const</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00112">DCHG.h:112</a></div></div>
151
150
  <div class="ttc" id="classSVF_1_1GenericEdge_html_a5aceeb48929f54264807b36569019a8a"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#a5aceeb48929f54264807b36569019a8a">SVF::GenericEdge&lt; DCHNode &gt;::GEdgeKind</a></div><div class="ttdeci">s64_t GEdgeKind</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00053">GenericGraph.h:53</a></div></div>
152
151
  <div class="ttc" id="classSVF_1_1SparseBitVector_html"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html">SVF::SparseBitVector</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00460">SparseBitVector.h:460</a></div></div>
153
152
  <div class="ttc" id="classSVF_1_1DCHNode_html_afa271fdb9c1aa3589f41655813a2de8e"><div class="ttname"><a href="classSVF_1_1DCHNode.html#afa271fdb9c1aa3589f41655813a2de8e">SVF::DCHNode::setPureAbstract</a></div><div class="ttdeci">void setPureAbstract()</div><div class="ttdoc">Attribute. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00120">DCHG.h:120</a></div></div>
154
153
  <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8h_source.html#l00035">CFGNormalizer.h:35</a></div></div>
155
- <div class="ttc" id="namespaceSVF_html_ada0513be7e25325325ccc9183aeca278"><div class="ttname"><a href="namespaceSVF.html#ada0513be7e25325325ccc9183aeca278">SVF::DIBasicType</a></div><div class="ttdeci">llvm::DIBasicType DIBasicType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00149">BasicTypes.h:149</a></div></div>
154
+ <div class="ttc" id="namespaceSVF_html_ada0513be7e25325325ccc9183aeca278"><div class="ttname"><a href="namespaceSVF.html#ada0513be7e25325325ccc9183aeca278">SVF::DIBasicType</a></div><div class="ttdeci">llvm::DIBasicType DIBasicType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00150">BasicTypes.h:150</a></div></div>
156
155
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a294e7a04aff9cef87c1008e91a620155"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">SVF::DCHGraph::vtblCHAMap</a></div><div class="ttdeci">Map&lt; const DIType *, VTableSet &gt; vtblCHAMap</div><div class="ttdoc">Maps types to a set with their vtable and all their children&amp;#39;s. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00366">DCHG.h:366</a></div></div>
157
- <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00251">BasicTypes.h:251</a></div></div>
156
+ <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00250">BasicTypes.h:250</a></div></div>
158
157
  <div class="ttc" id="classSVF_1_1DCHNode_html_a8a7b412262af7a90c9ef583b6a8c10fc"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a8a7b412262af7a90c9ef583b6a8c10fc">SVF::DCHNode::typeName</a></div><div class="ttdeci">std::string typeName</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00197">DCHG.h:197</a></div></div>
159
158
  <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>
160
159
  <div class="ttc" id="classSVF_1_1DCHNode_html_a089af6085dec833b58133a9e834dab54"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a089af6085dec833b58133a9e834dab54">SVF::DCHNode::getName</a></div><div class="ttdeci">std::string getName() const</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00101">DCHG.h:101</a></div></div>
@@ -174,7 +173,7 @@ $(function() {
174
173
  <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>
175
174
  <div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
176
175
  <div class="ttc" id="classSVF_1_1DCHEdge_html_a17e3db6d11e0752064194ffc46cd9afe"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a17e3db6d11e0752064194ffc46cd9afe">SVF::DCHEdge::DCHEdge</a></div><div class="ttdeci">DCHEdge(DCHNode *src, DCHNode *dst, GEdgeFlag k=0)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00044">DCHG.h:44</a></div></div>
177
- <div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00144">BasicTypes.h:144</a></div></div>
176
+ <div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00145">BasicTypes.h:145</a></div></div>
178
177
  <div class="ttc" id="classSVF_1_1DCHNode_html_a917265fa44ed08b66a6bd722f318bfa4"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a917265fa44ed08b66a6bd722f318bfa4">SVF::DCHNode::setScalar</a></div><div class="ttdeci">void setScalar()</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00132">DCHG.h:132</a></div></div>
179
178
  <div class="ttc" id="classSVF_1_1GenericEdge_html_a0e8736f88ee75da025d874f92328ca71"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">SVF::GenericEdge&lt; DCHNode &gt;::src</a></div><div class="ttdeci">DCHNode * src</div><div class="ttdoc">source node </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00055">GenericGraph.h:55</a></div></div>
180
179
  <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>