svf-tools 1.0.310 → 1.0.314

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 (447) hide show
  1. package/SVF-doxygen/html/html/AndersenHCD_8cpp_source.html +3 -3
  2. package/SVF-doxygen/html/html/AndersenHLCD_8cpp_source.html +2 -2
  3. package/SVF-doxygen/html/html/AndersenLCD_8cpp_source.html +3 -3
  4. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +3 -3
  5. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +6 -6
  6. package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +6 -6
  7. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +21 -21
  8. package/SVF-doxygen/html/html/AndersenWaveDiffWithType_8cpp_source.html +4 -4
  9. package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +4 -4
  10. package/SVF-doxygen/html/html/Andersen_8cpp.html +1 -0
  11. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +58 -56
  12. package/SVF-doxygen/html/html/Andersen_8h_source.html +118 -118
  13. package/SVF-doxygen/html/html/CHG_8cpp.html +3 -3
  14. package/SVF-doxygen/html/html/CHG_8cpp_source.html +49 -50
  15. package/SVF-doxygen/html/html/CHG_8h_source.html +3 -3
  16. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +17 -16
  17. package/SVF-doxygen/html/html/CPPUtil_8h_source.html +16 -16
  18. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +5 -5
  19. package/SVF-doxygen/html/html/CallGraphBuilder_8h_source.html +1 -1
  20. package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
  21. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +10 -10
  22. package/SVF-doxygen/html/html/ConsG_8h_source.html +7 -7
  23. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +8 -8
  24. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +5 -5
  25. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +13 -13
  26. package/SVF-doxygen/html/html/DCHG_8h_source.html +2 -2
  27. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +7 -7
  28. package/SVF-doxygen/html/html/DDAClient_8h_source.html +2 -2
  29. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +5 -5
  30. package/SVF-doxygen/html/html/DDAPass_8h_source.html +1 -1
  31. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +4 -4
  32. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +10 -10
  33. package/SVF-doxygen/html/html/DoubleFreeChecker_8h_source.html +1 -1
  34. package/SVF-doxygen/html/html/ExternalPAG_8cpp.html +1 -1
  35. package/SVF-doxygen/html/html/ExternalPAG_8cpp_source.html +8 -8
  36. package/SVF-doxygen/html/html/ExternalPAG_8h_source.html +1 -1
  37. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +10 -10
  38. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
  39. package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
  40. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
  41. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +3 -3
  42. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +9 -9
  43. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +11 -11
  44. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +7 -7
  45. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +5 -5
  46. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +82 -81
  47. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +4 -4
  48. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +4 -4
  49. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
  50. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +1 -1
  51. package/SVF-doxygen/html/html/ICFGStat_8h_source.html +3 -3
  52. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +6 -6
  53. package/SVF-doxygen/html/html/ICFG_8h_source.html +6 -6
  54. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +4 -4
  55. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +2 -2
  56. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +2 -2
  57. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +1 -1
  58. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +4 -4
  59. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
  60. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +1 -1
  61. package/SVF-doxygen/html/html/LocationSet_8h_source.html +1 -2
  62. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +6 -6
  63. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +1 -1
  64. package/SVF-doxygen/html/html/MHP_8cpp_source.html +13 -13
  65. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +4 -4
  66. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -1
  67. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
  68. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -1
  69. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
  70. package/SVF-doxygen/html/html/MTA_8cpp_source.html +5 -5
  71. package/SVF-doxygen/html/html/MTA_8h_source.html +1 -1
  72. package/SVF-doxygen/html/html/MemModelBuilder_8cpp.html +90 -0
  73. package/SVF-doxygen/html/html/MemModelBuilder_8cpp_source.html +205 -0
  74. package/SVF-doxygen/html/html/MemModelBuilder_8h.html +97 -0
  75. package/SVF-doxygen/html/html/MemModelBuilder_8h_source.html +105 -0
  76. package/SVF-doxygen/html/html/MemModel_8cpp_source.html +9 -53
  77. package/SVF-doxygen/html/html/MemModel_8h_source.html +44 -44
  78. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +17 -17
  79. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +3 -3
  80. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +13 -13
  81. package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +12 -12
  82. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +2 -2
  83. package/SVF-doxygen/html/html/Options_8cpp_source.html +1 -2
  84. package/SVF-doxygen/html/html/Options_8h_source.html +2 -2
  85. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +1 -1
  86. package/SVF-doxygen/html/html/PAGBuilder_8cpp_source.html +25 -25
  87. package/SVF-doxygen/html/html/PAGBuilder_8h_source.html +1 -1
  88. package/SVF-doxygen/html/html/PAGEdge_8h_source.html +2 -2
  89. package/SVF-doxygen/html/html/PAGNode_8h_source.html +11 -11
  90. package/SVF-doxygen/html/html/PAG_8cpp_source.html +34 -34
  91. package/SVF-doxygen/html/html/PAG_8h_source.html +41 -41
  92. package/SVF-doxygen/html/html/PCG_8cpp_source.html +8 -8
  93. package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
  94. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +8 -8
  95. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +2 -2
  96. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +24 -24
  97. package/SVF-doxygen/html/html/PTAType_8h_source.html +4 -4
  98. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
  99. package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +1 -1
  100. package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +34 -33
  101. package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +7 -7
  102. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +15 -15
  103. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +66 -66
  104. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +15 -15
  105. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +7 -7
  106. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +3 -3
  107. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +4 -4
  108. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
  109. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +10 -10
  110. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +8 -8
  111. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +5 -5
  112. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +9 -9
  113. package/SVF-doxygen/html/html/SVFG_8h_source.html +7 -7
  114. package/SVF-doxygen/html/html/SVFModule_8cpp.html +1 -1
  115. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +6 -5
  116. package/SVF-doxygen/html/html/SVFModule_8h.html +3 -0
  117. package/SVF-doxygen/html/html/SVFModule_8h_source.html +53 -46
  118. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
  119. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +8 -8
  120. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +6 -6
  121. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
  122. package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -1
  123. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +2 -2
  124. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +5 -55
  125. package/SVF-doxygen/html/html/SymbolTableInfo_8h.html +0 -4
  126. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +88 -101
  127. package/SVF-doxygen/html/html/TCT_8cpp_source.html +11 -11
  128. package/SVF-doxygen/html/html/TCT_8h_source.html +10 -10
  129. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +5 -5
  130. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +1 -1
  131. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +3 -3
  132. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +8 -8
  133. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +7 -7
  134. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +2 -2
  135. package/SVF-doxygen/html/html/VFGNode_8h_source.html +2 -2
  136. package/SVF-doxygen/html/html/VFG_8cpp_source.html +6 -6
  137. package/SVF-doxygen/html/html/VFG_8h_source.html +6 -6
  138. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +7 -7
  139. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +13 -13
  140. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +11 -11
  141. package/SVF-doxygen/html/html/WPAPass_8h_source.html +1 -1
  142. package/SVF-doxygen/html/html/annotated.html +135 -136
  143. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  144. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  145. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
  146. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +2 -2
  148. package/SVF-doxygen/html/html/classSVF_1_1AddrPE.html +1 -1
  149. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +1 -1
  150. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
  151. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +1 -1
  152. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +228 -228
  153. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +1 -1
  154. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +60 -58
  155. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +1 -1
  156. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +43 -43
  157. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +1 -1
  158. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +23 -23
  159. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +1 -1
  160. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +52 -52
  161. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +1 -1
  162. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +38 -38
  163. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +1 -1
  164. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +17 -17
  165. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +31 -31
  166. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +1 -1
  167. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +38 -38
  168. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType-members.html +1 -1
  169. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType.html +31 -31
  170. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +1 -1
  171. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +73 -72
  172. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +1 -1
  173. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  174. package/SVF-doxygen/html/html/classSVF_1_1CHGraph-members.html +1 -1
  175. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +123 -120
  176. package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +1 -1
  177. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +3 -3
  178. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  179. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjPN.html +1 -1
  180. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjPN.html +1 -1
  181. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjPN.html +1 -1
  182. package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +1 -1
  183. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
  184. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +115 -115
  185. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +15 -15
  186. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +18 -18
  187. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +13 -13
  188. package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +1 -1
  189. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +1 -1
  190. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +22 -22
  191. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
  192. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +9 -9
  193. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +4 -4
  194. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
  195. package/SVF-doxygen/html/html/classSVF_1_1DummyObjPN.html +1 -1
  196. package/SVF-doxygen/html/html/classSVF_1_1DummyValPN.html +1 -1
  197. package/SVF-doxygen/html/html/classSVF_1_1ExternalPAG.html +8 -8
  198. package/SVF-doxygen/html/html/classSVF_1_1FIObjPN.html +1 -1
  199. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -2
  200. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +10 -10
  201. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +44 -44
  202. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +24 -24
  203. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +32 -32
  204. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +5 -5
  205. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
  206. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
  207. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
  208. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
  209. package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +1 -1
  210. package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +1 -1
  211. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +5 -5
  212. package/SVF-doxygen/html/html/classSVF_1_1GenericGraph.html +47 -47
  213. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +58 -57
  214. package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +5 -5
  215. package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +1 -1
  216. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +1 -1
  217. package/SVF-doxygen/html/html/classSVF_1_1GepValPN.html +1 -1
  218. package/SVF-doxygen/html/html/classSVF_1_1GlobalBlockNode.html +1 -1
  219. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +13 -13
  220. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +3 -3
  221. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
  222. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +6 -6
  223. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +2 -2
  224. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +3 -3
  225. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  226. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  227. package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +1 -1
  228. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
  229. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  230. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +17 -17
  231. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
  232. package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +1 -1
  233. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +1 -1
  234. package/SVF-doxygen/html/html/classSVF_1_1LocObjTypeInfo.html +1 -1
  235. package/SVF-doxygen/html/html/classSVF_1_1LocSymTableInfo.html +2 -2
  236. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +1 -1
  237. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +8 -8
  238. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
  239. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +15 -15
  240. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +24 -24
  241. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
  242. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
  243. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +5 -5
  244. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +3 -3
  245. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +4 -4
  246. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +21 -21
  247. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +5 -5
  248. package/SVF-doxygen/html/html/classSVF_1_1MemModelBuilder-members.html +95 -0
  249. package/SVF-doxygen/html/html/classSVF_1_1MemModelBuilder.html +711 -0
  250. package/SVF-doxygen/html/html/classSVF_1_1MemObj-members.html +7 -10
  251. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +92 -199
  252. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +3 -3
  253. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator-members.html +1 -1
  254. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +7 -7
  255. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +34 -34
  256. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +3 -3
  257. package/SVF-doxygen/html/html/classSVF_1_1ObjPN.html +3 -3
  258. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo-members.html +8 -10
  259. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +68 -168
  260. package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +1 -1
  261. package/SVF-doxygen/html/html/classSVF_1_1Options.html +5 -5
  262. package/SVF-doxygen/html/html/classSVF_1_1PAG.html +67 -67
  263. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilder.html +41 -41
  264. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +3 -3
  265. package/SVF-doxygen/html/html/classSVF_1_1PAGEdge.html +5 -5
  266. package/SVF-doxygen/html/html/classSVF_1_1PAGNode.html +10 -10
  267. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +15 -15
  268. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
  269. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +16 -16
  270. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +4 -4
  271. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +32 -32
  272. package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +6 -6
  273. package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +5 -5
  274. package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +10 -10
  275. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache-members.html +39 -38
  276. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +153 -116
  277. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +21 -21
  278. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +3 -3
  279. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
  280. package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +1 -1
  281. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  282. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +2 -2
  283. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +8 -8
  284. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
  285. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +35 -35
  286. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +7 -7
  287. package/SVF-doxygen/html/html/classSVF_1_1SVFModule-members.html +1 -0
  288. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +113 -80
  289. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +3 -3
  290. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +16 -16
  291. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +5 -5
  292. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +1 -1
  293. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +14 -14
  294. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +2 -2
  295. package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +1 -1
  296. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +1 -1
  297. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +49 -55
  298. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +300 -587
  299. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +28 -28
  300. package/SVF-doxygen/html/html/classSVF_1_1TCTNode.html +1 -1
  301. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
  302. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
  303. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +3 -3
  304. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +1 -1
  305. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +11 -11
  306. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +8 -8
  307. package/SVF-doxygen/html/html/classSVF_1_1TypeSystem.html +1 -1
  308. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +1 -1
  309. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  310. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +14 -14
  311. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
  312. package/SVF-doxygen/html/html/classSVF_1_1ValPN.html +2 -2
  313. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +2 -2
  314. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +35 -35
  315. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +11 -11
  316. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +3 -3
  317. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +11 -11
  318. package/SVF-doxygen/html/html/classes.html +91 -91
  319. package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
  320. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  321. package/SVF-doxygen/html/html/dir_5840dc76920ee0f379cd88b55fa041fd.html +1 -1
  322. package/SVF-doxygen/html/html/dir_770a542efe75a1b68c109cb4e4290224.html +1 -1
  323. package/SVF-doxygen/html/html/files.html +2 -2
  324. package/SVF-doxygen/html/html/functions_0x7e.html +5 -8
  325. package/SVF-doxygen/html/html/functions_a.html +13 -10
  326. package/SVF-doxygen/html/html/functions_b.html +1 -1
  327. package/SVF-doxygen/html/html/functions_c.html +38 -36
  328. package/SVF-doxygen/html/html/functions_e.html +1 -1
  329. package/SVF-doxygen/html/html/functions_f.html +3 -3
  330. package/SVF-doxygen/html/html/functions_func.html +12 -9
  331. package/SVF-doxygen/html/html/functions_func_0x7e.html +5 -8
  332. package/SVF-doxygen/html/html/functions_func_b.html +1 -1
  333. package/SVF-doxygen/html/html/functions_func_c.html +28 -26
  334. package/SVF-doxygen/html/html/functions_func_e.html +1 -1
  335. package/SVF-doxygen/html/html/functions_func_g.html +11 -13
  336. package/SVF-doxygen/html/html/functions_func_h.html +3 -3
  337. package/SVF-doxygen/html/html/functions_func_i.html +8 -7
  338. package/SVF-doxygen/html/html/functions_func_l.html +2 -8
  339. package/SVF-doxygen/html/html/functions_func_m.html +4 -1
  340. package/SVF-doxygen/html/html/functions_func_p.html +1 -1
  341. package/SVF-doxygen/html/html/functions_func_s.html +8 -5
  342. package/SVF-doxygen/html/html/functions_func_v.html +0 -3
  343. package/SVF-doxygen/html/html/functions_g.html +6 -8
  344. package/SVF-doxygen/html/html/functions_h.html +3 -3
  345. package/SVF-doxygen/html/html/functions_i.html +15 -14
  346. package/SVF-doxygen/html/html/functions_l.html +6 -10
  347. package/SVF-doxygen/html/html/functions_m.html +5 -1
  348. package/SVF-doxygen/html/html/functions_n.html +4 -4
  349. package/SVF-doxygen/html/html/functions_o.html +3 -3
  350. package/SVF-doxygen/html/html/functions_p.html +13 -9
  351. package/SVF-doxygen/html/html/functions_r.html +1 -1
  352. package/SVF-doxygen/html/html/functions_rela.html +3 -0
  353. package/SVF-doxygen/html/html/functions_s.html +20 -14
  354. package/SVF-doxygen/html/html/functions_t.html +4 -4
  355. package/SVF-doxygen/html/html/functions_u.html +3 -3
  356. package/SVF-doxygen/html/html/functions_v.html +2 -5
  357. package/SVF-doxygen/html/html/functions_vars_l.html +1 -1
  358. package/SVF-doxygen/html/html/functions_vars_s.html +2 -1
  359. package/SVF-doxygen/html/html/functions_w.html +3 -1
  360. package/SVF-doxygen/html/html/hierarchy.html +127 -128
  361. package/SVF-doxygen/html/html/mta_8cpp.html +1 -1
  362. package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
  363. package/SVF-doxygen/html/html/namespaceSVF.html +1 -3
  364. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
  365. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +40 -39
  366. package/SVF-doxygen/html/html/saber_8cpp.html +1 -1
  367. package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
  368. package/SVF-doxygen/html/html/search/all_1.js +3 -2
  369. package/SVF-doxygen/html/html/search/all_10.js +9 -9
  370. package/SVF-doxygen/html/html/search/all_12.js +2 -2
  371. package/SVF-doxygen/html/html/search/all_13.js +9 -8
  372. package/SVF-doxygen/html/html/search/all_14.js +6 -6
  373. package/SVF-doxygen/html/html/search/all_15.js +2 -2
  374. package/SVF-doxygen/html/html/search/all_16.js +0 -1
  375. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  376. package/SVF-doxygen/html/html/search/all_1b.js +3 -4
  377. package/SVF-doxygen/html/html/search/all_2.js +1 -1
  378. package/SVF-doxygen/html/html/search/all_3.js +11 -10
  379. package/SVF-doxygen/html/html/search/all_5.js +1 -1
  380. package/SVF-doxygen/html/html/search/all_6.js +1 -1
  381. package/SVF-doxygen/html/html/search/all_7.js +2 -2
  382. package/SVF-doxygen/html/html/search/all_8.js +3 -3
  383. package/SVF-doxygen/html/html/search/all_9.js +4 -3
  384. package/SVF-doxygen/html/html/search/all_c.js +4 -7
  385. package/SVF-doxygen/html/html/search/all_d.js +4 -1
  386. package/SVF-doxygen/html/html/search/all_e.js +2 -2
  387. package/SVF-doxygen/html/html/search/all_f.js +1 -1
  388. package/SVF-doxygen/html/html/search/classes_9.js +1 -3
  389. package/SVF-doxygen/html/html/search/classes_a.js +1 -0
  390. package/SVF-doxygen/html/html/search/files_8.js +1 -3
  391. package/SVF-doxygen/html/html/search/files_9.js +2 -0
  392. package/SVF-doxygen/html/html/search/functions_0.js +3 -2
  393. package/SVF-doxygen/html/html/search/functions_1.js +1 -1
  394. package/SVF-doxygen/html/html/search/functions_10.js +1 -0
  395. package/SVF-doxygen/html/html/search/functions_13.js +0 -1
  396. package/SVF-doxygen/html/html/search/functions_16.js +3 -4
  397. package/SVF-doxygen/html/html/search/functions_2.js +10 -9
  398. package/SVF-doxygen/html/html/search/functions_4.js +1 -1
  399. package/SVF-doxygen/html/html/search/functions_6.js +2 -2
  400. package/SVF-doxygen/html/html/search/functions_7.js +3 -3
  401. package/SVF-doxygen/html/html/search/functions_8.js +2 -1
  402. package/SVF-doxygen/html/html/search/functions_a.js +1 -3
  403. package/SVF-doxygen/html/html/search/functions_b.js +2 -1
  404. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  405. package/SVF-doxygen/html/html/search/related_3.js +1 -0
  406. package/SVF-doxygen/html/html/search/variables_13.js +1 -1
  407. package/SVF-doxygen/html/html/search/variables_14.js +2 -2
  408. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  409. package/SVF-doxygen/html/html/search/variables_c.js +1 -1
  410. package/SVF-doxygen/html/html/search/variables_e.js +1 -1
  411. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CHGraph_01_5_01_4.html +12 -12
  412. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  413. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
  414. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PAG_01_5_01_4.html +17 -17
  415. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +2 -2
  416. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01TCT_01_5_01_4.html +1 -1
  417. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1GenericNode_3_01NodeTy_00_01EdgeTy_01_4_01_5_4_01_4.html +14 -14
  418. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericGraph_3_01NodeTy_00_01EdgeTy_01_4_01_5_4.html +20 -20
  419. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericNode_3_01NodeTy_00_01EdgeTy_01_4_01_5_01_4.html +16 -16
  420. package/SVF-doxygen/html/html/svf-ex_8cpp.html +8 -7
  421. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +6 -5
  422. package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
  423. package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
  424. package/include/Graphs/GenericGraph.h +5 -8
  425. package/include/MemoryModel/MemModel.h +5 -21
  426. package/include/MemoryModel/PersistentPointsToCache.h +13 -7
  427. package/include/MemoryModel/PointerAnalysisImpl.h +1 -0
  428. package/include/SVF-FE/CHG.h +1 -1
  429. package/include/SVF-FE/MemModelBuilder.h +102 -0
  430. package/include/SVF-FE/SymbolTableInfo.h +12 -79
  431. package/include/Util/NodeIDAllocator.h +1 -1
  432. package/include/Util/SVFModule.h +16 -0
  433. package/include/WPA/Andersen.h +2 -7
  434. package/lib/Graphs/PAG.cpp +3 -10
  435. package/lib/MemoryModel/MemModel.cpp +10 -436
  436. package/lib/SVF-FE/CHG.cpp +0 -6
  437. package/lib/SVF-FE/CPPUtil.cpp +2 -0
  438. package/lib/SVF-FE/MemModelBuilder.cpp +616 -0
  439. package/lib/SVF-FE/SymbolTableInfo.cpp +10 -453
  440. package/lib/Util/NodeIDAllocator.cpp +2 -1
  441. package/lib/Util/Options.cpp +2 -10
  442. package/lib/Util/SVFModule.cpp +3 -2
  443. package/lib/WPA/Andersen.cpp +13 -1
  444. package/package.json +1 -1
  445. package/tools/Example/svf-ex.cpp +6 -3
  446. package/include/SVF-FE/LocMemModel.h +0 -35
  447. package/lib/SVF-FE/LocMemModel.cpp +0 -31
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">CHG.h</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="CHG_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">//===----- CHG.h -- Base class of pointer analyses ---------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></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">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</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;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * CHG.h (previously CHA.h)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Apr 13, 2016</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Xiaokang Fan</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#ifndef CHA_H_</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define CHA_H_</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CommonCHG_8h.html">SVF-FE/CommonCHG.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</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="l00036"></a><span class="lineno"> 36</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="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;{</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;<span class="keyword">class </span>SVFModule;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a7cb629496a70d2dd22634405652e573a"> 42</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CHNode.html">CHNode</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"> 44</span>&#160;<span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericEdge.html">GenericEdge&lt;CHNode&gt;</a> <a class="code" href="namespaceSVF.html#a7cb629496a70d2dd22634405652e573a">GenericCHEdgeTy</a>;</div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html"> 45</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CHEdge.html">CHEdge</a>: <span class="keyword">public</span> GenericCHEdgeTy</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;<span class="keyword">public</span>:</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676"> 48</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">enum</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c"> 50</a></span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">INHERITANCE</a> = 0x1, <span class="comment">// inheritance relation</span></div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a8721eaefd547d6ba5229463d644815f4"> 51</a></span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a8721eaefd547d6ba5229463d644815f4">INSTANTCE</a> = 0x2 <span class="comment">// template-instance relation</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; } <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEDGETYPE</a>;</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_1CHEdge.html#ae2c206fb3c7e4d9deec7d8298caf5017"> 54</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericNode.html#a03c6da4a73c47f84f5c5b47252bc339a">GenericNode&lt;CHNode,CHEdge&gt;::GEdgeSetTy</a> <a class="code" href="classSVF_1_1CHEdge.html#ae2c206fb3c7e4d9deec7d8298caf5017">CHEdgeSetTy</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"><a class="line" href="classSVF_1_1CHEdge.html#af01c14c28db231b7bfae39344d1ae8ee"> 56</a></span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#af01c14c28db231b7bfae39344d1ae8ee">CHEdge</a>(<a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *s, <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *d, <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEDGETYPE</a> et, <a class="code" href="classSVF_1_1GenericEdge.html#aab8892b73370c32b48621cd1d0cce614">GEdgeFlag</a> k = 0):</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; GenericCHEdgeTy(s,d,k)</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; <a class="code" href="classSVF_1_1CHEdge.html#a58ac14decda4041e773d723475f5c1c8">edgeType</a> = et;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</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"><a class="line" href="classSVF_1_1CHEdge.html#ae2b90913c6c5a30df2b285d31c694525"> 62</a></span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEDGETYPE</a> <a class="code" href="classSVF_1_1CHEdge.html#ae2b90913c6c5a30df2b285d31c694525">getEdgeType</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CHEdge.html#a58ac14decda4041e773d723475f5c1c8">edgeType</a>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#a58ac14decda4041e773d723475f5c1c8"> 68</a></span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEDGETYPE</a> <a class="code" href="classSVF_1_1CHEdge.html#a58ac14decda4041e773d723475f5c1c8">edgeType</a>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;};</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a838ed37e84836101711c25a760eec57d"> 71</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericNode.html">GenericNode&lt;CHNode,CHEdge&gt;</a> <a class="code" href="namespaceSVF.html#a838ed37e84836101711c25a760eec57d">GenericCHNodeTy</a>;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html"> 72</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CHNode.html">CHNode</a>: <span class="keyword">public</span> GenericCHNodeTy</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;{</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4"> 75</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">enum</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4ab530567d5ba09c9c579aef964aef8f81"> 77</a></span>&#160; PURE_ABSTRACT = 0x1, <span class="comment">// pure virtual abstract class</span></div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4afd6d851b22e741690f0736b4858d81a5"> 78</a></span>&#160; MULTI_INHERITANCE = 0x2, <span class="comment">// multi inheritance class</span></div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4a330331556c568fcd60c9df6df2c1281d"> 79</a></span>&#160; TEMPLATE = 0x04 <span class="comment">// template class</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; } <a class="code" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4">CLASSATTR</a>;</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"><a class="line" href="classSVF_1_1CHNode.html#aa4af6538c9994ec54a7b82691f846a31"> 82</a></span>&#160; <span class="keyword">typedef</span> std::vector&lt;const SVFFunction*&gt; <a class="code" href="classSVF_1_1CHNode.html#aa4af6538c9994ec54a7b82691f846a31">FuncVector</a>;</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"><a class="line" href="classSVF_1_1CHNode.html#a1f2c496e378d01841e4dc164942dc145"> 84</a></span>&#160; <a class="code" href="classSVF_1_1CHNode.html#a1f2c496e378d01841e4dc164942dc145">CHNode</a> (<span class="keyword">const</span> std::string name, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i = 0, <a class="code" href="classSVF_1_1GenericNode.html#a363b90ab02cce2ebc3ede8e5b7cc141c">GNodeK</a> k = 0):</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; GenericCHNodeTy(i, k), vtable(nullptr), className(name), flags(0)</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#aff05589899b58112119af68df5d1997e"> 88</a></span>&#160; <a class="code" href="classSVF_1_1CHNode.html#aff05589899b58112119af68df5d1997e">~CHNode</a>()</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089"> 91</a></span>&#160; std::string <a class="code" href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">getName</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">return</span> className;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#ab3755d804852b8a98bdf8cd0171f3a2f"> 97</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#ab3755d804852b8a98bdf8cd0171f3a2f">setFlag</a>(<a class="code" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4">CLASSATTR</a> mask)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; flags |= mask;</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_1CHNode.html#aebcbd36a7efc0dbe9b3c3f680ef033e7"> 101</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHNode.html#aebcbd36a7efc0dbe9b3c3f680ef033e7">hasFlag</a>(<a class="code" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4">CLASSATTR</a> mask)<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> (flags &amp; mask) == mask;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#abac89987927dadd53dd646eae540a024"> 109</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#abac89987927dadd53dd646eae540a024">setPureAbstract</a>()</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; setFlag(PURE_ABSTRACT);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a5d751a3a0d88c0de374bfeb526051440"> 113</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#a5d751a3a0d88c0de374bfeb526051440">setMultiInheritance</a>()</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; setFlag(MULTI_INHERITANCE);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div><div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a00343177422c8d84d707432d0c483438"> 117</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#a00343177422c8d84d707432d0c483438">setTemplate</a>()</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; setFlag(TEMPLATE);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a268ccdfb486cc2efa8581ee7a3b5af39"> 121</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHNode.html#a268ccdfb486cc2efa8581ee7a3b5af39">isPureAbstract</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">return</span> hasFlag(PURE_ABSTRACT);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; }</div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a224a394537fae62e64cf62a0d4fdd430"> 125</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHNode.html#a224a394537fae62e64cf62a0d4fdd430">isMultiInheritance</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">return</span> hasFlag(MULTI_INHERITANCE);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div><div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#aff23fda93401c60422a4a5a08d77d749"> 129</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHNode.html#aff23fda93401c60422a4a5a08d77d749">isTemplate</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">return</span> hasFlag(TEMPLATE);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a8c51571df92b5e152cc42e9aaf712dc9"> 135</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#a8c51571df92b5e152cc42e9aaf712dc9">addVirtualFunctionVector</a>(FuncVector vfuncvec)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; virtualFunctionVectors.push_back(vfuncvec);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a5df1cf4d51bf3406d188c96bc9aae0af"> 139</a></span>&#160; <span class="keyword">const</span> std::vector&lt;FuncVector&gt; &amp;<a class="code" href="classSVF_1_1CHNode.html#a5df1cf4d51bf3406d188c96bc9aae0af">getVirtualFunctionVectors</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">return</span> virtualFunctionVectors;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordtype">void</span> getVirtualFunctions(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> idx, FuncVector &amp;virtualFunctions) <span class="keyword">const</span>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a600b63dac83e526c933c141d4e2bcc0c"> 145</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *<a class="code" href="classSVF_1_1CHNode.html#a600b63dac83e526c933c141d4e2bcc0c">getVTable</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">return</span> vtable;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a2c31580f1cf43fbdd01a07b6f9f6b04e"> 150</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#a2c31580f1cf43fbdd01a07b6f9f6b04e">setVTable</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl)</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; vtable = vtbl;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a08a717043e8b8c3d87742f0ecd3a3cc1"> 156</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a>* <a class="code" href="classSVF_1_1CHNode.html#a08a717043e8b8c3d87742f0ecd3a3cc1">vtable</a>;</div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#ac7c18617b768a2988cf4eff7e849f397"> 157</a></span>&#160; std::string <a class="code" href="classSVF_1_1CHNode.html#ac7c18617b768a2988cf4eff7e849f397">className</a>;</div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a6844c89f715979709dc52d4854373e72"> 158</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classSVF_1_1CHNode.html#a6844c89f715979709dc52d4854373e72">flags</a>;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment"> * virtual functions inherited from different classes are separately stored</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment"> * to model different vtables inherited from different fathers.</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment"> * Example:</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment"> * class C: public A, public B</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="comment"> * vtableC = {Af1, Af2, ..., inttoptr, Bg1, Bg2, ...} (&quot;inttoptr&quot;</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment"> * instruction works as the delimiter for separating virtual functions</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="comment"> * inherited from different classes)</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="comment"> * virtualFunctionVectors = {{Af1, Af2, ...}, {Bg1, Bg2, ...}}</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a9c81308b3eac1728c122fda39e260a90"> 171</a></span>&#160; std::vector&lt;FuncVector&gt; <a class="code" href="classSVF_1_1CHNode.html#a9c81308b3eac1728c122fda39e260a90">virtualFunctionVectors</a>;</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="namespaceSVF.html#aa8bd37e4ec2e98c805a14adbf590b9dd"> 175</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericGraph.html">GenericGraph&lt;CHNode,CHEdge&gt;</a> <a class="code" href="namespaceSVF.html#aa8bd37e4ec2e98c805a14adbf590b9dd">GenericCHGraphTy</a>;</div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html"> 176</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CHGraph.html">CHGraph</a>: <span class="keyword">public</span> <a class="code" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</a>, <span class="keyword">public</span> GenericCHGraphTy</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;{</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b"> 179</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const CHNode*&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHNodeSetTy</a>;</div><div class="line"><a name="l00180"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#af1b638faf888898cdf168c25e008ab12"> 180</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;const CHNode*&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#af1b638faf888898cdf168c25e008ab12">WorkList</a>;</div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#aedb20aca2fa11a070cfe28e14fd3552b"> 181</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::string, CHNodeSetTy&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#aedb20aca2fa11a070cfe28e14fd3552b">NameToCHNodesMap</a>;</div><div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a3740a239432a5c7237109aa72aa28eff"> 182</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CallSite, CHNodeSetTy&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#a3740a239432a5c7237109aa72aa28eff">CallSiteToCHNodesMap</a>;</div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#aefdf6c5fe8a26efce200e8225d463cac"> 183</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CallSite, VTableSet&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#aefdf6c5fe8a26efce200e8225d463cac">CallSiteToVTableSetMap</a>;</div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a0397e5da88106dc8b4a1e207ae455e74"> 184</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CallSite, VFunSet&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#a0397e5da88106dc8b4a1e207ae455e74">CallSiteToVFunSetMap</a>;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a2a1da7f262a2f11653fb583154a93a22"> 186</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">enum</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div><div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a2a1da7f262a2f11653fb583154a93a22a331376f6d22d2346039db7a9c9a311c2"> 188</a></span>&#160; CONSTRUCTOR = 0x1, <span class="comment">// connect node based on constructor</span></div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a2a1da7f262a2f11653fb583154a93a22adfb68ad45ad216277b580d9a45926dc7"> 189</a></span>&#160; DESTRUCTOR = 0x2 <span class="comment">// connect node based on destructor</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; } <a class="code" href="classSVF_1_1CHGraph.html#a2a1da7f262a2f11653fb583154a93a22">RELATIONTYPE</a>;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#afacd7d35dad4344a5c2551d951acb442"> 192</a></span>&#160; <a class="code" href="classSVF_1_1CHGraph.html#afacd7d35dad4344a5c2551d951acb442">CHGraph</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule): svfMod(svfModule), classNum(0), vfID(0), buildingCHGTime(0)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; this-&gt;kind = Standard;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; ~<a class="code" href="classSVF_1_1CHGraph.html">CHGraph</a>();</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordtype">void</span> buildCHG();</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordtype">void</span> buildInternalMaps();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordtype">void</span> buildCHGNodes(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *V);</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordtype">void</span> buildCHGNodes(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordtype">void</span> buildCHGEdges(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordtype">void</span> connectInheritEdgeViaCall(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* caller, <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordtype">void</span> connectInheritEdgeViaStore(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* caller, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a>* store);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordtype">void</span> addEdge(<span class="keyword">const</span> std::string className,</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keyword">const</span> std::string baseClassName,</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEdge::CHEDGETYPE</a> <a class="code" href="classSVF_1_1CHEdge.html#a58ac14decda4041e773d723475f5c1c8">edgeType</a>);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *getNode(<span class="keyword">const</span> std::string name) <span class="keyword">const</span>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *createNode(<span class="keyword">const</span> std::string name);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordtype">void</span> buildClassNameToAncestorsDescendantsMap();</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordtype">void</span> buildVirtualFunctionToIDMap();</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordtype">void</span> buildCSToCHAVtblsAndVfnsMap();</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordtype">void</span> readInheritanceMetadataFromModule(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;M);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordtype">void</span> analyzeVTables(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;M);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHGraph::CHNodeSetTy</a>&amp; getInstancesAndDescendants(<span class="keyword">const</span> std::string className);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keyword">const</span> CHNodeSetTy&amp; getCSClasses(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <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="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordtype">void</span> dump(<span class="keyword">const</span> std::string&amp; filename);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordtype">void</span> view();</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordtype">void</span> printCH();</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a4ac546af1020af930f192460a7d40e4f"> 222</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> <a class="code" href="classSVF_1_1CHGraph.html#a4ac546af1020af930f192460a7d40e4f">getVirtualFunctionID</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* vfn)<span class="keyword"> const</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, s32_t&gt;::const_iterator</a> it =</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; virtualFunctionToIDMap.find(vfn);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (it != virtualFunctionToIDMap.end())</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ab53198e1a85df15f04ed601f3346ef85"> 231</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="classSVF_1_1CHGraph.html#ab53198e1a85df15f04ed601f3346ef85">getVirtualFunctionBasedonID</a>(<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, s32_t&gt;::const_iterator</a> it, eit;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">for</span> (it = virtualFunctionToIDMap.begin(), eit =</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; virtualFunctionToIDMap.end(); it != eit; ++it)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span> (it-&gt;second == <span class="keywordtype">id</span>)</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">return</span> it-&gt;first;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a5ee7e559425045f3af5c35ea6d6f03ee"> 243</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHGraph.html#a5ee7e559425045f3af5c35ea6d6f03ee">addInstances</a>(<span class="keyword">const</span> std::string templateName, <a class="code" href="classSVF_1_1CHNode.html">CHNode</a>* node)</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; NameToCHNodesMap::iterator it = templateNameToInstancesMap.find(</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; templateName);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">if</span> (it != templateNameToInstancesMap.end())</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; it-&gt;second.insert(node);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; templateNameToInstancesMap[templateName].insert(node);</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_1CHGraph.html#a26f89a9b269cad3fc894110d25598715"> 252</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> CHNodeSetTy &amp;<a class="code" href="classSVF_1_1CHGraph.html#a26f89a9b269cad3fc894110d25598715">getDescendants</a>(<span class="keyword">const</span> std::string className)</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">return</span> classNameToDescendantsMap[className];</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"><a class="line" href="classSVF_1_1CHGraph.html#a894a69fa143d3f460d433646a0521b6f"> 256</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> CHNodeSetTy &amp;<a class="code" href="classSVF_1_1CHGraph.html#a894a69fa143d3f460d433646a0521b6f">getInstances</a>(<span class="keyword">const</span> std::string className)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; {</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">return</span> templateNameToInstancesMap[className];</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; }</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#acd4907aa926a4c7fdc3964700d721f79"> 261</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHGraph.html#acd4907aa926a4c7fdc3964700d721f79">csHasVtblsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; CallSiteToVTableSetMap::const_iterator it = csToCHAVtblsMap.find(cs);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">return</span> it != csToCHAVtblsMap.end();</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"><a class="line" href="classSVF_1_1CHGraph.html#a885a81b08477e6ccdd7df98d249b8c39"> 266</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHGraph.html#a885a81b08477e6ccdd7df98d249b8c39">csHasVFnsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; CallSiteToVFunSetMap::const_iterator it = csToCHAVFnsMap.find(cs);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">return</span> it != csToCHAVFnsMap.end();</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; }</div><div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a9878df891d2e20d09b65096060d2c148"> 271</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a> &amp;<a class="code" href="classSVF_1_1CHGraph.html#a9878df891d2e20d09b65096060d2c148">getCSVtblsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; CallSiteToVTableSetMap::const_iterator it = csToCHAVtblsMap.find(cs);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != csToCHAVtblsMap.end() &amp;&amp; <span class="stringliteral">&quot;cs does not have vtabls based on CHA.&quot;</span>);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div><div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a1c0ca4e6a466ad317daf00a6c7de8e31"> 277</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7">VFunSet</a> &amp;<a class="code" href="classSVF_1_1CHGraph.html#a1c0ca4e6a466ad317daf00a6c7de8e31">getCSVFsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; CallSiteToVFunSetMap::const_iterator it = csToCHAVFnsMap.find(cs);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != csToCHAVFnsMap.end() &amp;&amp; <span class="stringliteral">&quot;cs does not have vfns based on CHA.&quot;</span>);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; }</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ae7e9f1a3c524d80c77b2a75f877dc2d6"> 284</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHGraph.html#ae7e9f1a3c524d80c77b2a75f877dc2d6">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</a> *chg)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">return</span> chg-&gt;<a class="code" href="classSVF_1_1CommonCHGraph.html#adf2a02fff9d7dd9fc9d92121e5e28f8b">getKind</a>() == Standard;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; }</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordtype">void</span> addFuncToFuncVector(<a class="code" href="classSVF_1_1CHNode.html#aa4af6538c9994ec54a7b82691f846a31">CHNode::FuncVector</a> &amp;v, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *f);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a62a3ccdbc55381d5f8d96dc23141f2e5"> 293</a></span>&#160; <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* <a class="code" href="classSVF_1_1CHGraph.html#a62a3ccdbc55381d5f8d96dc23141f2e5">svfMod</a>;</div><div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#adb99b732d20cfc8cc0f078cda6753bc0"> 294</a></span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1CHGraph.html#adb99b732d20cfc8cc0f078cda6753bc0">classNum</a>;</div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a1cf155a56d1a3b3c3ab1a3d593e1afcd"> 295</a></span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> <a class="code" href="classSVF_1_1CHGraph.html#a1cf155a56d1a3b3c3ab1a3d593e1afcd">vfID</a>;</div><div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ab5bd2348e4418fcb2f3b18227fccd836"> 296</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1CHGraph.html#ab5bd2348e4418fcb2f3b18227fccd836">buildingCHGTime</a>;</div><div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#aa040bc0a5653843419d24777343e1650"> 297</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::string, CHNode *&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#aa040bc0a5653843419d24777343e1650">classNameToNodeMap</a>;</div><div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ac08f846413b6aed26a1bf39eb865b006"> 298</a></span>&#160; NameToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#ac08f846413b6aed26a1bf39eb865b006">classNameToDescendantsMap</a>;</div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a083f726d74208c2d8107a75e0d6b3ca9"> 299</a></span>&#160; NameToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#a083f726d74208c2d8107a75e0d6b3ca9">classNameToAncestorsMap</a>;</div><div class="line"><a name="l00300"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#aaec4bdde66e4a7a63ea3f3c6ec0bd045"> 300</a></span>&#160; NameToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#aaec4bdde66e4a7a63ea3f3c6ec0bd045">classNameToInstAndDescsMap</a>;</div><div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#acd022005e2191bc3bcb265805abee4f8"> 301</a></span>&#160; NameToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#acd022005e2191bc3bcb265805abee4f8">templateNameToInstancesMap</a>;</div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a7ef9982d89a4932883bd58bc49ad9986"> 302</a></span>&#160; CallSiteToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#a7ef9982d89a4932883bd58bc49ad9986">csToClassesMap</a>;</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"><a class="line" href="classSVF_1_1CHGraph.html#a6a581e9b4105745c518124b494b41c63"> 304</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, s32_t&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#a6a581e9b4105745c518124b494b41c63">virtualFunctionToIDMap</a>;</div><div class="line"><a name="l00305"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#af3ed2bee5d76e5a848b250950c3be333"> 305</a></span>&#160; CallSiteToVTableSetMap <a class="code" href="classSVF_1_1CHGraph.html#af3ed2bee5d76e5a848b250950c3be333">csToCHAVtblsMap</a>;</div><div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a5e6502c5baad99c70e1cf56c84ce9474"> 306</a></span>&#160; CallSiteToVFunSetMap <a class="code" href="classSVF_1_1CHGraph.html#a5e6502c5baad99c70e1cf56c84ce9474">csToCHAVFnsMap</a>;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;};</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;{</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="comment">/* !</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="comment"> * GraphTraits specializations for generic graph algorithms.</span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</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="l00316"></a><span class="lineno"> 316</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1CHNode_01_5_01_4.html"> 317</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>::CHNode*&gt; : <span class="keyword">public</span> GraphTraits&lt;SVF::GenericNode&lt;SVF::CHNode,SVF::CHEdge&gt;* &gt;</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;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00323"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CHNode_01_5_01_4_01_4.html"> 323</a></span>&#160;<span class="keyword">struct </span>GraphTraits&lt;Inverse&lt;SVF::CHNode*&gt; &gt; : <span class="keyword">public</span> GraphTraits&lt;Inverse&lt;SVF::GenericNode&lt;SVF::CHNode,SVF::CHEdge&gt;* &gt; &gt;</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="l00326"></a><span class="lineno"> 326</span>&#160;</div><div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html"> 327</a></span>&#160;<span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>GraphTraits&lt;SVF::CHGraph*&gt; : <span class="keyword">public</span> GraphTraits&lt;SVF::GenericGraph&lt;SVF::CHNode,SVF::CHEdge&gt;* &gt;</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"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html#aea2a657d278919364d2911d92b3e6f5a"> 329</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1CHNode.html">SVF::CHNode</a> *<a class="code" href="structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html#aea2a657d278919364d2911d92b3e6f5a">NodeRef</a>;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;};</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;} <span class="comment">// End namespace llvm</span></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="preprocessor">#endif </span><span class="comment">/* CHA_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1CHGraph_html_adb99b732d20cfc8cc0f078cda6753bc0"><div class="ttname"><a href="classSVF_1_1CHGraph.html#adb99b732d20cfc8cc0f078cda6753bc0">SVF::CHGraph::classNum</a></div><div class="ttdeci">u32_t classNum</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00294">CHG.h:294</a></div></div>
69
+ <a href="CHG_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">//===----- CHG.h -- Base class of pointer analyses ---------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></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">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</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;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * CHG.h (previously CHA.h)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Apr 13, 2016</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Xiaokang Fan</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#ifndef CHA_H_</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define CHA_H_</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CommonCHG_8h.html">SVF-FE/CommonCHG.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</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="l00036"></a><span class="lineno"> 36</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="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;{</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;<span class="keyword">class </span>SVFModule;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a7cb629496a70d2dd22634405652e573a"> 42</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CHNode.html">CHNode</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"> 44</span>&#160;<span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericEdge.html">GenericEdge&lt;CHNode&gt;</a> <a class="code" href="namespaceSVF.html#a7cb629496a70d2dd22634405652e573a">GenericCHEdgeTy</a>;</div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html"> 45</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CHEdge.html">CHEdge</a>: <span class="keyword">public</span> GenericCHEdgeTy</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;<span class="keyword">public</span>:</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676"> 48</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">enum</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c"> 50</a></span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">INHERITANCE</a> = 0x1, <span class="comment">// inheritance relation</span></div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a8721eaefd547d6ba5229463d644815f4"> 51</a></span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a8721eaefd547d6ba5229463d644815f4">INSTANTCE</a> = 0x2 <span class="comment">// template-instance relation</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; } <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEDGETYPE</a>;</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_1CHEdge.html#ae2c206fb3c7e4d9deec7d8298caf5017"> 54</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericNode.html#a03c6da4a73c47f84f5c5b47252bc339a">GenericNode&lt;CHNode,CHEdge&gt;::GEdgeSetTy</a> <a class="code" href="classSVF_1_1CHEdge.html#ae2c206fb3c7e4d9deec7d8298caf5017">CHEdgeSetTy</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"><a class="line" href="classSVF_1_1CHEdge.html#af01c14c28db231b7bfae39344d1ae8ee"> 56</a></span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#af01c14c28db231b7bfae39344d1ae8ee">CHEdge</a>(<a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *s, <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *d, <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEDGETYPE</a> et, <a class="code" href="classSVF_1_1GenericEdge.html#aab8892b73370c32b48621cd1d0cce614">GEdgeFlag</a> k = 0):</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; GenericCHEdgeTy(s,d,k)</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; <a class="code" href="classSVF_1_1CHEdge.html#a58ac14decda4041e773d723475f5c1c8">edgeType</a> = et;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</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"><a class="line" href="classSVF_1_1CHEdge.html#ae2b90913c6c5a30df2b285d31c694525"> 62</a></span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEDGETYPE</a> <a class="code" href="classSVF_1_1CHEdge.html#ae2b90913c6c5a30df2b285d31c694525">getEdgeType</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CHEdge.html#a58ac14decda4041e773d723475f5c1c8">edgeType</a>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#a58ac14decda4041e773d723475f5c1c8"> 68</a></span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEDGETYPE</a> <a class="code" href="classSVF_1_1CHEdge.html#a58ac14decda4041e773d723475f5c1c8">edgeType</a>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;};</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a838ed37e84836101711c25a760eec57d"> 71</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericNode.html">GenericNode&lt;CHNode,CHEdge&gt;</a> <a class="code" href="namespaceSVF.html#a838ed37e84836101711c25a760eec57d">GenericCHNodeTy</a>;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html"> 72</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CHNode.html">CHNode</a>: <span class="keyword">public</span> GenericCHNodeTy</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;{</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4"> 75</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">enum</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4ab530567d5ba09c9c579aef964aef8f81"> 77</a></span>&#160; PURE_ABSTRACT = 0x1, <span class="comment">// pure virtual abstract class</span></div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4afd6d851b22e741690f0736b4858d81a5"> 78</a></span>&#160; MULTI_INHERITANCE = 0x2, <span class="comment">// multi inheritance class</span></div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4a330331556c568fcd60c9df6df2c1281d"> 79</a></span>&#160; TEMPLATE = 0x04 <span class="comment">// template class</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; } <a class="code" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4">CLASSATTR</a>;</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"><a class="line" href="classSVF_1_1CHNode.html#aa4af6538c9994ec54a7b82691f846a31"> 82</a></span>&#160; <span class="keyword">typedef</span> std::vector&lt;const SVFFunction*&gt; <a class="code" href="classSVF_1_1CHNode.html#aa4af6538c9994ec54a7b82691f846a31">FuncVector</a>;</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"><a class="line" href="classSVF_1_1CHNode.html#a1f2c496e378d01841e4dc164942dc145"> 84</a></span>&#160; <a class="code" href="classSVF_1_1CHNode.html#a1f2c496e378d01841e4dc164942dc145">CHNode</a> (<span class="keyword">const</span> std::string name, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i = 0, <a class="code" href="classSVF_1_1GenericNode.html#a363b90ab02cce2ebc3ede8e5b7cc141c">GNodeK</a> k = 0):</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; GenericCHNodeTy(i, k), vtable(nullptr), className(name), flags(0)</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#aff05589899b58112119af68df5d1997e"> 88</a></span>&#160; <a class="code" href="classSVF_1_1CHNode.html#aff05589899b58112119af68df5d1997e">~CHNode</a>()</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089"> 91</a></span>&#160; std::string <a class="code" href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">getName</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">return</span> className;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#ab3755d804852b8a98bdf8cd0171f3a2f"> 97</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#ab3755d804852b8a98bdf8cd0171f3a2f">setFlag</a>(<a class="code" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4">CLASSATTR</a> mask)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; flags |= mask;</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_1CHNode.html#aebcbd36a7efc0dbe9b3c3f680ef033e7"> 101</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHNode.html#aebcbd36a7efc0dbe9b3c3f680ef033e7">hasFlag</a>(<a class="code" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4">CLASSATTR</a> mask)<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> (flags &amp; mask) == mask;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#abac89987927dadd53dd646eae540a024"> 109</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#abac89987927dadd53dd646eae540a024">setPureAbstract</a>()</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; setFlag(PURE_ABSTRACT);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a5d751a3a0d88c0de374bfeb526051440"> 113</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#a5d751a3a0d88c0de374bfeb526051440">setMultiInheritance</a>()</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; setFlag(MULTI_INHERITANCE);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div><div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a00343177422c8d84d707432d0c483438"> 117</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#a00343177422c8d84d707432d0c483438">setTemplate</a>()</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; setFlag(TEMPLATE);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a268ccdfb486cc2efa8581ee7a3b5af39"> 121</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHNode.html#a268ccdfb486cc2efa8581ee7a3b5af39">isPureAbstract</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">return</span> hasFlag(PURE_ABSTRACT);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; }</div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a224a394537fae62e64cf62a0d4fdd430"> 125</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHNode.html#a224a394537fae62e64cf62a0d4fdd430">isMultiInheritance</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">return</span> hasFlag(MULTI_INHERITANCE);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div><div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#aff23fda93401c60422a4a5a08d77d749"> 129</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHNode.html#aff23fda93401c60422a4a5a08d77d749">isTemplate</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">return</span> hasFlag(TEMPLATE);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a8c51571df92b5e152cc42e9aaf712dc9"> 135</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#a8c51571df92b5e152cc42e9aaf712dc9">addVirtualFunctionVector</a>(FuncVector vfuncvec)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; virtualFunctionVectors.push_back(vfuncvec);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a5df1cf4d51bf3406d188c96bc9aae0af"> 139</a></span>&#160; <span class="keyword">const</span> std::vector&lt;FuncVector&gt; &amp;<a class="code" href="classSVF_1_1CHNode.html#a5df1cf4d51bf3406d188c96bc9aae0af">getVirtualFunctionVectors</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">return</span> virtualFunctionVectors;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordtype">void</span> getVirtualFunctions(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> idx, FuncVector &amp;virtualFunctions) <span class="keyword">const</span>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a600b63dac83e526c933c141d4e2bcc0c"> 145</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *<a class="code" href="classSVF_1_1CHNode.html#a600b63dac83e526c933c141d4e2bcc0c">getVTable</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">return</span> vtable;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a2c31580f1cf43fbdd01a07b6f9f6b04e"> 150</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#a2c31580f1cf43fbdd01a07b6f9f6b04e">setVTable</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl)</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; vtable = vtbl;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a08a717043e8b8c3d87742f0ecd3a3cc1"> 156</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a>* <a class="code" href="classSVF_1_1CHNode.html#a08a717043e8b8c3d87742f0ecd3a3cc1">vtable</a>;</div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#ac7c18617b768a2988cf4eff7e849f397"> 157</a></span>&#160; std::string <a class="code" href="classSVF_1_1CHNode.html#ac7c18617b768a2988cf4eff7e849f397">className</a>;</div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a6844c89f715979709dc52d4854373e72"> 158</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classSVF_1_1CHNode.html#a6844c89f715979709dc52d4854373e72">flags</a>;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment"> * virtual functions inherited from different classes are separately stored</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment"> * to model different vtables inherited from different fathers.</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment"> * Example:</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment"> * class C: public A, public B</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="comment"> * vtableC = {Af1, Af2, ..., inttoptr, Bg1, Bg2, ...} (&quot;inttoptr&quot;</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment"> * instruction works as the delimiter for separating virtual functions</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="comment"> * inherited from different classes)</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="comment"> * virtualFunctionVectors = {{Af1, Af2, ...}, {Bg1, Bg2, ...}}</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a9c81308b3eac1728c122fda39e260a90"> 171</a></span>&#160; std::vector&lt;FuncVector&gt; <a class="code" href="classSVF_1_1CHNode.html#a9c81308b3eac1728c122fda39e260a90">virtualFunctionVectors</a>;</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="namespaceSVF.html#aa8bd37e4ec2e98c805a14adbf590b9dd"> 175</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericGraph.html">GenericGraph&lt;CHNode,CHEdge&gt;</a> <a class="code" href="namespaceSVF.html#aa8bd37e4ec2e98c805a14adbf590b9dd">GenericCHGraphTy</a>;</div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html"> 176</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CHGraph.html">CHGraph</a>: <span class="keyword">public</span> <a class="code" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</a>, <span class="keyword">public</span> GenericCHGraphTy</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;{</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b"> 179</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const CHNode*&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHNodeSetTy</a>;</div><div class="line"><a name="l00180"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#af1b638faf888898cdf168c25e008ab12"> 180</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;const CHNode*&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#af1b638faf888898cdf168c25e008ab12">WorkList</a>;</div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#aedb20aca2fa11a070cfe28e14fd3552b"> 181</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::string, CHNodeSetTy&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#aedb20aca2fa11a070cfe28e14fd3552b">NameToCHNodesMap</a>;</div><div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a3740a239432a5c7237109aa72aa28eff"> 182</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CallSite, CHNodeSetTy&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#a3740a239432a5c7237109aa72aa28eff">CallSiteToCHNodesMap</a>;</div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#aefdf6c5fe8a26efce200e8225d463cac"> 183</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CallSite, VTableSet&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#aefdf6c5fe8a26efce200e8225d463cac">CallSiteToVTableSetMap</a>;</div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a0397e5da88106dc8b4a1e207ae455e74"> 184</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CallSite, VFunSet&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#a0397e5da88106dc8b4a1e207ae455e74">CallSiteToVFunSetMap</a>;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a2a1da7f262a2f11653fb583154a93a22"> 186</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">enum</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div><div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a2a1da7f262a2f11653fb583154a93a22a331376f6d22d2346039db7a9c9a311c2"> 188</a></span>&#160; CONSTRUCTOR = 0x1, <span class="comment">// connect node based on constructor</span></div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a2a1da7f262a2f11653fb583154a93a22adfb68ad45ad216277b580d9a45926dc7"> 189</a></span>&#160; DESTRUCTOR = 0x2 <span class="comment">// connect node based on destructor</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; } <a class="code" href="classSVF_1_1CHGraph.html#a2a1da7f262a2f11653fb583154a93a22">RELATIONTYPE</a>;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#afacd7d35dad4344a5c2551d951acb442"> 192</a></span>&#160; <a class="code" href="classSVF_1_1CHGraph.html#afacd7d35dad4344a5c2551d951acb442">CHGraph</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule): svfMod(svfModule), classNum(0), vfID(0), buildingCHGTime(0)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; this-&gt;kind = Standard;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; ~<a class="code" href="classSVF_1_1CHGraph.html">CHGraph</a>() <span class="keyword">override</span> = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordtype">void</span> buildCHG();</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordtype">void</span> buildInternalMaps();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordtype">void</span> buildCHGNodes(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *V);</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordtype">void</span> buildCHGNodes(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordtype">void</span> buildCHGEdges(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordtype">void</span> connectInheritEdgeViaCall(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* caller, <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordtype">void</span> connectInheritEdgeViaStore(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* caller, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a>* store);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordtype">void</span> addEdge(<span class="keyword">const</span> std::string className,</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keyword">const</span> std::string baseClassName,</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEdge::CHEDGETYPE</a> <a class="code" href="classSVF_1_1CHEdge.html#a58ac14decda4041e773d723475f5c1c8">edgeType</a>);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *getNode(<span class="keyword">const</span> std::string name) <span class="keyword">const</span>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *createNode(<span class="keyword">const</span> std::string name);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordtype">void</span> buildClassNameToAncestorsDescendantsMap();</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordtype">void</span> buildVirtualFunctionToIDMap();</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordtype">void</span> buildCSToCHAVtblsAndVfnsMap();</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordtype">void</span> readInheritanceMetadataFromModule(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;M);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordtype">void</span> analyzeVTables(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;M);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHGraph::CHNodeSetTy</a>&amp; getInstancesAndDescendants(<span class="keyword">const</span> std::string className);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keyword">const</span> CHNodeSetTy&amp; getCSClasses(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <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="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordtype">void</span> dump(<span class="keyword">const</span> std::string&amp; filename);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordtype">void</span> view();</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordtype">void</span> printCH();</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a4ac546af1020af930f192460a7d40e4f"> 222</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> <a class="code" href="classSVF_1_1CHGraph.html#a4ac546af1020af930f192460a7d40e4f">getVirtualFunctionID</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* vfn)<span class="keyword"> const</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, s32_t&gt;::const_iterator</a> it =</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; virtualFunctionToIDMap.find(vfn);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (it != virtualFunctionToIDMap.end())</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ab53198e1a85df15f04ed601f3346ef85"> 231</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="classSVF_1_1CHGraph.html#ab53198e1a85df15f04ed601f3346ef85">getVirtualFunctionBasedonID</a>(<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, s32_t&gt;::const_iterator</a> it, eit;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">for</span> (it = virtualFunctionToIDMap.begin(), eit =</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; virtualFunctionToIDMap.end(); it != eit; ++it)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span> (it-&gt;second == <span class="keywordtype">id</span>)</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">return</span> it-&gt;first;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a5ee7e559425045f3af5c35ea6d6f03ee"> 243</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHGraph.html#a5ee7e559425045f3af5c35ea6d6f03ee">addInstances</a>(<span class="keyword">const</span> std::string templateName, <a class="code" href="classSVF_1_1CHNode.html">CHNode</a>* node)</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; NameToCHNodesMap::iterator it = templateNameToInstancesMap.find(</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; templateName);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">if</span> (it != templateNameToInstancesMap.end())</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; it-&gt;second.insert(node);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; templateNameToInstancesMap[templateName].insert(node);</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_1CHGraph.html#a26f89a9b269cad3fc894110d25598715"> 252</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> CHNodeSetTy &amp;<a class="code" href="classSVF_1_1CHGraph.html#a26f89a9b269cad3fc894110d25598715">getDescendants</a>(<span class="keyword">const</span> std::string className)</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">return</span> classNameToDescendantsMap[className];</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"><a class="line" href="classSVF_1_1CHGraph.html#a894a69fa143d3f460d433646a0521b6f"> 256</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> CHNodeSetTy &amp;<a class="code" href="classSVF_1_1CHGraph.html#a894a69fa143d3f460d433646a0521b6f">getInstances</a>(<span class="keyword">const</span> std::string className)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; {</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">return</span> templateNameToInstancesMap[className];</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; }</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#acd4907aa926a4c7fdc3964700d721f79"> 261</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHGraph.html#acd4907aa926a4c7fdc3964700d721f79">csHasVtblsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; CallSiteToVTableSetMap::const_iterator it = csToCHAVtblsMap.find(cs);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">return</span> it != csToCHAVtblsMap.end();</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"><a class="line" href="classSVF_1_1CHGraph.html#a885a81b08477e6ccdd7df98d249b8c39"> 266</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHGraph.html#a885a81b08477e6ccdd7df98d249b8c39">csHasVFnsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; CallSiteToVFunSetMap::const_iterator it = csToCHAVFnsMap.find(cs);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">return</span> it != csToCHAVFnsMap.end();</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; }</div><div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a9878df891d2e20d09b65096060d2c148"> 271</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a> &amp;<a class="code" href="classSVF_1_1CHGraph.html#a9878df891d2e20d09b65096060d2c148">getCSVtblsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; CallSiteToVTableSetMap::const_iterator it = csToCHAVtblsMap.find(cs);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != csToCHAVtblsMap.end() &amp;&amp; <span class="stringliteral">&quot;cs does not have vtabls based on CHA.&quot;</span>);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div><div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a1c0ca4e6a466ad317daf00a6c7de8e31"> 277</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7">VFunSet</a> &amp;<a class="code" href="classSVF_1_1CHGraph.html#a1c0ca4e6a466ad317daf00a6c7de8e31">getCSVFsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; CallSiteToVFunSetMap::const_iterator it = csToCHAVFnsMap.find(cs);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != csToCHAVFnsMap.end() &amp;&amp; <span class="stringliteral">&quot;cs does not have vfns based on CHA.&quot;</span>);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; }</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ae7e9f1a3c524d80c77b2a75f877dc2d6"> 284</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHGraph.html#ae7e9f1a3c524d80c77b2a75f877dc2d6">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</a> *chg)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">return</span> chg-&gt;<a class="code" href="classSVF_1_1CommonCHGraph.html#adf2a02fff9d7dd9fc9d92121e5e28f8b">getKind</a>() == Standard;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; }</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordtype">void</span> addFuncToFuncVector(<a class="code" href="classSVF_1_1CHNode.html#aa4af6538c9994ec54a7b82691f846a31">CHNode::FuncVector</a> &amp;v, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *f);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a62a3ccdbc55381d5f8d96dc23141f2e5"> 293</a></span>&#160; <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* <a class="code" href="classSVF_1_1CHGraph.html#a62a3ccdbc55381d5f8d96dc23141f2e5">svfMod</a>;</div><div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#adb99b732d20cfc8cc0f078cda6753bc0"> 294</a></span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1CHGraph.html#adb99b732d20cfc8cc0f078cda6753bc0">classNum</a>;</div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a1cf155a56d1a3b3c3ab1a3d593e1afcd"> 295</a></span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> <a class="code" href="classSVF_1_1CHGraph.html#a1cf155a56d1a3b3c3ab1a3d593e1afcd">vfID</a>;</div><div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ab5bd2348e4418fcb2f3b18227fccd836"> 296</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1CHGraph.html#ab5bd2348e4418fcb2f3b18227fccd836">buildingCHGTime</a>;</div><div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#aa040bc0a5653843419d24777343e1650"> 297</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::string, CHNode *&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#aa040bc0a5653843419d24777343e1650">classNameToNodeMap</a>;</div><div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ac08f846413b6aed26a1bf39eb865b006"> 298</a></span>&#160; NameToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#ac08f846413b6aed26a1bf39eb865b006">classNameToDescendantsMap</a>;</div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a083f726d74208c2d8107a75e0d6b3ca9"> 299</a></span>&#160; NameToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#a083f726d74208c2d8107a75e0d6b3ca9">classNameToAncestorsMap</a>;</div><div class="line"><a name="l00300"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#aaec4bdde66e4a7a63ea3f3c6ec0bd045"> 300</a></span>&#160; NameToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#aaec4bdde66e4a7a63ea3f3c6ec0bd045">classNameToInstAndDescsMap</a>;</div><div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#acd022005e2191bc3bcb265805abee4f8"> 301</a></span>&#160; NameToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#acd022005e2191bc3bcb265805abee4f8">templateNameToInstancesMap</a>;</div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a7ef9982d89a4932883bd58bc49ad9986"> 302</a></span>&#160; CallSiteToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#a7ef9982d89a4932883bd58bc49ad9986">csToClassesMap</a>;</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"><a class="line" href="classSVF_1_1CHGraph.html#a6a581e9b4105745c518124b494b41c63"> 304</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, s32_t&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#a6a581e9b4105745c518124b494b41c63">virtualFunctionToIDMap</a>;</div><div class="line"><a name="l00305"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#af3ed2bee5d76e5a848b250950c3be333"> 305</a></span>&#160; CallSiteToVTableSetMap <a class="code" href="classSVF_1_1CHGraph.html#af3ed2bee5d76e5a848b250950c3be333">csToCHAVtblsMap</a>;</div><div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a5e6502c5baad99c70e1cf56c84ce9474"> 306</a></span>&#160; CallSiteToVFunSetMap <a class="code" href="classSVF_1_1CHGraph.html#a5e6502c5baad99c70e1cf56c84ce9474">csToCHAVFnsMap</a>;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;};</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;{</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="comment">/* !</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="comment"> * GraphTraits specializations for generic graph algorithms.</span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</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="l00316"></a><span class="lineno"> 316</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1CHNode_01_5_01_4.html"> 317</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>::CHNode*&gt; : <span class="keyword">public</span> GraphTraits&lt;SVF::GenericNode&lt;SVF::CHNode,SVF::CHEdge&gt;* &gt;</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;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00323"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CHNode_01_5_01_4_01_4.html"> 323</a></span>&#160;<span class="keyword">struct </span>GraphTraits&lt;Inverse&lt;SVF::CHNode*&gt; &gt; : <span class="keyword">public</span> GraphTraits&lt;Inverse&lt;SVF::GenericNode&lt;SVF::CHNode,SVF::CHEdge&gt;* &gt; &gt;</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="l00326"></a><span class="lineno"> 326</span>&#160;</div><div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html"> 327</a></span>&#160;<span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>GraphTraits&lt;SVF::CHGraph*&gt; : <span class="keyword">public</span> GraphTraits&lt;SVF::GenericGraph&lt;SVF::CHNode,SVF::CHEdge&gt;* &gt;</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"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html#aea2a657d278919364d2911d92b3e6f5a"> 329</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1CHNode.html">SVF::CHNode</a> *<a class="code" href="structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html#aea2a657d278919364d2911d92b3e6f5a">NodeRef</a>;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;};</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;} <span class="comment">// End namespace llvm</span></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="preprocessor">#endif </span><span class="comment">/* CHA_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1CHGraph_html_adb99b732d20cfc8cc0f078cda6753bc0"><div class="ttname"><a href="classSVF_1_1CHGraph.html#adb99b732d20cfc8cc0f078cda6753bc0">SVF::CHGraph::classNum</a></div><div class="ttdeci">u32_t classNum</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00294">CHG.h:294</a></div></div>
70
70
  <div class="ttc" id="namespaceSVF_html_ab696aab940eb187dc81217efe8649af5"><div class="ttname"><a href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">SVF::StoreInst</a></div><div class="ttdeci">llvm::StoreInst StoreInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00151">BasicTypes.h:151</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1CHGraph_html_acd022005e2191bc3bcb265805abee4f8"><div class="ttname"><a href="classSVF_1_1CHGraph.html#acd022005e2191bc3bcb265805abee4f8">SVF::CHGraph::templateNameToInstancesMap</a></div><div class="ttdeci">NameToCHNodesMap templateNameToInstancesMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00301">CHG.h:301</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1CHEdge_html_ae2b90913c6c5a30df2b285d31c694525"><div class="ttname"><a href="classSVF_1_1CHEdge.html#ae2b90913c6c5a30df2b285d31c694525">SVF::CHEdge::getEdgeType</a></div><div class="ttdeci">CHEDGETYPE getEdgeType() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00062">CHG.h:62</a></div></div>
