svf-tools 1.0.310 → 1.0.311

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 (316) hide show
  1. package/SVF-doxygen/html/html/AndersenLCD_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
  3. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +6 -6
  5. package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +3 -3
  7. package/SVF-doxygen/html/html/Andersen_8h_source.html +8 -8
  8. package/SVF-doxygen/html/html/CHG_8cpp.html +1 -1
  9. package/SVF-doxygen/html/html/CHG_8cpp_source.html +9 -9
  10. package/SVF-doxygen/html/html/CHG_8h_source.html +2 -2
  11. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +5 -5
  12. package/SVF-doxygen/html/html/CallGraphBuilder_8h_source.html +1 -1
  13. package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
  14. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +10 -10
  15. package/SVF-doxygen/html/html/ConsG_8h_source.html +5 -5
  16. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +5 -5
  17. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +4 -4
  18. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +11 -11
  19. package/SVF-doxygen/html/html/DCHG_8h_source.html +2 -2
  20. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +2 -2
  21. package/SVF-doxygen/html/html/DDAClient_8h_source.html +2 -2
  22. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +5 -5
  23. package/SVF-doxygen/html/html/DDAPass_8h_source.html +1 -1
  24. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +4 -4
  25. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +2 -2
  26. package/SVF-doxygen/html/html/DoubleFreeChecker_8h_source.html +1 -1
  27. package/SVF-doxygen/html/html/ExternalPAG_8cpp.html +1 -1
  28. package/SVF-doxygen/html/html/ExternalPAG_8cpp_source.html +8 -8
  29. package/SVF-doxygen/html/html/ExternalPAG_8h_source.html +1 -1
  30. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +8 -8
  31. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
  32. package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
  33. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
  34. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +2 -2
  35. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +6 -6
  36. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +9 -9
  37. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +2 -2
  38. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +4 -4
  39. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +82 -81
  40. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +4 -4
  41. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +4 -4
  42. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
  43. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +1 -1
  44. package/SVF-doxygen/html/html/ICFGStat_8h_source.html +3 -3
  45. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +6 -6
  46. package/SVF-doxygen/html/html/ICFG_8h_source.html +6 -6
  47. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +4 -4
  48. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +2 -2
  49. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +2 -2
  50. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +1 -1
  51. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +4 -4
  52. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
  53. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +1 -1
  54. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +6 -6
  55. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +1 -1
  56. package/SVF-doxygen/html/html/MHP_8cpp_source.html +13 -13
  57. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +4 -4
  58. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -1
  59. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
  60. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -1
  61. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
  62. package/SVF-doxygen/html/html/MTA_8cpp_source.html +4 -4
  63. package/SVF-doxygen/html/html/MTA_8h_source.html +1 -1
  64. package/SVF-doxygen/html/html/MemModel_8cpp_source.html +1 -1
  65. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +11 -11
  66. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +3 -3
  67. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +1 -1
  68. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +2 -2
  69. package/SVF-doxygen/html/html/Options_8cpp_source.html +1 -1
  70. package/SVF-doxygen/html/html/PAGBuilder_8cpp_source.html +15 -15
  71. package/SVF-doxygen/html/html/PAGBuilder_8h_source.html +1 -1
  72. package/SVF-doxygen/html/html/PAGEdge_8h_source.html +2 -2
  73. package/SVF-doxygen/html/html/PAGNode_8h_source.html +6 -6
  74. package/SVF-doxygen/html/html/PAG_8cpp_source.html +27 -27
  75. package/SVF-doxygen/html/html/PAG_8h_source.html +17 -17
  76. package/SVF-doxygen/html/html/PCG_8cpp_source.html +8 -8
  77. package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
  78. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +8 -8
  79. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +2 -2
  80. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +8 -8
  81. package/SVF-doxygen/html/html/PTAType_8h_source.html +4 -4
  82. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
  83. package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +1 -1
  84. package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +34 -33
  85. package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +7 -7
  86. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +11 -11
  87. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +66 -66
  88. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +8 -8
  89. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +2 -2
  90. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +3 -3
  91. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +4 -4
  92. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
  93. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +10 -10
  94. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +8 -8
  95. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +5 -5
  96. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +9 -9
  97. package/SVF-doxygen/html/html/SVFG_8h_source.html +7 -7
  98. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +1 -1
  99. package/SVF-doxygen/html/html/SVFModule_8h.html +3 -0
  100. package/SVF-doxygen/html/html/SVFModule_8h_source.html +53 -46
  101. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
  102. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +7 -7
  103. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +4 -4
  104. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
  105. package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -1
  106. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
  107. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +11 -11
  108. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +16 -16
  109. package/SVF-doxygen/html/html/TCT_8cpp_source.html +11 -11
  110. package/SVF-doxygen/html/html/TCT_8h_source.html +10 -10
  111. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +5 -5
  112. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +1 -1
  113. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +4 -4
  114. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +4 -4
  115. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +1 -1
  116. package/SVF-doxygen/html/html/VFGNode_8h_source.html +2 -2
  117. package/SVF-doxygen/html/html/VFG_8cpp_source.html +6 -6
  118. package/SVF-doxygen/html/html/VFG_8h_source.html +6 -6
  119. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +4 -4
  120. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +10 -10
  121. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +5 -5
  122. package/SVF-doxygen/html/html/WPAPass_8h_source.html +1 -1
  123. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  124. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  125. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
  126. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
  127. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +2 -2
  128. package/SVF-doxygen/html/html/classSVF_1_1AddrPE.html +1 -1
  129. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +1 -1
  130. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
  131. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +29 -29
  132. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +2 -2
  133. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +2 -2
  134. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +4 -4
  135. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
  136. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +15 -15
  137. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +1 -1
  138. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType.html +2 -2
  139. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +1 -1
  140. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +69 -68
  141. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +1 -1
  142. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  143. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +25 -25
  144. package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +1 -1
  145. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +3 -3
  146. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjPN.html +1 -1
  148. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjPN.html +1 -1
  149. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjPN.html +1 -1
  150. package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +1 -1
  151. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
  152. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +115 -115
  153. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +15 -15
  154. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +18 -18
  155. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +9 -9
  156. package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +1 -1
  157. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +1 -1
  158. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +20 -20
  159. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
  160. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +9 -9
  161. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +4 -4
  162. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +1 -1
  163. package/SVF-doxygen/html/html/classSVF_1_1DummyObjPN.html +1 -1
  164. package/SVF-doxygen/html/html/classSVF_1_1DummyValPN.html +1 -1
  165. package/SVF-doxygen/html/html/classSVF_1_1ExternalPAG.html +8 -8
  166. package/SVF-doxygen/html/html/classSVF_1_1FIObjPN.html +1 -1
  167. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +6 -6
  168. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +38 -38
  169. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +20 -20
  170. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +30 -30
  171. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +5 -5
  172. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
  173. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
  174. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
  175. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
  176. package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +1 -1
  177. package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +1 -1
  178. package/SVF-doxygen/html/html/classSVF_1_1GenericGraph.html +47 -47
  179. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +58 -57
  180. package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +1 -1
  181. package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +1 -1
  182. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +1 -1
  183. package/SVF-doxygen/html/html/classSVF_1_1GepValPN.html +1 -1
  184. package/SVF-doxygen/html/html/classSVF_1_1GlobalBlockNode.html +1 -1
  185. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +13 -13
  186. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +3 -3
  187. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
  188. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +6 -6
  189. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +2 -2
  190. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +3 -3
  191. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  192. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  193. package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +1 -1
  194. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
  195. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  196. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +17 -17
  197. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
  198. package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +1 -1
  199. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +1 -1
  200. package/SVF-doxygen/html/html/classSVF_1_1LocObjTypeInfo.html +1 -1
  201. package/SVF-doxygen/html/html/classSVF_1_1LocSymTableInfo.html +2 -2
  202. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +8 -8
  203. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
  204. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +15 -15
  205. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +17 -17
  206. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
  207. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
  208. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +4 -4
  209. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +3 -3
  210. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +4 -4
  211. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +21 -21
  212. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +5 -5
  213. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +3 -3
  214. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +3 -3
  215. package/SVF-doxygen/html/html/classSVF_1_1ObjPN.html +2 -2
  216. package/SVF-doxygen/html/html/classSVF_1_1PAG.html +33 -33
  217. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilder.html +21 -21
  218. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +2 -2
  219. package/SVF-doxygen/html/html/classSVF_1_1PAGEdge.html +5 -5
  220. package/SVF-doxygen/html/html/classSVF_1_1PAGNode.html +10 -10
  221. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +15 -15
  222. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
  223. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +16 -16
  224. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +4 -4
  225. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +15 -15
  226. package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +6 -6
  227. package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +5 -5
  228. package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +10 -10
  229. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache-members.html +39 -38
  230. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +153 -116
  231. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +11 -11
  232. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +3 -3
  233. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
  234. package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +1 -1
  235. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  236. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +2 -2
  237. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +8 -8
  238. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
  239. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +35 -35
  240. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +7 -7
  241. package/SVF-doxygen/html/html/classSVF_1_1SVFModule-members.html +1 -0
  242. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +110 -77
  243. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +3 -3
  244. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +15 -15
  245. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +3 -3
  246. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +7 -7
  247. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +2 -2
  248. package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +1 -1
  249. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +1 -1
  250. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +66 -65
  251. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +28 -28
  252. package/SVF-doxygen/html/html/classSVF_1_1TCTNode.html +1 -1
  253. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
  254. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +3 -3
  255. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +4 -4
  256. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +4 -4
  257. package/SVF-doxygen/html/html/classSVF_1_1TypeSystem.html +1 -1
  258. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +1 -1
  259. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  260. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +14 -14
  261. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
  262. package/SVF-doxygen/html/html/classSVF_1_1ValPN.html +2 -2
  263. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +2 -2
  264. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +31 -31
  265. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +8 -8
  266. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +3 -3
  267. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +5 -5
  268. package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
  269. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  270. package/SVF-doxygen/html/html/functions_0x7e.html +3 -0
  271. package/SVF-doxygen/html/html/functions_c.html +27 -26
  272. package/SVF-doxygen/html/html/functions_func_0x7e.html +3 -0
  273. package/SVF-doxygen/html/html/functions_func_c.html +11 -10
  274. package/SVF-doxygen/html/html/functions_i.html +3 -3
  275. package/SVF-doxygen/html/html/functions_r.html +1 -1
  276. package/SVF-doxygen/html/html/functions_s.html +12 -12
  277. package/SVF-doxygen/html/html/functions_u.html +3 -3
  278. package/SVF-doxygen/html/html/mta_8cpp.html +1 -1
  279. package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
  280. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
  281. package/SVF-doxygen/html/html/saber_8cpp.html +1 -1
  282. package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
  283. package/SVF-doxygen/html/html/search/all_10.js +5 -5
  284. package/SVF-doxygen/html/html/search/all_12.js +1 -1
  285. package/SVF-doxygen/html/html/search/all_13.js +8 -8
  286. package/SVF-doxygen/html/html/search/all_14.js +2 -2
  287. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  288. package/SVF-doxygen/html/html/search/all_16.js +1 -1
  289. package/SVF-doxygen/html/html/search/all_1b.js +1 -0
  290. package/SVF-doxygen/html/html/search/all_3.js +1 -1
  291. package/SVF-doxygen/html/html/search/all_9.js +1 -1
  292. package/SVF-doxygen/html/html/search/all_e.js +2 -2
  293. package/SVF-doxygen/html/html/search/functions_16.js +1 -0
  294. package/SVF-doxygen/html/html/search/functions_2.js +1 -1
  295. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  296. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  297. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  298. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
  299. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PAG_01_5_01_4.html +17 -17
  300. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +2 -2
  301. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01TCT_01_5_01_4.html +1 -1
  302. 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
  303. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericGraph_3_01NodeTy_00_01EdgeTy_01_4_01_5_4.html +20 -20
  304. 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
  305. package/SVF-doxygen/html/html/svf-ex_8cpp.html +5 -5
  306. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +3 -3
  307. package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
  308. package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
  309. package/include/Graphs/GenericGraph.h +5 -8
  310. package/include/MemoryModel/PersistentPointsToCache.h +13 -7
  311. package/include/MemoryModel/PointerAnalysisImpl.h +1 -0
  312. package/include/Util/SVFModule.h +16 -0
  313. package/lib/Graphs/PAG.cpp +3 -10
  314. package/lib/SVF-FE/SymbolTableInfo.cpp +3 -0
  315. package/lib/Util/Options.cpp +2 -2
  316. package/package.json +1 -1