@@ -93,7 +93,7 @@ $(function() {
93
93
  <div class="ttc" id="classSVF_1_1CHGraph_html_a083f726d74208c2d8107a75e0d6b3ca9"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a083f726d74208c2d8107a75e0d6b3ca9">SVF::CHGraph::classNameToAncestorsMap</a></div><div class="ttdeci">NameToCHNodesMap classNameToAncestorsMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00299">CHG.h:299</a></div></div>
94
94
  <div class="ttc" id="classSVF_1_1CHEdge_html_a26280c3b724551036f7e3ba2b5922676"><div class="ttname"><a href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">SVF::CHEdge::CHEDGETYPE</a></div><div class="ttdeci">CHEDGETYPE</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00048">CHG.h:48</a></div></div>
95
95
  <div class="ttc" id="classSVF_1_1CHGraph_html_ae7e9f1a3c524d80c77b2a75f877dc2d6"><div class="ttname"><a href="classSVF_1_1CHGraph.html#ae7e9f1a3c524d80c77b2a75f877dc2d6">SVF::CHGraph::classof</a></div><div class="ttdeci">static bool classof(const CommonCHGraph *chg)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00284">CHG.h:284</a></div></div>
96
- <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#l00038">SVFModule.h:38</a></div></div>
96
+ <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>
97
97
  <div class="ttc" id="classSVF_1_1CHNode_html_a7111a3971f9f03e32bfd291a783d43b4"><div class="ttname"><a href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4">SVF::CHNode::CLASSATTR</a></div><div class="ttdeci">CLASSATTR</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00075">CHG.h:75</a></div></div>
98
98
  <div class="ttc" id="classSVF_1_1CHGraph_html_ad0f60c720b277c60ed8a8966189bb42b"><div class="ttname"><a href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">SVF::CHGraph::CHNodeSetTy</a></div><div class="ttdeci">Set&lt; const CHNode * &gt; CHNodeSetTy</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00179">CHG.h:179</a></div></div>
99
99
  <div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00100">SVFBasicTypes.h:100</a></div></div>
@@ -151,7 +151,7 @@ $(function() {
151
151
  <div class="ttc" id="SVFModule_8h_html"><div class="ttname"><a href="SVFModule_8h.html">SVFModule.h</a></div></div>
152
152
  <div class="ttc" id="WorkList_8h_html"><div class="ttname"><a href="WorkList_8h.html">WorkList.h</a></div></div>
153
153
  <div class="ttc" id="classSVF_1_1CHGraph_html_af1b638faf888898cdf168c25e008ab12"><div class="ttname"><a href="classSVF_1_1CHGraph.html#af1b638faf888898cdf168c25e008ab12">SVF::CHGraph::WorkList</a></div><div class="ttdeci">FIFOWorkList&lt; const CHNode * &gt; WorkList</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00180">CHG.h:180</a></div></div>
154
- <div class="ttc" id="classSVF_1_1GenericGraph_html"><div class="ttname"><a href="classSVF_1_1GenericGraph.html">SVF::GenericGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00326">GenericGraph.h:326</a></div></div>
154
+ <div class="ttc" id="classSVF_1_1GenericGraph_html"><div class="ttname"><a href="classSVF_1_1GenericGraph.html">SVF::GenericGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00327">GenericGraph.h:327</a></div></div>
155
155
  <div class="ttc" id="classSVF_1_1CHEdge_html_ae2c206fb3c7e4d9deec7d8298caf5017"><div class="ttname"><a href="classSVF_1_1CHEdge.html#ae2c206fb3c7e4d9deec7d8298caf5017">SVF::CHEdge::CHEdgeSetTy</a></div><div class="ttdeci">GenericNode&lt; CHNode, CHEdge &gt;::GEdgeSetTy CHEdgeSetTy</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00054">CHG.h:54</a></div></div>
156
156
  <div class="ttc" id="classSVF_1_1CHEdge_html_af01c14c28db231b7bfae39344d1ae8ee"><div class="ttname"><a href="classSVF_1_1CHEdge.html#af01c14c28db231b7bfae39344d1ae8ee">SVF::CHEdge::CHEdge</a></div><div class="ttdeci">CHEdge(CHNode *s, CHNode *d, CHEDGETYPE et, GEdgeFlag k=0)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00056">CHG.h:56</a></div></div>
157
157
  <div class="ttc" id="classSVF_1_1CHGraph_html_a1cf155a56d1a3b3c3ab1a3d593e1afcd"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a1cf155a56d1a3b3c3ab1a3d593e1afcd">SVF::CHGraph::vfID</a></div><div class="ttdeci">s32_t vfID</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00295">CHG.h:295</a></div></div>