@@ -166,20 +166,20 @@ Additional Inherited Members</h2></td></tr>
166
166
  <p>Build thread-aware callgraph. </p>
167
167
 
168
168
  <p class="definition">Definition at line <a class="el" href="CallGraphBuilder_8cpp_source.html#l00069">69</a> of file <a class="el" href="CallGraphBuilder_8cpp_source.html">CallGraphBuilder.cpp</a>.</p>
169
- <div class="fragment"><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;{</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="classSVF_1_1CallGraphBuilder.html#aa64a27e99434908a203e566074c66ebc">buildCallGraph</a>(svfModule);</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; <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>* cg = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>&gt;(<a class="code" href="classSVF_1_1CallGraphBuilder.html#a77ccca4e81eb1199c89d75e1b2d21af6">callgraph</a>);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(cg &amp;&amp; <span class="stringliteral">&quot;not a thread callgraph?&quot;</span>);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html">ThreadAPI</a>* tdAPI = <a class="code" href="classSVF_1_1ThreadAPI.html#a6852ff1eedc1117e95e45e4a90c80d53">ThreadAPI::getThreadAPI</a>();</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#ab86e221a93bec67a2ecb7cb53315f569">SVFModule::llvm_const_iterator</a> fi = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a648542aa5c4b487ad5aa12a39d15e951">llvmFunBegin</a>(), efi = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#af38d0f831967d6d8391a4c84e58d6519">llvmFunEnd</a>(); fi != efi; ++fi)</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fun = *fi;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a032e8478a7b6a8bb0b7755c98a7bce91">const_inst_iterator</a> II = inst_begin(*fun), E = inst_end(*fun); II != E; ++II)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = &amp;*II;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (tdAPI-&gt;<a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(inst))</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = <a class="code" href="classSVF_1_1CallGraphBuilder.html#ab3e0b47be010e25c093953e54602d211">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; cg-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a6e2ebab64fd01e40e7100162fe544b04">addForksite</a>(cs);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* forkee = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&gt;(tdAPI-&gt;<a class="code" href="classSVF_1_1ThreadAPI.html#a7ddc0c71aeae315af21972a4905b3456">getForkedFun</a>(inst));</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">if</span> (forkee)</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; cg-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a92e5a3154a98e12bdbbe4e0d39e62b3e">addDirectForkEdge</a>(cs);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// indirect call to the start routine function</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; cg-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a29d3e4d720f61b4c29fee9691cedff96">addThreadForkEdgeSetMap</a>(cs,<span class="keyword">nullptr</span>);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tdAPI-&gt;<a class="code" href="classSVF_1_1ThreadAPI.html#a86d75b7e3570337e484397e60f97d88e">isHareParFor</a>(inst))</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = <a class="code" href="classSVF_1_1CallGraphBuilder.html#ab3e0b47be010e25c093953e54602d211">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; cg-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a9daa0817e1f88a2478d7094646c72e13">addParForSite</a>(cs);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* taskFunc = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&gt;(tdAPI-&gt;<a class="code" href="classSVF_1_1ThreadAPI.html#afeedd6e518af76fa9e7142af8899b2f5">getTaskFuncAtHareParForSite</a>(inst));</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span> (taskFunc)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; cg-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a700ec3fd1c9d89a7176e05b2f1949aef">addDirectParForEdge</a>(cs);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">// indirect call to the start routine function</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">else</span></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; cg-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a845258d0d19de3dda573521a34dbf705">addHareParForEdgeSetMap</a>(cs,<span class="keyword">nullptr</span>);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">// record join sites</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#ab86e221a93bec67a2ecb7cb53315f569">SVFModule::llvm_const_iterator</a> fi = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a648542aa5c4b487ad5aa12a39d15e951">llvmFunBegin</a>(), efi = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#af38d0f831967d6d8391a4c84e58d6519">llvmFunEnd</a>(); fi != efi; ++fi)</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fun = *fi;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a032e8478a7b6a8bb0b7755c98a7bce91">const_inst_iterator</a> II = inst_begin(*fun), E = inst_end(*fun); II != E; ++II)</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = &amp;*II;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">if</span> (tdAPI-&gt;<a class="code" href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44">isTDJoin</a>(inst))</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"> 125</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = <a class="code" href="classSVF_1_1CallGraphBuilder.html#ab3e0b47be010e25c093953e54602d211">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; cg-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#ae72e4e29bfda892f059f719454f6fcd2">addJoinsite</a>(cs);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">return</span> cg;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFModule_html_af38d0f831967d6d8391a4c84e58d6519"><div class="ttname"><a href="classSVF_1_1SVFModule.html#af38d0f831967d6d8391a4c84e58d6519">SVF::SVFModule::llvmFunEnd</a></div><div class="ttdeci">llvm_iterator llvmFunEnd()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00127">SVFModule.h:127</a></div></div>
169
+ <div class="fragment"><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;{</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="classSVF_1_1CallGraphBuilder.html#aa64a27e99434908a203e566074c66ebc">buildCallGraph</a>(svfModule);</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; <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>* cg = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>&gt;(<a class="code" href="classSVF_1_1CallGraphBuilder.html#a77ccca4e81eb1199c89d75e1b2d21af6">callgraph</a>);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(cg &amp;&amp; <span class="stringliteral">&quot;not a thread callgraph?&quot;</span>);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html">ThreadAPI</a>* tdAPI = <a class="code" href="classSVF_1_1ThreadAPI.html#a6852ff1eedc1117e95e45e4a90c80d53">ThreadAPI::getThreadAPI</a>();</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#ab86e221a93bec67a2ecb7cb53315f569">SVFModule::llvm_const_iterator</a> fi = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a648542aa5c4b487ad5aa12a39d15e951">llvmFunBegin</a>(), efi = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#af38d0f831967d6d8391a4c84e58d6519">llvmFunEnd</a>(); fi != efi; ++fi)</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fun = *fi;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a032e8478a7b6a8bb0b7755c98a7bce91">const_inst_iterator</a> II = inst_begin(*fun), E = inst_end(*fun); II != E; ++II)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = &amp;*II;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (tdAPI-&gt;<a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(inst))</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = <a class="code" href="classSVF_1_1CallGraphBuilder.html#ab3e0b47be010e25c093953e54602d211">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; cg-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a6e2ebab64fd01e40e7100162fe544b04">addForksite</a>(cs);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* forkee = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&gt;(tdAPI-&gt;<a class="code" href="classSVF_1_1ThreadAPI.html#a7ddc0c71aeae315af21972a4905b3456">getForkedFun</a>(inst));</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">if</span> (forkee)</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; cg-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a92e5a3154a98e12bdbbe4e0d39e62b3e">addDirectForkEdge</a>(cs);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// indirect call to the start routine function</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; cg-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a29d3e4d720f61b4c29fee9691cedff96">addThreadForkEdgeSetMap</a>(cs,<span class="keyword">nullptr</span>);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tdAPI-&gt;<a class="code" href="classSVF_1_1ThreadAPI.html#a86d75b7e3570337e484397e60f97d88e">isHareParFor</a>(inst))</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = <a class="code" href="classSVF_1_1CallGraphBuilder.html#ab3e0b47be010e25c093953e54602d211">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; cg-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a9daa0817e1f88a2478d7094646c72e13">addParForSite</a>(cs);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* taskFunc = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&gt;(tdAPI-&gt;<a class="code" href="classSVF_1_1ThreadAPI.html#afeedd6e518af76fa9e7142af8899b2f5">getTaskFuncAtHareParForSite</a>(inst));</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span> (taskFunc)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; cg-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a700ec3fd1c9d89a7176e05b2f1949aef">addDirectParForEdge</a>(cs);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">// indirect call to the start routine function</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">else</span></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; cg-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a845258d0d19de3dda573521a34dbf705">addHareParForEdgeSetMap</a>(cs,<span class="keyword">nullptr</span>);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">// record join sites</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#ab86e221a93bec67a2ecb7cb53315f569">SVFModule::llvm_const_iterator</a> fi = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a648542aa5c4b487ad5aa12a39d15e951">llvmFunBegin</a>(), efi = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#af38d0f831967d6d8391a4c84e58d6519">llvmFunEnd</a>(); fi != efi; ++fi)</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fun = *fi;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a032e8478a7b6a8bb0b7755c98a7bce91">const_inst_iterator</a> II = inst_begin(*fun), E = inst_end(*fun); II != E; ++II)</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = &amp;*II;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">if</span> (tdAPI-&gt;<a class="code" href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44">isTDJoin</a>(inst))</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"> 125</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = <a class="code" href="classSVF_1_1CallGraphBuilder.html#ab3e0b47be010e25c093953e54602d211">icfg</a>-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; cg-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#ae72e4e29bfda892f059f719454f6fcd2">addJoinsite</a>(cs);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">return</span> cg;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFModule_html_af38d0f831967d6d8391a4c84e58d6519"><div class="ttname"><a href="classSVF_1_1SVFModule.html#af38d0f831967d6d8391a4c84e58d6519">SVF::SVFModule::llvmFunEnd</a></div><div class="ttdeci">llvm_iterator llvmFunEnd()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00143">SVFModule.h:143</a></div></div>
170
170
  <div class="ttc" id="classSVF_1_1ThreadAPI_html_a9da276dca5092d18f4f22d32e5ab6cdf"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">SVF::ThreadAPI::isTDFork</a></div><div class="ttdeci">bool isTDFork(const Instruction *inst) const</div><div class="ttdoc">Return true if this call create a new thread. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00120">ThreadAPI.h:120</a></div></div>
171
171
  <div class="ttc" id="namespaceSVF_html_a032e8478a7b6a8bb0b7755c98a7bce91"><div class="ttname"><a href="namespaceSVF.html#a032e8478a7b6a8bb0b7755c98a7bce91">SVF::const_inst_iterator</a></div><div class="ttdeci">llvm::const_inst_iterator const_inst_iterator</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00211">BasicTypes.h:211</a></div></div>
172
172
  <div class="ttc" id="classSVF_1_1ICFG_html_a7d10e8a815c836a070d35850f817a18c"><div class="ttname"><a href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">SVF::ICFG::getCallBlockNode</a></div><div class="ttdeci">CallBlockNode * getCallBlockNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00197">ICFG.cpp:197</a></div></div>
173
173
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
174
174
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a92e5a3154a98e12bdbbe4e0d39e62b3e"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a92e5a3154a98e12bdbbe4e0d39e62b3e">SVF::ThreadCallGraph::addDirectForkEdge</a></div><div class="ttdeci">void addDirectForkEdge(const CallBlockNode *cs)</div><div class="ttdoc">Add direct/indirect thread fork edges. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8cpp_source.html#l00147">ThreadCallGraph.cpp:147</a></div></div>
175
- <div class="ttc" id="classSVF_1_1SVFModule_html_a648542aa5c4b487ad5aa12a39d15e951"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a648542aa5c4b487ad5aa12a39d15e951">SVF::SVFModule::llvmFunBegin</a></div><div class="ttdeci">llvm_iterator llvmFunBegin()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00119">SVFModule.h:119</a></div></div>
175
+ <div class="ttc" id="classSVF_1_1SVFModule_html_a648542aa5c4b487ad5aa12a39d15e951"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a648542aa5c4b487ad5aa12a39d15e951">SVF::SVFModule::llvmFunBegin</a></div><div class="ttdeci">llvm_iterator llvmFunBegin()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00135">SVFModule.h:135</a></div></div>
176
176
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_ae72e4e29bfda892f059f719454f6fcd2"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#ae72e4e29bfda892f059f719454f6fcd2">SVF::ThreadCallGraph::addJoinsite</a></div><div class="ttdeci">bool addJoinsite(const CallBlockNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00334">ThreadCallGraph.h:334</a></div></div>
177
177
  <div class="ttc" id="classSVF_1_1ThreadAPI_html_a7ddc0c71aeae315af21972a4905b3456"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a7ddc0c71aeae315af21972a4905b3456">SVF::ThreadAPI::getForkedFun</a></div><div class="ttdeci">const Value * getForkedFun(const Instruction *inst) const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00159">ThreadAPI.h:159</a></div></div>
178
178
  <div class="ttc" id="classSVF_1_1ThreadAPI_html_afeedd6e518af76fa9e7142af8899b2f5"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#afeedd6e518af76fa9e7142af8899b2f5">SVF::ThreadAPI::getTaskFuncAtHareParForSite</a></div><div class="ttdeci">const Value * getTaskFuncAtHareParForSite(const Instruction *inst) const</div><div class="ttdoc">Get the task function (i.e., the 5th parameter) of the hare_parallel_for call. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00186">ThreadAPI.h:186</a></div></div>
179
179
  <div class="ttc" id="namespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00076">BasicTypes.h:76</a></div></div>
180
180
  <div class="ttc" id="classSVF_1_1CallGraphBuilder_html_a77ccca4e81eb1199c89d75e1b2d21af6"><div class="ttname"><a href="classSVF_1_1CallGraphBuilder.html#a77ccca4e81eb1199c89d75e1b2d21af6">SVF::CallGraphBuilder::callgraph</a></div><div class="ttdeci">PTACallGraph * callgraph</div><div class="ttdef"><b>Definition:</b> <a href="CallGraphBuilder_8h_source.html#l00046">CallGraphBuilder.h:46</a></div></div>
181
181
  <div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00079">BasicTypes.h:79</a></div></div>
182
- <div class="ttc" id="classSVF_1_1SVFModule_html_ab86e221a93bec67a2ecb7cb53315f569"><div class="ttname"><a href="classSVF_1_1SVFModule.html#ab86e221a93bec67a2ecb7cb53315f569">SVF::SVFModule::llvm_const_iterator</a></div><div class="ttdeci">LLVMFunctionSetType::const_iterator llvm_const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00051">SVFModule.h:51</a></div></div>
182
+ <div class="ttc" id="classSVF_1_1SVFModule_html_ab86e221a93bec67a2ecb7cb53315f569"><div class="ttname"><a href="classSVF_1_1SVFModule.html#ab86e221a93bec67a2ecb7cb53315f569">SVF::SVFModule::llvm_const_iterator</a></div><div class="ttdeci">LLVMFunctionSetType::const_iterator llvm_const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00054">SVFModule.h:54</a></div></div>
183
183
  <div class="ttc" id="classSVF_1_1ThreadAPI_html"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html">SVF::ThreadAPI</a></div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00043">ThreadAPI.h:43</a></div></div>
184
184
  <div class="ttc" id="classSVF_1_1ThreadAPI_html_a6852ff1eedc1117e95e45e4a90c80d53"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a6852ff1eedc1117e95e45e4a90c80d53">SVF::ThreadAPI::getThreadAPI</a></div><div class="ttdeci">static ThreadAPI * getThreadAPI()</div><div class="ttdoc">Return a static reference. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00102">ThreadAPI.h:102</a></div></div>
185
185
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html">SVF::ThreadCallGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00158">ThreadCallGraph.h:158</a></div></div>
@@ -913,17 +913,17 @@ Additional Inherited Members</h2></td></tr>
913
913
  <p>Statistics of CHA and callgraph. </p>
914
914
 
915
915
  <p class="definition">Definition at line <a class="el" href="TypeAnalysis_8cpp_source.html#l00097">97</a> of file <a class="el" href="TypeAnalysis_8cpp_source.html">TypeAnalysis.cpp</a>.</p>
916
- <div class="fragment"><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;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CHGraph.html">CHGraph</a> *<a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a> = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1CHGraph.html">CHGraph</a>&gt;(<a class="code" href="classSVF_1_1PointerAnalysis.html#ae2cc7cd0803dbd90639140e71b06b1b5">getCHGraph</a>());</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (chgraph == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#af0f447732c67402037a86ea29006efc2">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;dumpCHAStats only implemented for standard CHGraph.\n&quot;</span>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> pure_abstract_class_num = 0,</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; multi_inheritance_class_num = 0;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">CHGraph::const_iterator</a> it = chgraph-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = chgraph-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>();</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *node = it-&gt;second;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;class &quot;</span> &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">getName</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1CHNode.html#a268ccdfb486cc2efa8581ee7a3b5af39">isPureAbstract</a>())</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; pure_abstract_class_num++;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1CHNode.html#a224a394537fae62e64cf62a0d4fdd430">isMultiInheritance</a>())</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; multi_inheritance_class_num++;</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;class_num:\t&quot;</span> &lt;&lt; chgraph-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>() &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;pure_abstract_class_num:\t&quot;</span> &lt;&lt; pure_abstract_class_num &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;multi_inheritance_class_num:\t&quot;</span> &lt;&lt; multi_inheritance_class_num &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="comment"> * count the following info:</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="comment"> * vtblnum</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment"> * total vfunction</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment"> * vtbl max vfunction</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment"> * pure abstract class</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> vtblnum = 0,</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; vfunc_total = 0,</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; vtbl_max = 0,</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; pure_abstract = 0;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; set&lt;const SVFFunction*&gt; allVirtualFunctions;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">CHGraph::const_iterator</a> it = chgraph-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = chgraph-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>();</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *node = it-&gt;second;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1CHNode.html#a268ccdfb486cc2efa8581ee7a3b5af39">isPureAbstract</a>())</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; pure_abstract++;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> vfuncs_size = 0;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keyword">const</span> vector&lt;CHNode::FuncVector&gt;&amp; vecs = node-&gt;<a class="code" href="classSVF_1_1CHNode.html#a5df1cf4d51bf3406d188c96bc9aae0af">getVirtualFunctionVectors</a>();</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">for</span> (vector&lt;CHNode::FuncVector&gt;::const_iterator vit = vecs.begin(),</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; veit = vecs.end(); vit != veit; ++vit)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; vfuncs_size += (*vit).size();</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">for</span> (vector&lt;const SVFFunction*&gt;::const_iterator fit = (*vit).begin(),</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; feit = (*vit).end(); fit != feit; ++fit)</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = *fit;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; allVirtualFunctions.insert(func);</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="keywordflow">if</span> (vfuncs_size &gt; 0)</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; vtblnum++;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">if</span> (vfuncs_size &gt; vtbl_max)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; vtbl_max = vfuncs_size;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; vfunc_total = allVirtualFunctions.size();</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;vtblnum:\t&quot;</span> &lt;&lt; vtblnum &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;vtbl_average:\t&quot;</span> &lt;&lt; (double)(vfunc_total)/vtblnum &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;vtbl_max:\t&quot;</span> &lt;&lt; vtbl_max &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
916
+ <div class="fragment"><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;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CHGraph.html">CHGraph</a> *<a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a> = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1CHGraph.html">CHGraph</a>&gt;(<a class="code" href="classSVF_1_1PointerAnalysis.html#ae2cc7cd0803dbd90639140e71b06b1b5">getCHGraph</a>());</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (chgraph == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#af0f447732c67402037a86ea29006efc2">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;dumpCHAStats only implemented for standard CHGraph.\n&quot;</span>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> pure_abstract_class_num = 0,</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; multi_inheritance_class_num = 0;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">CHGraph::const_iterator</a> it = chgraph-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = chgraph-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>();</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *node = it-&gt;second;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;class &quot;</span> &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">getName</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1CHNode.html#a268ccdfb486cc2efa8581ee7a3b5af39">isPureAbstract</a>())</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; pure_abstract_class_num++;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1CHNode.html#a224a394537fae62e64cf62a0d4fdd430">isMultiInheritance</a>())</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; multi_inheritance_class_num++;</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;class_num:\t&quot;</span> &lt;&lt; chgraph-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>() &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;pure_abstract_class_num:\t&quot;</span> &lt;&lt; pure_abstract_class_num &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;multi_inheritance_class_num:\t&quot;</span> &lt;&lt; multi_inheritance_class_num &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="comment"> * count the following info:</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="comment"> * vtblnum</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment"> * total vfunction</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment"> * vtbl max vfunction</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment"> * pure abstract class</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> vtblnum = 0,</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; vfunc_total = 0,</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; vtbl_max = 0,</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; pure_abstract = 0;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; set&lt;const SVFFunction*&gt; allVirtualFunctions;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">CHGraph::const_iterator</a> it = chgraph-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = chgraph-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>();</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *node = it-&gt;second;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1CHNode.html#a268ccdfb486cc2efa8581ee7a3b5af39">isPureAbstract</a>())</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; pure_abstract++;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> vfuncs_size = 0;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keyword">const</span> vector&lt;CHNode::FuncVector&gt;&amp; vecs = node-&gt;<a class="code" href="classSVF_1_1CHNode.html#a5df1cf4d51bf3406d188c96bc9aae0af">getVirtualFunctionVectors</a>();</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">for</span> (vector&lt;CHNode::FuncVector&gt;::const_iterator vit = vecs.begin(),</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; veit = vecs.end(); vit != veit; ++vit)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; vfuncs_size += (*vit).size();</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">for</span> (vector&lt;const SVFFunction*&gt;::const_iterator fit = (*vit).begin(),</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; feit = (*vit).end(); fit != feit; ++fit)</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = *fit;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; allVirtualFunctions.insert(func);</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="keywordflow">if</span> (vfuncs_size &gt; 0)</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; vtblnum++;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">if</span> (vfuncs_size &gt; vtbl_max)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; vtbl_max = vfuncs_size;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; vfunc_total = allVirtualFunctions.size();</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;vtblnum:\t&quot;</span> &lt;&lt; vtblnum &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;vtbl_average:\t&quot;</span> &lt;&lt; (double)(vfunc_total)/vtblnum &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;vtbl_max:\t&quot;</span> &lt;&lt; vtbl_max &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00361">GenericGraph.h:361</a></div></div>
917
917
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a251638a947815a8ff91a507486cadfcd"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">SVF::PointerAnalysis::chgraph</a></div><div class="ttdeci">static CommonCHGraph * chgraph</div><div class="ttdoc">CHGraph. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00163">PointerAnalysis.h:163</a></div></div>
918
- <div class="ttc" id="classSVF_1_1GenericGraph_html_a8c8d16036008f87c7811586047599858"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">SVF::GenericGraph::getTotalNodeNum</a></div><div class="ttdeci">u32_t getTotalNodeNum() const</div><div class="ttdoc">Get total number of node/edge. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00417">GenericGraph.h:417</a></div></div>
918
+ <div class="ttc" id="classSVF_1_1GenericGraph_html_a8c8d16036008f87c7811586047599858"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">SVF::GenericGraph::getTotalNodeNum</a></div><div class="ttdeci">u32_t getTotalNodeNum() const</div><div class="ttdoc">Get total number of node/edge. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00414">GenericGraph.h:414</a></div></div>
919
919
  <div class="ttc" id="classSVF_1_1CHNode_html"><div class="ttname"><a href="classSVF_1_1CHNode.html">SVF::CHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00072">CHG.h:72</a></div></div>
920
920
  <div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00233">BasicTypes.h:233</a></div></div>
921
921
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af0f447732c67402037a86ea29006efc2"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af0f447732c67402037a86ea29006efc2">SVF::SVFUtil::errs</a></div><div class="ttdeci">raw_ostream &amp; errs()</div><div class="ttdoc">Overwrite llvm::errs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00055">SVFUtil.h:55</a></div></div>
922
922
  <div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00077">SVFBasicTypes.h:77</a></div></div>
923
- <div class="ttc" id="classSVF_1_1GenericGraph_html_a5dfa3f178d4abf37177d0d74ff4c6a97"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">SVF::GenericGraph::const_iterator</a></div><div class="ttdeci">IDToNodeMapTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00338">GenericGraph.h:338</a></div></div>
923
+ <div class="ttc" id="classSVF_1_1GenericGraph_html_a5dfa3f178d4abf37177d0d74ff4c6a97"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">SVF::GenericGraph::const_iterator</a></div><div class="ttdeci">IDToNodeMapTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00339">GenericGraph.h:339</a></div></div>
924
924
  <div class="ttc" id="classSVF_1_1CHGraph_html"><div class="ttname"><a href="classSVF_1_1CHGraph.html">SVF::CHGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00176">CHG.h:176</a></div></div>
925
925
  <div class="ttc" id="classSVF_1_1CHNode_html_a224a394537fae62e64cf62a0d4fdd430"><div class="ttname"><a href="classSVF_1_1CHNode.html#a224a394537fae62e64cf62a0d4fdd430">SVF::CHNode::isMultiInheritance</a></div><div class="ttdeci">bool isMultiInheritance() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00125">CHG.h:125</a></div></div>
926
- <div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00369">GenericGraph.h:369</a></div></div>
926
+ <div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
927
927
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_ae2cc7cd0803dbd90639140e71b06b1b5"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ae2cc7cd0803dbd90639140e71b06b1b5">SVF::PointerAnalysis::getCHGraph</a></div><div class="ttdeci">CommonCHGraph * getCHGraph() const</div><div class="ttdoc">get CHGraph </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00447">PointerAnalysis.h:447</a></div></div>
928
928
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
929
929
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
@@ -1144,12 +1144,12 @@ Private Attributes</h2></td></tr>
1144
1144
  <p class="definition">Definition at line <a class="el" href="TypeBasedHeapCloning_8cpp_source.html#l00271">271</a> of file <a class="el" href="TypeBasedHeapCloning_8cpp_source.html">TypeBasedHeapCloning.cpp</a>.</p>
1145
1145
  <div class="fragment"><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;{</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a> &amp;&amp; <span class="stringliteral">&quot;TBHC: DCHG not set!&quot;</span>);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;pPt = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(p);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="comment">// The points-to set we will populate in the loop to fill pPt.</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pNewPt;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;filterSet = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">getFilterSet</a>(loc);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pPt)</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; {</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="comment">// If it&#39;s been filtered before, it&#39;ll be filtered again.</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">if</span> (filterSet.<a class="code" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">test</a>(o)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *obj = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6b1b4570c4f674340cb9f3fcc8f3c4eb">ppag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(o);</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj &amp;&amp; <span class="stringliteral">&quot;TBHC: pointee object does not exist in PAG?&quot;</span>);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *tp = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(o); <span class="comment">// tp is t&#39;</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="comment">// When an object is field-insensitive, we can&#39;t filter on any of the fields&#39; types.</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="comment">// i.e. a pointer of the field type can safely access an object of the base/struct</span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="comment">// type if that object is field-insensitive.</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordtype">bool</span> fieldInsensitive = <span class="keyword">false</span>;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; std::vector&lt;const DIType *&gt; fieldTypes;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ObjPN.html">ObjPN</a> *obj = SVFUtil::dyn_cast&lt;ObjPN&gt;(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6b1b4570c4f674340cb9f3fcc8f3c4eb">ppag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(o)))</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; {</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; fieldInsensitive = obj-&gt;getMemObj()-&gt;isFieldInsensitive();</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">if</span> (tp != <span class="keyword">nullptr</span> &amp;&amp; (tp-&gt;getTag() == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; || tp-&gt;getTag() == dwarf::DW_TAG_class_type))</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; fieldTypes = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">getFieldTypes</a>(tp);</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; }</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const DIType *&gt;</a> &amp;aggs = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">isAgg</a>(tp)</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; ? <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#a159e158c794fff115d5642b85963f43b">getAggs</a>(tp) : <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const DIType *&gt;</a>();</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> prop;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordtype">bool</span> filter = <span class="keyword">false</span>;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">if</span> (tp == <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a>)</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; {</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="comment">// o is uninitialised.</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="comment">// GEP objects should never be uninitialised; type assigned at creation.</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a724cdfa6fbf6b2b401332ea83265c4c2">isGep</a>(obj) &amp;&amp; <span class="stringliteral">&quot;TBHC: GEP object is untyped!&quot;</span>);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; prop = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">cloneObject</a>(o, tildet, <span class="keyword">false</span>);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a4c658be1ade99ad1e848cd80332e38ce">numInit</a>;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjPN&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a4d6fc7852fc4bfe1d7ba3c0b8602bc8a">numSGInit</a>;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fieldInsensitive &amp;&amp; tp &amp;&amp; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#af0534356b4a8c68507e1237f1d7a8c11">isFieldOf</a>(tildet, tp))</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; {</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="comment">// Field-insensitive object but the instruction is operating on a field.</span></div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; prop = o;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad971bec1a044bbb979b96b0d91278afd">numTBWU</a>;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjPN&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#afca6afa06a1072e7a452ed42bcd666d3">numSGTBWU</a>;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; }</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (gep &amp;&amp; aggs.find(tildet) != aggs.end())</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; {</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="comment">// SVF treats two consecutive GEPs as children to the same load/store.</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="comment">// Special case for aggregates.</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="comment">// SVF will transform (for example)</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="comment">// `1: s = get struct element X from array a; 2: f = get field of struct Y from s;`</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="comment">// to `1: s = get struct element X from array a; 2: f = get field of struct Y from a;`</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="comment">// so we want the second instruction to be operating on an object of type</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="comment">// &#39;Struct S&#39;, not &#39;Array of S&#39;.</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; prop = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">cloneObject</a>(o, tildet, <span class="keyword">false</span>);</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a891a5873205bb98ad494a1c07231dc8a">numAgg</a>;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjPN&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a28653c7757fc31c4b8c1b31ace17eb50">numSGAgg</a>;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638">isBase</a>(tp, tildet) &amp;&amp; tp != tildet</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; &amp;&amp; (reuse || <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-&gt;<a class="code" href="classSVF_1_1DCHGraph.html#a2b2dbc52089696854a8339f2e83fc333">isFirstField</a>(tp, tildet) || (!reuse &amp;&amp; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o))))</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; {</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="comment">// Downcast.</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="comment">// One of three conditions:</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="comment">// - !reuse &amp;&amp; heap: because downcasts should not happen to stack/globals.</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="comment">// - isFirstField because ^ can happen because when we take the field of a</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="comment">// struct that is a struct, we get its first field, then it may downcast</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="comment">// back to the struct at another GEP.</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="comment">// TODO: this can probably be solved more cleanly.</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="comment">// - reuse: because it can happen to stack/heap objects.</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; prop = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">cloneObject</a>(o, tildet, reuse);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af5cf059dea30a0b422321e3a792ea447">numTBSSU</a>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjPN&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a86a51362c35c4a67fc1d4af655504493">numSGTBSSU</a>;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; }</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638">isBase</a>(tildet, tp))</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">// Upcast.</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; prop = o;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad971bec1a044bbb979b96b0d91278afd">numTBWU</a>;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjPN&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#afca6afa06a1072e7a452ed42bcd666d3">numSGTBWU</a>;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tildet != tp &amp;&amp; reuse)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="comment">// Reuse.</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; prop = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">cloneObject</a>(o, tildet, <span class="keyword">true</span>);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0b14eb60ddc73654bec24cd8142e447b">numReuse</a>;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjPN&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac44c7746d774af420ff2bc5ce98f5add">numSGReuse</a>;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; }</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; {</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="comment">// Some spurious objects will be filtered.</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; filter = <span class="keyword">true</span>;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; prop = o;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ab3fa2223ad8d8b23d78aa02892f0be2c">numTBSU</a>;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(o) &amp;&amp; !SVFUtil::isa&lt;DummyObjPN&gt;(obj)) ++<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a51d2baff54d05cba59fa270c32cce87c">numSGTBSU</a>;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">if</span> (prop != o)</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="comment">// If we cloned, we want to keep o in p&#39;s PTS but filter it (ignore it later).</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; pNewPt.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; filterSet.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="comment">// TODO: hack, sound but imprecise and unclean.</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="comment">// In the aggs case there is a difference between it being good for</span></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="comment">// arrays and structs. For now, just propagate both the clone and the original</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="comment">// object till a cleaner solution is found.</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">if</span> (gep &amp;&amp; aggs.find(tildet) != aggs.end())</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; filterSet.<a class="code" href="classSVF_1_1PointsTo.html#a1ef805e714cfc29f0f3fa56c5ee964f6">reset</a>(o);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; pNewPt.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(prop);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">if</span> (filter)</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; {</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; filterSet.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; }</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">if</span> (pPt != pNewPt)</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="comment">// Seems fast enough to perform in the naive way.</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#afdb10c2cce4935156566ea1c2daf9ea9">clearFullPts</a>(p);</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a7d3f7d27c9491b099a623ba03b1c4732">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae7073c07bfd7912f888d54d4652c7cc2">unionPts</a>(p, pNewPt);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; }</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;}</div><div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a4d6fc7852fc4bfe1d7ba3c0b8602bc8a"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a4d6fc7852fc4bfe1d7ba3c0b8602bc8a">SVF::TypeBasedHeapCloning::numSGInit</a></div><div class="ttdeci">unsigned numSGInit</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00180">TypeBasedHeapCloning.h:180</a></div></div>
1146
1146
  <div class="ttc" id="classSVF_1_1DCHGraph_html_ae9a0007299178912e2568dc7158d6824"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">SVF::DCHGraph::getFieldTypes</a></div><div class="ttdeci">const std::vector&lt; const DIType * &gt; &amp; getFieldTypes(const DIType *base)</div><div class="ttdoc">Returns a vector of the types of all fields in base. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00327">DCHG.h:327</a></div></div>
1147
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_afdb10c2cce4935156566ea1c2daf9ea9"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#afdb10c2cce4935156566ea1c2daf9ea9">SVF::BVDataPTAImpl::clearFullPts</a></div><div class="ttdeci">virtual void clearFullPts(NodeID id)</div><div class="ttdoc">Clear points-to set of id. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00115">PointerAnalysisImpl.h:115</a></div></div>
1147
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_afdb10c2cce4935156566ea1c2daf9ea9"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#afdb10c2cce4935156566ea1c2daf9ea9">SVF::BVDataPTAImpl::clearFullPts</a></div><div class="ttdeci">virtual void clearFullPts(NodeID id)</div><div class="ttdoc">Clear points-to set of id. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00116">PointerAnalysisImpl.h:116</a></div></div>
1148
1148
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
1149
1149
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
1150
1150
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a28653c7757fc31c4b8c1b31ace17eb50"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a28653c7757fc31c4b8c1b31ace17eb50">SVF::TypeBasedHeapCloning::numSGAgg</a></div><div class="ttdeci">unsigned numSGAgg</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00185">TypeBasedHeapCloning.h:185</a></div></div>
1151
1151
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ab3fa2223ad8d8b23d78aa02892f0be2c"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ab3fa2223ad8d8b23d78aa02892f0be2c">SVF::TypeBasedHeapCloning::numTBSU</a></div><div class="ttdeci">unsigned numTBSU</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00175">TypeBasedHeapCloning.h:175</a></div></div>
1152
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ae7073c07bfd7912f888d54d4652c7cc2"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ae7073c07bfd7912f888d54d4652c7cc2">SVF::BVDataPTAImpl::unionPts</a></div><div class="ttdeci">virtual bool unionPts(NodeID id, const PointsTo &amp;target)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00123">PointerAnalysisImpl.h:123</a></div></div>
1152
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ae7073c07bfd7912f888d54d4652c7cc2"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ae7073c07bfd7912f888d54d4652c7cc2">SVF::BVDataPTAImpl::unionPts</a></div><div class="ttdeci">virtual bool unionPts(NodeID id, const PointsTo &amp;target)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00124">PointerAnalysisImpl.h:124</a></div></div>
1153
1153
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a159e158c794fff115d5642b85963f43b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a159e158c794fff115d5642b85963f43b">SVF::DCHGraph::getAggs</a></div><div class="ttdeci">const Set&lt; const DIType * &gt; &amp; getAggs(const DIType *base)</div><div class="ttdoc">Returns all the aggregates contained (transitively) in base. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00343">DCHG.h:343</a></div></div>
1154
1154
  <div class="ttc" id="classSVF_1_1PointsTo_html_af61271fefa574c39f405fdfee59a8b3f"><div class="ttname"><a href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">SVF::PointsTo::test</a></div><div class="ttdeci">bool test(u32_t n) const</div><div class="ttdoc">Returns true if n is in this set. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00125">PointsTo.cpp:125</a></div></div>
1155
1155
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a6363466e64eee4405806568d26206d2e"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">SVF::TypeBasedHeapCloning::undefType</a></div><div class="ttdeci">static const DIType * undefType</div><div class="ttdoc">The undefined type (•); void. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00027">TypeBasedHeapCloning.h:27</a></div></div>
@@ -1160,7 +1160,7 @@ Private Attributes</h2></td></tr>
1160
1160
  <div class="ttc" id="classSVF_1_1PAG_html_a3aa1c92eb8a6fab72996964de80f19ac"><div class="ttname"><a href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">SVF::PAG::getPAGNode</a></div><div class="ttdeci">PAGNode * getPAGNode(NodeID id) const</div><div class="ttdoc">Get PAGNode ID. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00539">PAG.h:539</a></div></div>
1161
1161
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a0b14eb60ddc73654bec24cd8142e447b"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a0b14eb60ddc73654bec24cd8142e447b">SVF::TypeBasedHeapCloning::numReuse</a></div><div class="ttdeci">unsigned numReuse</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00176">TypeBasedHeapCloning.h:176</a></div></div>
1162
1162
  <div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set&lt; Key, Hash, KeyEqual, Allocator &gt; Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00095">SVFBasicTypes.h:95</a></div></div>
1163
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aee289e298e421448caaa604b7eb34fcb"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00098">PointerAnalysisImpl.h:98</a></div></div>
1163
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aee289e298e421448caaa604b7eb34fcb"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00099">PointerAnalysisImpl.h:99</a></div></div>
1164
1164
  <div class="ttc" id="classSVF_1_1DCHGraph_html_af0534356b4a8c68507e1237f1d7a8c11"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#af0534356b4a8c68507e1237f1d7a8c11">SVF::DCHGraph::isFieldOf</a></div><div class="ttdeci">virtual bool isFieldOf(const DIType *f, const DIType *b)</div><div class="ttdoc">Returns true if f is a field of b (fields from getFieldTypes). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00677">DCHG.cpp:677</a></div></div>
1165
1165
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a11c3d1b7f10e4aad2525d428f5855db5"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a11c3d1b7f10e4aad2525d428f5855db5">SVF::TypeBasedHeapCloning::cloneObject</a></div><div class="ttdeci">NodeID cloneObject(NodeID o, const DIType *type, bool reuse)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00411">TypeBasedHeapCloning.cpp:411</a></div></div>
1166
1166
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ad971bec1a044bbb979b96b0d91278afd"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ad971bec1a044bbb979b96b0d91278afd">SVF::TypeBasedHeapCloning::numTBWU</a></div><div class="ttdeci">unsigned numTBWU</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00173">TypeBasedHeapCloning.h:173</a></div></div>
@@ -1557,7 +1557,7 @@ Private Attributes</h2></td></tr>
1557
1557
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a13ce6b930a35877f17bffd4b89e22654"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a13ce6b930a35877f17bffd4b89e22654">SVF::PointerAnalysis::aliasTestMayAliasMangled</a></div><div class="ttdeci">static const std::string aliasTestMayAliasMangled</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00118">PointerAnalysis.h:118</a></div></div>
1558
1558
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a18347e41bc66b16e3f42c7c52811ad42"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a18347e41bc66b16e3f42c7c52811ad42">SVF::PointerAnalysis::aliasTestFailNoAlias</a></div><div class="ttdeci">static const std::string aliasTestFailNoAlias</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00127">PointerAnalysis.h:127</a></div></div>
1559
1559
  <div class="ttc" id="namespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00076">BasicTypes.h:76</a></div></div>
1560
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aee289e298e421448caaa604b7eb34fcb"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00098">PointerAnalysisImpl.h:98</a></div></div>
1560
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aee289e298e421448caaa604b7eb34fcb"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00099">PointerAnalysisImpl.h:99</a></div></div>
1561
1561
  <div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00079">BasicTypes.h:79</a></div></div>
1562
1562
  <div class="ttc" id="classSVF_1_1PointsTo_html_ac4688413177b49b37dbbfd3ed188d59b"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">SVF::PointsTo::empty</a></div><div class="ttdeci">bool empty(void) const</div><div class="ttdoc">Returns true if set is empty. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00094">PointsTo.cpp:94</a></div></div>
1563
1563
  <div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_ab1467e374b238b0f68d3fdd8f3ef6596"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#ab1467e374b238b0f68d3fdd8f3ef6596">SVF::TypeBasedHeapCloning::mangledDerefFnName</a></div><div class="ttdeci">static const std::string mangledDerefFnName</div><div class="ttdoc">deref function (mangled) for TBHC alias tests. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00036">TypeBasedHeapCloning.h:36</a></div></div>
@@ -700,7 +700,7 @@ Private Attributes</h2></td></tr>
700
700
  <div class="ttc" id="namespaceSVF_html_a6ec0236303089a01fd9da36a8bb84e0a"><div class="ttname"><a href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">SVF::FunctionType</a></div><div class="ttdeci">llvm::FunctionType FunctionType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00109">BasicTypes.h:109</a></div></div>
701
701
  <div class="ttc" id="namespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00075">BasicTypes.h:75</a></div></div>
702
702
  <div class="ttc" id="namespaceSVF_html_aa962cc1d782cc46553251e96b64a754b"><div class="ttname"><a href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">SVF::PointerType</a></div><div class="ttdeci">llvm::PointerType PointerType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00108">BasicTypes.h:108</a></div></div>
703
- <div class="ttc" id="classSVF_1_1GenericGraph_html_a5dfa3f178d4abf37177d0d74ff4c6a97"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">SVF::GenericGraph&lt; PAGNode, PAGEdge &gt;::const_iterator</a></div><div class="ttdeci">IDToNodeMapTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00338">GenericGraph.h:338</a></div></div>
703
+ <div class="ttc" id="classSVF_1_1GenericGraph_html_a5dfa3f178d4abf37177d0d74ff4c6a97"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">SVF::GenericGraph&lt; PAGNode, PAGEdge &gt;::const_iterator</a></div><div class="ttdeci">IDToNodeMapTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00339">GenericGraph.h:339</a></div></div>
704
704
  <div class="ttc" id="classSVF_1_1TypeSystem_html_a8b14cbba82ee2608b1ac6007e003e93f"><div class="ttname"><a href="classSVF_1_1TypeSystem.html#a8b14cbba82ee2608b1ac6007e003e93f">SVF::TypeSystem::addVarForType</a></div><div class="ttdeci">void addVarForType(NodeID var, const PTAType &amp;type)</div><div class="ttdef"><b>Definition:</b> <a href="PTAType_8h_source.html#l00268">PTAType.h:268</a></div></div>
705
705
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
706
706
  <div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
@@ -322,7 +322,7 @@ Additional Inherited Members</h2></td></tr>
322
322
 
323
323
  <p class="definition">Definition at line <a class="el" href="PAGEdge_8h_source.html#l00348">348</a> of file <a class="el" href="PAGEdge_8h_source.html">PAGEdge.h</a>.</p>
324
324
  <div class="fragment"><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; : <a class="code" href="classSVF_1_1PAGEdge.html#ab686138c420a0b03cf8f1c1dff044318">PAGEdge</a>(s,d,<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6afad5f112c36b6e35baf38054c14ae597">PAGEdge::UnaryOp</a>)</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; {</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; }</div><div class="ttc" id="classSVF_1_1PAGEdge_html_a79080505b4744aa8806b55215ac2b0f6afad5f112c36b6e35baf38054c14ae597"><div class="ttname"><a href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6afad5f112c36b6e35baf38054c14ae597">SVF::PAGEdge::UnaryOp</a></div><div class="ttdef"><b>Definition:</b> <a href="PAGEdge_8h_source.html#l00056">PAGEdge.h:56</a></div></div>
325
- <div class="ttc" id="classSVF_1_1PAGEdge_html_ab686138c420a0b03cf8f1c1dff044318"><div class="ttname"><a href="classSVF_1_1PAGEdge.html#ab686138c420a0b03cf8f1c1dff044318">SVF::PAGEdge::PAGEdge</a></div><div class="ttdeci">PAGEdge(PAGNode *s, PAGNode *d, GEdgeFlag k)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8cpp_source.html#l01002">PAG.cpp:1002</a></div></div>
325
+ <div class="ttc" id="classSVF_1_1PAGEdge_html_ab686138c420a0b03cf8f1c1dff044318"><div class="ttname"><a href="classSVF_1_1PAGEdge.html#ab686138c420a0b03cf8f1c1dff044318">SVF::PAGEdge::PAGEdge</a></div><div class="ttdeci">PAGEdge(PAGNode *s, PAGNode *d, GEdgeFlag k)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8cpp_source.html#l00995">PAG.cpp:995</a></div></div>
326
326
  </div><!-- fragment -->
327
327
  </div>
328
328
  </div>
@@ -743,7 +743,7 @@ Private Member Functions</h2></td></tr>
743
743
  <div class="ttc" id="classSVF_1_1UnaryOPVFGNode_html_ab63ddaa05181f2c60ca7a001001a908d"><div class="ttname"><a href="classSVF_1_1UnaryOPVFGNode.html#ab63ddaa05181f2c60ca7a001001a908d">SVF::UnaryOPVFGNode::opVerBegin</a></div><div class="ttdeci">OPVers::const_iterator opVerBegin() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00517">VFGNode.h:517</a></div></div>
744
744
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a7486fd8e5350879ed1cbd835c0d4e191"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">SVF::SVFUtil::value2String</a></div><div class="ttdeci">const std::string value2String(const Value *value)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00388">SVFUtil.cpp:388</a></div></div>
745
745
  <div class="ttc" id="classSVF_1_1PAGNode_html_a071f592f2b811c136db5e05a6169aa99"><div class="ttname"><a href="classSVF_1_1PAGNode.html#a071f592f2b811c136db5e05a6169aa99">SVF::PAGNode::hasValue</a></div><div class="ttdeci">bool hasValue() const</div><div class="ttdef"><b>Definition:</b> <a href="PAGNode_8h_source.html#l00110">PAGNode.h:110</a></div></div>
746
- <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00164">GenericGraph.h:164</a></div></div>
746
+ <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00165">GenericGraph.h:165</a></div></div>
747
747
  <div class="ttc" id="classSVF_1_1UnaryOPVFGNode_html_af31a06d33f41bdcff625ac23e269708c"><div class="ttname"><a href="classSVF_1_1UnaryOPVFGNode.html#af31a06d33f41bdcff625ac23e269708c">SVF::UnaryOPVFGNode::opVerEnd</a></div><div class="ttdeci">OPVers::const_iterator opVerEnd() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00521">VFGNode.h:521</a></div></div>
748
748
  </div><!-- fragment -->
749
749
  </div>