svf-tools 1.0.310 → 1.0.314

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/SVF-doxygen/html/html/AndersenHCD_8cpp_source.html +3 -3
  2. package/SVF-doxygen/html/html/AndersenHLCD_8cpp_source.html +2 -2
  3. package/SVF-doxygen/html/html/AndersenLCD_8cpp_source.html +3 -3
  4. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +3 -3
  5. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +6 -6
  6. package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +6 -6
  7. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +21 -21
  8. package/SVF-doxygen/html/html/AndersenWaveDiffWithType_8cpp_source.html +4 -4
  9. package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +4 -4
  10. package/SVF-doxygen/html/html/Andersen_8cpp.html +1 -0
  11. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +58 -56
  12. package/SVF-doxygen/html/html/Andersen_8h_source.html +118 -118
  13. package/SVF-doxygen/html/html/CHG_8cpp.html +3 -3
  14. package/SVF-doxygen/html/html/CHG_8cpp_source.html +49 -50
  15. package/SVF-doxygen/html/html/CHG_8h_source.html +3 -3
  16. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +17 -16
  17. package/SVF-doxygen/html/html/CPPUtil_8h_source.html +16 -16
  18. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +5 -5
  19. package/SVF-doxygen/html/html/CallGraphBuilder_8h_source.html +1 -1
  20. package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
  21. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +10 -10
  22. package/SVF-doxygen/html/html/ConsG_8h_source.html +7 -7
  23. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +8 -8
  24. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +5 -5
  25. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +13 -13
  26. package/SVF-doxygen/html/html/DCHG_8h_source.html +2 -2
  27. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +7 -7
  28. package/SVF-doxygen/html/html/DDAClient_8h_source.html +2 -2
  29. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +5 -5
  30. package/SVF-doxygen/html/html/DDAPass_8h_source.html +1 -1
  31. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +4 -4
  32. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +10 -10
  33. package/SVF-doxygen/html/html/DoubleFreeChecker_8h_source.html +1 -1
  34. package/SVF-doxygen/html/html/ExternalPAG_8cpp.html +1 -1
  35. package/SVF-doxygen/html/html/ExternalPAG_8cpp_source.html +8 -8
  36. package/SVF-doxygen/html/html/ExternalPAG_8h_source.html +1 -1
  37. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +10 -10
  38. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
  39. package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
  40. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
  41. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +3 -3
  42. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +9 -9
  43. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +11 -11
  44. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +7 -7
  45. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +5 -5
  46. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +82 -81
  47. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +4 -4
  48. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +4 -4
  49. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
  50. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +1 -1
  51. package/SVF-doxygen/html/html/ICFGStat_8h_source.html +3 -3
  52. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +6 -6
  53. package/SVF-doxygen/html/html/ICFG_8h_source.html +6 -6
  54. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +4 -4
  55. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +2 -2
  56. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +2 -2
  57. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +1 -1
  58. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +4 -4
  59. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
  60. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +1 -1
  61. package/SVF-doxygen/html/html/LocationSet_8h_source.html +1 -2
  62. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +6 -6
  63. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +1 -1
  64. package/SVF-doxygen/html/html/MHP_8cpp_source.html +13 -13
  65. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +4 -4
  66. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -1
  67. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
  68. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -1
  69. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
  70. package/SVF-doxygen/html/html/MTA_8cpp_source.html +5 -5
  71. package/SVF-doxygen/html/html/MTA_8h_source.html +1 -1
  72. package/SVF-doxygen/html/html/MemModelBuilder_8cpp.html +90 -0
  73. package/SVF-doxygen/html/html/MemModelBuilder_8cpp_source.html +205 -0
  74. package/SVF-doxygen/html/html/MemModelBuilder_8h.html +97 -0
  75. package/SVF-doxygen/html/html/MemModelBuilder_8h_source.html +105 -0
  76. package/SVF-doxygen/html/html/MemModel_8cpp_source.html +9 -53
  77. package/SVF-doxygen/html/html/MemModel_8h_source.html +44 -44
  78. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +17 -17
  79. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +3 -3
  80. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +13 -13
  81. package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +12 -12
  82. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +2 -2
  83. package/SVF-doxygen/html/html/Options_8cpp_source.html +1 -2
  84. package/SVF-doxygen/html/html/Options_8h_source.html +2 -2
  85. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +1 -1
  86. package/SVF-doxygen/html/html/PAGBuilder_8cpp_source.html +25 -25
  87. package/SVF-doxygen/html/html/PAGBuilder_8h_source.html +1 -1
  88. package/SVF-doxygen/html/html/PAGEdge_8h_source.html +2 -2
  89. package/SVF-doxygen/html/html/PAGNode_8h_source.html +11 -11
  90. package/SVF-doxygen/html/html/PAG_8cpp_source.html +34 -34
  91. package/SVF-doxygen/html/html/PAG_8h_source.html +41 -41
  92. package/SVF-doxygen/html/html/PCG_8cpp_source.html +8 -8
  93. package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
  94. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +8 -8
  95. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +2 -2
  96. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +24 -24
  97. package/SVF-doxygen/html/html/PTAType_8h_source.html +4 -4
  98. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
  99. package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +1 -1
  100. package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +34 -33
  101. package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +7 -7
  102. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +15 -15
  103. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +66 -66
  104. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +15 -15
  105. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +7 -7
  106. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +3 -3
  107. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +4 -4
  108. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
  109. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +10 -10
  110. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +8 -8
  111. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +5 -5
  112. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +9 -9
  113. package/SVF-doxygen/html/html/SVFG_8h_source.html +7 -7
  114. package/SVF-doxygen/html/html/SVFModule_8cpp.html +1 -1
  115. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +6 -5
  116. package/SVF-doxygen/html/html/SVFModule_8h.html +3 -0
  117. package/SVF-doxygen/html/html/SVFModule_8h_source.html +53 -46
  118. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
  119. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +8 -8
  120. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +6 -6
  121. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
  122. package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -1
  123. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +2 -2
  124. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +5 -55
  125. package/SVF-doxygen/html/html/SymbolTableInfo_8h.html +0 -4
  126. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +88 -101
  127. package/SVF-doxygen/html/html/TCT_8cpp_source.html +11 -11
  128. package/SVF-doxygen/html/html/TCT_8h_source.html +10 -10
  129. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +5 -5
  130. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +1 -1
  131. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +3 -3
  132. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +8 -8
  133. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +7 -7
  134. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +2 -2
  135. package/SVF-doxygen/html/html/VFGNode_8h_source.html +2 -2
  136. package/SVF-doxygen/html/html/VFG_8cpp_source.html +6 -6
  137. package/SVF-doxygen/html/html/VFG_8h_source.html +6 -6
  138. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +7 -7
  139. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +13 -13
  140. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +11 -11
  141. package/SVF-doxygen/html/html/WPAPass_8h_source.html +1 -1
  142. package/SVF-doxygen/html/html/annotated.html +135 -136
  143. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  144. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  145. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
  146. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +2 -2
  148. package/SVF-doxygen/html/html/classSVF_1_1AddrPE.html +1 -1
  149. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +1 -1
  150. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
  151. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +1 -1
  152. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +228 -228
  153. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +1 -1
  154. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +60 -58
  155. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +1 -1
  156. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +43 -43
  157. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +1 -1
  158. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +23 -23
  159. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +1 -1
  160. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +52 -52
  161. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +1 -1
  162. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +38 -38
  163. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +1 -1
  164. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +17 -17
  165. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +31 -31
  166. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +1 -1
  167. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +38 -38
  168. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType-members.html +1 -1
  169. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType.html +31 -31
  170. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +1 -1
  171. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +73 -72
  172. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +1 -1
  173. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  174. package/SVF-doxygen/html/html/classSVF_1_1CHGraph-members.html +1 -1
  175. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +123 -120
  176. package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +1 -1
  177. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +3 -3
  178. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  179. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjPN.html +1 -1
  180. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjPN.html +1 -1
  181. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjPN.html +1 -1
  182. package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +1 -1
  183. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
  184. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +115 -115
  185. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +15 -15
  186. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +18 -18
  187. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +13 -13
  188. package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +1 -1
  189. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +1 -1
  190. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +22 -22
  191. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
  192. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +9 -9
  193. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +4 -4
  194. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
  195. package/SVF-doxygen/html/html/classSVF_1_1DummyObjPN.html +1 -1
  196. package/SVF-doxygen/html/html/classSVF_1_1DummyValPN.html +1 -1
  197. package/SVF-doxygen/html/html/classSVF_1_1ExternalPAG.html +8 -8
  198. package/SVF-doxygen/html/html/classSVF_1_1FIObjPN.html +1 -1
  199. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -2
  200. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +10 -10
  201. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +44 -44
  202. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +24 -24
  203. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +32 -32
  204. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +5 -5
  205. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
  206. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
  207. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
  208. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
  209. package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +1 -1
  210. package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +1 -1
  211. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +5 -5
  212. package/SVF-doxygen/html/html/classSVF_1_1GenericGraph.html +47 -47
  213. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +58 -57
  214. package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +5 -5
  215. package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +1 -1
  216. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +1 -1
  217. package/SVF-doxygen/html/html/classSVF_1_1GepValPN.html +1 -1
  218. package/SVF-doxygen/html/html/classSVF_1_1GlobalBlockNode.html +1 -1
  219. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +13 -13
  220. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +3 -3
  221. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
  222. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +6 -6
  223. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +2 -2
  224. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +3 -3
  225. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  226. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  227. package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +1 -1
  228. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
  229. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  230. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +17 -17
  231. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
  232. package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +1 -1
  233. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +1 -1
  234. package/SVF-doxygen/html/html/classSVF_1_1LocObjTypeInfo.html +1 -1
  235. package/SVF-doxygen/html/html/classSVF_1_1LocSymTableInfo.html +2 -2
  236. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +1 -1
  237. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +8 -8
  238. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
  239. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +15 -15
  240. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +24 -24
  241. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
  242. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
  243. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +5 -5
  244. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +3 -3
  245. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +4 -4
  246. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +21 -21
  247. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +5 -5
  248. package/SVF-doxygen/html/html/classSVF_1_1MemModelBuilder-members.html +95 -0
  249. package/SVF-doxygen/html/html/classSVF_1_1MemModelBuilder.html +711 -0
  250. package/SVF-doxygen/html/html/classSVF_1_1MemObj-members.html +7 -10
  251. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +92 -199
  252. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +3 -3
  253. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator-members.html +1 -1
  254. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +7 -7
  255. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +34 -34
  256. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +3 -3
  257. package/SVF-doxygen/html/html/classSVF_1_1ObjPN.html +3 -3
  258. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo-members.html +8 -10
  259. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +68 -168
  260. package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +1 -1
  261. package/SVF-doxygen/html/html/classSVF_1_1Options.html +5 -5
  262. package/SVF-doxygen/html/html/classSVF_1_1PAG.html +67 -67
  263. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilder.html +41 -41
  264. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +3 -3
  265. package/SVF-doxygen/html/html/classSVF_1_1PAGEdge.html +5 -5
  266. package/SVF-doxygen/html/html/classSVF_1_1PAGNode.html +10 -10
  267. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +15 -15
  268. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
  269. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +16 -16
  270. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +4 -4
  271. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +32 -32
  272. package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +6 -6
  273. package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +5 -5
  274. package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +10 -10
  275. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache-members.html +39 -38
  276. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +153 -116
  277. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +21 -21
  278. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +3 -3
  279. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
  280. package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +1 -1
  281. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  282. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +2 -2
  283. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +8 -8
  284. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
  285. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +35 -35
  286. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +7 -7
  287. package/SVF-doxygen/html/html/classSVF_1_1SVFModule-members.html +1 -0
  288. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +113 -80
  289. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +3 -3
  290. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +16 -16
  291. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +5 -5
  292. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +1 -1
  293. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +14 -14
  294. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +2 -2
  295. package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +1 -1
  296. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +1 -1
  297. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +49 -55
  298. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +300 -587
  299. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +28 -28
  300. package/SVF-doxygen/html/html/classSVF_1_1TCTNode.html +1 -1
  301. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
  302. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
  303. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +3 -3
  304. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +1 -1
  305. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +11 -11
  306. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +8 -8
  307. package/SVF-doxygen/html/html/classSVF_1_1TypeSystem.html +1 -1
  308. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +1 -1
  309. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  310. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +14 -14
  311. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
  312. package/SVF-doxygen/html/html/classSVF_1_1ValPN.html +2 -2
  313. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +2 -2
  314. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +35 -35
  315. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +11 -11
  316. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +3 -3
  317. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +11 -11
  318. package/SVF-doxygen/html/html/classes.html +91 -91
  319. package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
  320. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  321. package/SVF-doxygen/html/html/dir_5840dc76920ee0f379cd88b55fa041fd.html +1 -1
  322. package/SVF-doxygen/html/html/dir_770a542efe75a1b68c109cb4e4290224.html +1 -1
  323. package/SVF-doxygen/html/html/files.html +2 -2
  324. package/SVF-doxygen/html/html/functions_0x7e.html +5 -8
  325. package/SVF-doxygen/html/html/functions_a.html +13 -10
  326. package/SVF-doxygen/html/html/functions_b.html +1 -1
  327. package/SVF-doxygen/html/html/functions_c.html +38 -36
  328. package/SVF-doxygen/html/html/functions_e.html +1 -1
  329. package/SVF-doxygen/html/html/functions_f.html +3 -3
  330. package/SVF-doxygen/html/html/functions_func.html +12 -9
  331. package/SVF-doxygen/html/html/functions_func_0x7e.html +5 -8
  332. package/SVF-doxygen/html/html/functions_func_b.html +1 -1
  333. package/SVF-doxygen/html/html/functions_func_c.html +28 -26
  334. package/SVF-doxygen/html/html/functions_func_e.html +1 -1
  335. package/SVF-doxygen/html/html/functions_func_g.html +11 -13
  336. package/SVF-doxygen/html/html/functions_func_h.html +3 -3
  337. package/SVF-doxygen/html/html/functions_func_i.html +8 -7
  338. package/SVF-doxygen/html/html/functions_func_l.html +2 -8
  339. package/SVF-doxygen/html/html/functions_func_m.html +4 -1
  340. package/SVF-doxygen/html/html/functions_func_p.html +1 -1
  341. package/SVF-doxygen/html/html/functions_func_s.html +8 -5
  342. package/SVF-doxygen/html/html/functions_func_v.html +0 -3
  343. package/SVF-doxygen/html/html/functions_g.html +6 -8
  344. package/SVF-doxygen/html/html/functions_h.html +3 -3
  345. package/SVF-doxygen/html/html/functions_i.html +15 -14
  346. package/SVF-doxygen/html/html/functions_l.html +6 -10
  347. package/SVF-doxygen/html/html/functions_m.html +5 -1
  348. package/SVF-doxygen/html/html/functions_n.html +4 -4
  349. package/SVF-doxygen/html/html/functions_o.html +3 -3
  350. package/SVF-doxygen/html/html/functions_p.html +13 -9
  351. package/SVF-doxygen/html/html/functions_r.html +1 -1
  352. package/SVF-doxygen/html/html/functions_rela.html +3 -0
  353. package/SVF-doxygen/html/html/functions_s.html +20 -14
  354. package/SVF-doxygen/html/html/functions_t.html +4 -4
  355. package/SVF-doxygen/html/html/functions_u.html +3 -3
  356. package/SVF-doxygen/html/html/functions_v.html +2 -5
  357. package/SVF-doxygen/html/html/functions_vars_l.html +1 -1
  358. package/SVF-doxygen/html/html/functions_vars_s.html +2 -1
  359. package/SVF-doxygen/html/html/functions_w.html +3 -1
  360. package/SVF-doxygen/html/html/hierarchy.html +127 -128
  361. package/SVF-doxygen/html/html/mta_8cpp.html +1 -1
  362. package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
  363. package/SVF-doxygen/html/html/namespaceSVF.html +1 -3
  364. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
  365. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +40 -39
  366. package/SVF-doxygen/html/html/saber_8cpp.html +1 -1
  367. package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
  368. package/SVF-doxygen/html/html/search/all_1.js +3 -2
  369. package/SVF-doxygen/html/html/search/all_10.js +9 -9
  370. package/SVF-doxygen/html/html/search/all_12.js +2 -2
  371. package/SVF-doxygen/html/html/search/all_13.js +9 -8
  372. package/SVF-doxygen/html/html/search/all_14.js +6 -6
  373. package/SVF-doxygen/html/html/search/all_15.js +2 -2
  374. package/SVF-doxygen/html/html/search/all_16.js +0 -1
  375. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  376. package/SVF-doxygen/html/html/search/all_1b.js +3 -4
  377. package/SVF-doxygen/html/html/search/all_2.js +1 -1
  378. package/SVF-doxygen/html/html/search/all_3.js +11 -10
  379. package/SVF-doxygen/html/html/search/all_5.js +1 -1
  380. package/SVF-doxygen/html/html/search/all_6.js +1 -1
  381. package/SVF-doxygen/html/html/search/all_7.js +2 -2
  382. package/SVF-doxygen/html/html/search/all_8.js +3 -3
  383. package/SVF-doxygen/html/html/search/all_9.js +4 -3
  384. package/SVF-doxygen/html/html/search/all_c.js +4 -7
  385. package/SVF-doxygen/html/html/search/all_d.js +4 -1
  386. package/SVF-doxygen/html/html/search/all_e.js +2 -2
  387. package/SVF-doxygen/html/html/search/all_f.js +1 -1
  388. package/SVF-doxygen/html/html/search/classes_9.js +1 -3
  389. package/SVF-doxygen/html/html/search/classes_a.js +1 -0
  390. package/SVF-doxygen/html/html/search/files_8.js +1 -3
  391. package/SVF-doxygen/html/html/search/files_9.js +2 -0
  392. package/SVF-doxygen/html/html/search/functions_0.js +3 -2
  393. package/SVF-doxygen/html/html/search/functions_1.js +1 -1
  394. package/SVF-doxygen/html/html/search/functions_10.js +1 -0
  395. package/SVF-doxygen/html/html/search/functions_13.js +0 -1
  396. package/SVF-doxygen/html/html/search/functions_16.js +3 -4
  397. package/SVF-doxygen/html/html/search/functions_2.js +10 -9
  398. package/SVF-doxygen/html/html/search/functions_4.js +1 -1
  399. package/SVF-doxygen/html/html/search/functions_6.js +2 -2
  400. package/SVF-doxygen/html/html/search/functions_7.js +3 -3
  401. package/SVF-doxygen/html/html/search/functions_8.js +2 -1
  402. package/SVF-doxygen/html/html/search/functions_a.js +1 -3
  403. package/SVF-doxygen/html/html/search/functions_b.js +2 -1
  404. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  405. package/SVF-doxygen/html/html/search/related_3.js +1 -0
  406. package/SVF-doxygen/html/html/search/variables_13.js +1 -1
  407. package/SVF-doxygen/html/html/search/variables_14.js +2 -2
  408. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  409. package/SVF-doxygen/html/html/search/variables_c.js +1 -1
  410. package/SVF-doxygen/html/html/search/variables_e.js +1 -1
  411. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CHGraph_01_5_01_4.html +12 -12
  412. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  413. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
  414. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PAG_01_5_01_4.html +17 -17
  415. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +2 -2
  416. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01TCT_01_5_01_4.html +1 -1
  417. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1GenericNode_3_01NodeTy_00_01EdgeTy_01_4_01_5_4_01_4.html +14 -14
  418. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericGraph_3_01NodeTy_00_01EdgeTy_01_4_01_5_4.html +20 -20
  419. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericNode_3_01NodeTy_00_01EdgeTy_01_4_01_5_01_4.html +16 -16
  420. package/SVF-doxygen/html/html/svf-ex_8cpp.html +8 -7
  421. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +6 -5
  422. package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
  423. package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
  424. package/include/Graphs/GenericGraph.h +5 -8
  425. package/include/MemoryModel/MemModel.h +5 -21
  426. package/include/MemoryModel/PersistentPointsToCache.h +13 -7
  427. package/include/MemoryModel/PointerAnalysisImpl.h +1 -0
  428. package/include/SVF-FE/CHG.h +1 -1
  429. package/include/SVF-FE/MemModelBuilder.h +102 -0
  430. package/include/SVF-FE/SymbolTableInfo.h +12 -79
  431. package/include/Util/NodeIDAllocator.h +1 -1
  432. package/include/Util/SVFModule.h +16 -0
  433. package/include/WPA/Andersen.h +2 -7
  434. package/lib/Graphs/PAG.cpp +3 -10
  435. package/lib/MemoryModel/MemModel.cpp +10 -436
  436. package/lib/SVF-FE/CHG.cpp +0 -6
  437. package/lib/SVF-FE/CPPUtil.cpp +2 -0
  438. package/lib/SVF-FE/MemModelBuilder.cpp +616 -0
  439. package/lib/SVF-FE/SymbolTableInfo.cpp +10 -453
  440. package/lib/Util/NodeIDAllocator.cpp +2 -1
  441. package/lib/Util/Options.cpp +2 -10
  442. package/lib/Util/SVFModule.cpp +3 -2
  443. package/lib/WPA/Andersen.cpp +13 -1
  444. package/package.json +1 -1
  445. package/tools/Example/svf-ex.cpp +6 -3
  446. package/include/SVF-FE/LocMemModel.h +0 -35
  447. package/lib/SVF-FE/LocMemModel.cpp +0 -31
@@ -67,7 +67,7 @@ $(function() {
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
69
  <a href="ExternalPAG_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- ExternalPAG.cpp -- Program assignment graph ---------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * ExternalPAG.cpp</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * Created on: Sep 22, 2018</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * Author: Mohamad Barbar</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;fstream&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PAG_8h.html">Graphs/PAG.h</a>&quot;</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ExternalPAG_8h.html">Graphs/ExternalPAG.h</a>&quot;</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="BasicTypes_8h.html">Util/BasicTypes.h</a>&quot;</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ICFG_8h.html">Graphs/ICFG.h</a>&quot;</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;llvm::cl::list&lt;std::string&gt; <a class="code" href="ExternalPAG_8cpp.html#a2431eebebb81cd05cc1872e2b7b3744a">ExternalPAGArgs</a>(<span class="stringliteral">&quot;extpags&quot;</span>,</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; llvm::cl::desc(<span class="stringliteral">&quot;ExternalPAGs to use during PAG construction (format: func1@/path/to/graph,func2@/foo,...&quot;</span>),</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; llvm::cl::CommaSeparated);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;llvm::cl::list&lt;std::string&gt; <a class="code" href="ExternalPAG_8cpp.html#a99fd9118248348106730e69c576c6c12">DumpPAGFunctions</a>(<span class="stringliteral">&quot;dump-function-pags&quot;</span>,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; llvm::cl::desc(<span class="stringliteral">&quot;Dump PAG for functions&quot;</span>),</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; llvm::cl::CommaSeparated);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, Map&lt;int, PAGNode *&gt;</a>&gt;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classSVF_1_1ExternalPAG.html#a851dbb85d0b80c3942398732ba900e41">ExternalPAG::functionToExternalPAGEntries</a>;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, PAGNode *&gt;</a> <a class="code" href="classSVF_1_1ExternalPAG.html#aa478936bbf34d5cc23c6322a61a6885e">ExternalPAG::functionToExternalPAGReturns</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;std::vector&lt;std::pair&lt;std::string, std::string&gt;&gt;</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classSVF_1_1ExternalPAG.html#a50cf3da29657a69d66396a6951f628d8"> 36</a></span>&#160; <a class="code" href="classSVF_1_1ExternalPAG.html#a50cf3da29657a69d66396a6951f628d8">ExternalPAG::parseExternalPAGs</a>(llvm::cl::list&lt;std::string&gt; &amp;extpagsArgs)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; std::vector&lt;std::pair&lt;std::string, std::string&gt;&gt; parsedExternalPAGs;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> arg = extpagsArgs.begin(); arg != extpagsArgs.end();</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; ++arg)</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; {</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; std::stringstream ss(*arg);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; std::string functionName;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; getline(ss, functionName, <span class="charliteral">&#39;@&#39;</span>);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; std::string path;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; getline(ss, path);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; parsedExternalPAGs.push_back(</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; std::pair&lt;std::string, std::string&gt;(functionName, path));</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">return</span> parsedExternalPAGs;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1ExternalPAG.html#a865a75aec231c9122842d2bdafeb4f6b"> 54</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ExternalPAG.html#a865a75aec231c9122842d2bdafeb4f6b">ExternalPAG::initialise</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>*)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;{</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; std::vector&lt;std::pair&lt;std::string, std::string&gt;&gt; parsedExternalPAGs</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; = <a class="code" href="classSVF_1_1ExternalPAG.html#a50cf3da29657a69d66396a6951f628d8">ExternalPAG::parseExternalPAGs</a>(<a class="code" href="ExternalPAG_8cpp.html#a2431eebebb81cd05cc1872e2b7b3744a">ExternalPAGArgs</a>);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="comment">// Build ext PAGs (and add them) first to use them in PAG construction.</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> extpagPair= parsedExternalPAGs.begin();</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; extpagPair != parsedExternalPAGs.end(); ++extpagPair)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; std::string fname = extpagPair-&gt;first;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; std::string path = extpagPair-&gt;second;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classSVF_1_1ExternalPAG.html">ExternalPAG</a> extpag = <a class="code" href="classSVF_1_1ExternalPAG.html">ExternalPAG</a>(fname);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; extpag.<a class="code" href="classSVF_1_1ExternalPAG.html#ae010036c742cfdf95fad5355f0100984">readFromFile</a>(path);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; extpag.<a class="code" href="classSVF_1_1ExternalPAG.html#a6e8b309508de040504ad4b2ce6a5de28">addExternalPAG</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a4f457db1cfa0d4f94762a306c0ac3757">getFunction</a>(fname));</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1ExternalPAG.html#a7a82128508395830433145977dbe37c0"> 72</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExternalPAG.html#a7a82128508395830433145977dbe37c0">ExternalPAG::connectCallsiteToExternalPAG</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> *cs)</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_1PAG.html">PAG</a> *pag = <a class="code" href="classSVF_1_1PAG.html#ac8910c7330638bdf31c23d4cc03ba9c5">PAG::getPAG</a>();</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* <span class="keyword">function</span> = cs-&gt;<a class="code" href="classSVF_1_1CallSite.html#ae9b0172e29199f2a938d7cf9e42241cf">getCalledFunction</a>();</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; std::string functionName = <span class="keyword">function</span>-&gt;getName().str();</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfFun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(<span class="keyword">function</span>);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">if</span> (!hasExternalPAG(svfFun)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;int, PAGNode*&gt;</a> argNodes =</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; functionToExternalPAGEntries[svfFun];</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *retNode = functionToExternalPAGReturns[svfFun];</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="comment">// Handle the return.</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> (llvm::isa&lt;PointerType&gt;(cs-&gt;<a class="code" href="classSVF_1_1CallSite.html#a9b7d53a345875e4e6c72eb23ac6475de">getType</a>()))</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a5f49b7da110a626ed6605d1f108dfa25">getValueNode</a>(cs-&gt;<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// Does it actually return a pointer?</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;PointerType&gt;(function-&gt;getReturnType()))</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="keywordflow">if</span> (retNode != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; {</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* icfgNode = pag-&gt;<a class="code" href="classSVF_1_1PAG.html#ad274c5c15ac51cea5d09ad08febe8c14">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs-&gt;<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a2887310a7757f92063c5598ea694edbb">addRetPE</a>(retNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), dstrec, icfgNode);</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></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="comment">// This is a int2ptr cast during parameter passing</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#addb513f5571acf2854adc878e58cf523">addBlackHoleAddrPE</a>(dstrec);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">// Handle the arguments;</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="comment">// Actual arguments.</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="classSVF_1_1CallSite.html#ac1cdfe5e54026960a23142e26b3150ff">CallSite::arg_iterator</a> itA = cs-&gt;<a class="code" href="classSVF_1_1CallSite.html#aabc0054b7f4e06b7ca0b6072746984e6">arg_begin</a>(), ieA = cs-&gt;<a class="code" href="classSVF_1_1CallSite.html#a46e8ffe430bb2711abaafc9d7864909e">arg_end</a>();</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; Function::const_arg_iterator itF = <span class="keyword">function</span>-&gt;arg_begin(),</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; ieF = <span class="keyword">function</span>-&gt;arg_end();</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="comment">// Formal arguments.</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordtype">size_t</span> formalNodeIndex = 0;</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; <span class="keywordflow">for</span> (; itF != ieF ; ++itA, ++itF, ++formalNodeIndex)</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="keywordflow">if</span> (itA == ieA)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="comment">// When unneeded args are left empty, e.g. Linux kernel.</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="comment">// Formal arg node is from the extpag, actual arg node would come from</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">// the main pag.</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *formalArgNode = argNodes[formalNodeIndex];</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> actualArgNodeId = pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a5f49b7da110a626ed6605d1f108dfa25">getValueNode</a>(*itA);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">llvm::Value</a> *formalArg = &amp;*itF;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;PointerType&gt;(formalArg-&gt;getType())) <span class="keywordflow">continue</span>;</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; <span class="keywordflow">if</span> (SVFUtil::isa&lt;PointerType&gt;((*itA)-&gt;getType()))</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* icfgNode = pag-&gt;<a class="code" href="classSVF_1_1PAG.html#ad274c5c15ac51cea5d09ad08febe8c14">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs-&gt;<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#aa8bb3b659b70041e82aee15e8a595afb">addCallPE</a>(actualArgNodeId, formalArgNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), icfgNode);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="comment">// This is a int2ptr cast during parameter passing</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="comment">//addFormalParamBlackHoleAddrEdge(formalArgNode-&gt;getId(), &amp;*itF);</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;you need to set the current location of this PAGEdge&quot;</span>);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#addb513f5571acf2854adc878e58cf523">addBlackHoleAddrPE</a>(formalArgNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="comment">// TODO proofread.</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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;</div><div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="classSVF_1_1ExternalPAG.html#a3a798aa788c5f1c200b7e2719660b5ec"> 148</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExternalPAG.html#a3a798aa788c5f1c200b7e2719660b5ec">ExternalPAG::hasExternalPAG</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <span class="keyword">function</span>)</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;{</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordtype">bool</span> ret = functionToExternalPAGEntries.find(<span class="keyword">function</span>)</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; != functionToExternalPAGEntries.end();</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">return</span> ret;</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"><a class="line" href="ExternalPAG_8cpp.html#abe9bb682282b331d0d8ca9d000d63443"> 155</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="ExternalPAG_8cpp.html#abe9bb682282b331d0d8ca9d000d63443">getArgNo</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <span class="keyword">function</span>, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *arg)</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; <span class="keywordtype">int</span> argNo = 0;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = function-&gt;getLLVMFun()-&gt;arg_begin(); it != <span class="keyword">function</span>-&gt;getLLVMFun()-&gt;arg_end();</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; ++it, ++argNo)</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">if</span> (arg-&gt;getName() == it-&gt;getName()) <span class="keywordflow">return</span> argNo;</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; <span class="keywordflow">return</span> -1;</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;</div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="ExternalPAG_8cpp.html#ad7218c518c78bf2f6a4527de22bed926"> 167</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="ExternalPAG_8cpp.html#ad7218c518c78bf2f6a4527de22bed926">outputPAGNodeNoNewLine</a>(<a class="code" href="namespaceSVF.html#a424cc053c29ad7303699c529d1a2cc71">raw_ostream</a> &amp;o, <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *pagNode)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;{</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; o &lt;&lt; pagNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="comment">// TODO: is this check enough?</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1ObjPN.html#a5e7e7b1a2d78146e50ec36d99b0a3608">ObjPN::classof</a>(pagNode)) o &lt;&lt; <span class="stringliteral">&quot;v&quot;</span>;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">else</span> o &lt;&lt; <span class="stringliteral">&quot;o&quot;</span>;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;}</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="ExternalPAG_8cpp.html#a84db1ce5293fc8c7b74a997a02675c38"> 175</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="ExternalPAG_8cpp.html#a84db1ce5293fc8c7b74a997a02675c38">outputPAGNode</a>(<a class="code" href="namespaceSVF.html#a424cc053c29ad7303699c529d1a2cc71">raw_ostream</a> &amp;o, <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *pagNode)</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;{</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="ExternalPAG_8cpp.html#ad7218c518c78bf2f6a4527de22bed926">outputPAGNodeNoNewLine</a>(o, pagNode);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;}</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="ExternalPAG_8cpp.html#a6f48353c8b444aeff540d1e228be2e15"> 181</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="ExternalPAG_8cpp.html#a84db1ce5293fc8c7b74a997a02675c38">outputPAGNode</a>(<a class="code" href="namespaceSVF.html#a424cc053c29ad7303699c529d1a2cc71">raw_ostream</a> &amp;o, <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *pagNode, <span class="keywordtype">int</span> argno)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;{</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="ExternalPAG_8cpp.html#ad7218c518c78bf2f6a4527de22bed926">outputPAGNodeNoNewLine</a>(o, pagNode);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; o &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; argno;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;}</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="ExternalPAG_8cpp.html#aa31cdd956df22eadb2e1b1686d414012"> 188</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="ExternalPAG_8cpp.html#a84db1ce5293fc8c7b74a997a02675c38">outputPAGNode</a>(<a class="code" href="namespaceSVF.html#a424cc053c29ad7303699c529d1a2cc71">raw_ostream</a> &amp;o, <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *pagNode,</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; std::string trail)</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;{</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="ExternalPAG_8cpp.html#ad7218c518c78bf2f6a4527de22bed926">outputPAGNodeNoNewLine</a>(o, pagNode);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; o &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; trail;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;}</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;</div><div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="ExternalPAG_8cpp.html#a883ca6e5a9c61af716b49ba81adf4ca3"> 196</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="ExternalPAG_8cpp.html#a883ca6e5a9c61af716b49ba81adf4ca3">outputPAGEdge</a>(<a class="code" href="namespaceSVF.html#a424cc053c29ad7303699c529d1a2cc71">raw_ostream</a> &amp;o, <a class="code" href="classSVF_1_1PAGEdge.html">PAGEdge</a> *pagEdge)</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;{</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId = pagEdge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId = pagEdge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> offset = 0;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; std::string edgeKind = <span class="stringliteral">&quot;-&quot;</span>;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">switch</span> (pagEdge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>())</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; {</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6ac29bb583428e3c20d758bb9cf2d2d626">PAGEdge::Addr</a>:</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; edgeKind = <span class="stringliteral">&quot;addr&quot;</span>;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6af447071283803d3aee763fe20783f4a4">PAGEdge::Copy</a>:</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; edgeKind = <span class="stringliteral">&quot;copy&quot;</span>;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6aca20a2c4d9809736d43b18f3cb53e8cf">PAGEdge::Store</a>:</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; edgeKind = <span class="stringliteral">&quot;store&quot;</span>;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a8fcebc849a231c3c87dddbf0ab5a2167">PAGEdge::Load</a>:</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; edgeKind = <span class="stringliteral">&quot;load&quot;</span>;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a5f4c2c1ec167425622d40133ec15448d">PAGEdge::Call</a>:</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; edgeKind = <span class="stringliteral">&quot;call&quot;</span>;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a99fe431c7a635d39b5558d1048a94c05">PAGEdge::Ret</a>:</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; edgeKind = <span class="stringliteral">&quot;ret&quot;</span>;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a4b8b2eb7125c259d8d550dd83c51147b">PAGEdge::NormalGep</a>:</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; edgeKind = <span class="stringliteral">&quot;gep&quot;</span>;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6ad1f40a044008babd44bff30af846550c">PAGEdge::VariantGep</a>:</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; edgeKind = <span class="stringliteral">&quot;variant-gep&quot;</span>;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a90aa1e3ce21dcd54cf433610b427ba96">PAGEdge::Cmp</a>:</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; edgeKind = <span class="stringliteral">&quot;cmp&quot;</span>;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6aab0965e92d7414417a77f925efb79dac">PAGEdge::BinaryOp</a>:</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; edgeKind = <span class="stringliteral">&quot;binary-op&quot;</span>;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6afad5f112c36b6e35baf38054c14ae597">PAGEdge::UnaryOp</a>:</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; edgeKind = <span class="stringliteral">&quot;unary-op&quot;</span>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a1070b34fd19259725d752aa3b5adc73b">PAGEdge::ThreadFork</a>:</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;dump-function-pags: found ThreadFork edge.\n&quot;</span>;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a8ec550e2cbb5ba5847a0eb0760be165b">PAGEdge::ThreadJoin</a>:</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;dump-function-pags: found ThreadJoin edge.\n&quot;</span>;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; }</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1NormalGepPE.html#a2d48376e5806de43fa0a916b807fb2c3">NormalGepPE::classof</a>(pagEdge)) offset =</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classSVF_1_1NormalGepPE.html">NormalGepPE</a> *<span class="keyword">&gt;</span>(pagEdge)-&gt;getOffset();</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; o &lt;&lt; srcId &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; edgeKind &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; dstId &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; offset &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;}</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="classSVF_1_1ExternalPAG.html#acee9fa409f3649dcf2c0f5e6da66ceb0"> 256</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ExternalPAG.html#acee9fa409f3649dcf2c0f5e6da66ceb0">ExternalPAG::dumpFunctions</a>(std::vector&lt;std::string&gt; functions)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;{</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="classSVF_1_1PAG.html">PAG</a> *pag = <a class="code" href="classSVF_1_1PAG.html#ac8910c7330638bdf31c23d4cc03ba9c5">PAG::getPAG</a>();</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="comment">// Naive: first map functions to entries in PAG, then dump them.</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, std::vector&lt;PAGNode *&gt;</a>&gt; functionToPAGNodes;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;PAGNode *&gt;</a> callDsts;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">PAG::iterator</a> it = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *currNode = it-&gt;second;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">if</span> (!currNode-&gt;<a class="code" href="classSVF_1_1PAGNode.html#aa311aaac0f8fbb8650fac9d7662ec795">hasOutgoingEdges</a>(PAGEdge::PEDGEK::Call)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="comment">// Where are these calls going?</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator it =</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; currNode-&gt;<a class="code" href="classSVF_1_1PAGNode.html#a3db180378695da64a50a83bd8d8a7e47">getOutgoingEdgesBegin</a>(PAGEdge::PEDGEK::Call);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; it != currNode-&gt;<a class="code" href="classSVF_1_1PAGNode.html#ad57a4d81a77520c773bee35d294a7ed3">getOutgoingEdgesEnd</a>(PAGEdge::PEDGEK::Call); ++it)</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <a class="code" href="classSVF_1_1CallPE.html">CallPE</a> *callEdge = <span class="keyword">static_cast&lt;</span><a class="code" href="classSVF_1_1CallPE.html">CallPE</a> *<span class="keyword">&gt;</span>(*it);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = callEdge-&gt;<a class="code" href="classSVF_1_1CallPE.html#ac8f25219948d3a6ff205048e746338d5">getCallInst</a>()-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>();</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">:: Function</a>* currFunction =</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a> *<span class="keyword">&gt;</span>(inst)-&gt;getCalledFunction();</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">if</span> (currFunction != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="comment">// Otherwise, it would be an indirect call which we don&#39;t want.</span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; std::string currFunctionName = currFunction-&gt;getName().str();</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">if</span> (std::find(functions.begin(), functions.end(),</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; currFunctionName) != functions.end())</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; {</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="comment">// If the dst has already been added, we&#39;d be duplicating</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="comment">// due to multiple actual-&gt;arg call edges.</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">if</span> (callDsts.find(callEdge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()) == callDsts.end())</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; callDsts.insert(callEdge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfFun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(currFunction);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; functionToPAGNodes[svfFun].push_back(callEdge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; }</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; }</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = functionToPAGNodes.begin(); it != functionToPAGNodes.end();</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; ++it)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <span class="keyword">function</span> = it-&gt;first;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; std::string functionName = it-&gt;first-&gt;<a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>().str();</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="comment">// The final nodes and edges we will print.</span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;PAGNode *&gt;</a> nodes;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;PAGEdge *&gt;</a> edges;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="comment">// The search stack.</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; std::stack&lt;PAGNode *&gt; todoNodes;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="comment">// The arguments to the function.</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; std::vector&lt;PAGNode *&gt; argNodes = it-&gt;second;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *retNode = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;PAG for function: &quot;</span> &lt;&lt; functionName &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> node = argNodes.begin(); node != argNodes.end(); ++node)</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; todoNodes.push(*node);</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;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">while</span> (!todoNodes.empty())</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *currNode = todoNodes.top();</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; todoNodes.pop();</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="comment">// If the node has been dealt with, ignore it.</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">if</span> (nodes.find(currNode) != nodes.end()) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; nodes.insert(currNode);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="comment">// Return signifies the end of a path.</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1RetPN.html#acedd9e576a077f96c0638065d4c70bcf">RetPN::classof</a>(currNode))</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; retNode = currNode;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keyword">auto</span> outEdges = currNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>();</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> outEdge = outEdges.begin(); outEdge != outEdges.end();</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; ++outEdge)</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; edges.insert(*outEdge);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; todoNodes.push((*outEdge)-&gt;getDstNode());</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; }</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> node = nodes.begin(); node != nodes.end(); ++node)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="comment">// TODO: proper file.</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="comment">// Argument nodes use extra information: it&#39;s argument number.</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">if</span> (std::find(argNodes.begin(), argNodes.end(), *node)</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; != argNodes.end())</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; <a class="code" href="ExternalPAG_8cpp.html#a84db1ce5293fc8c7b74a997a02675c38">outputPAGNode</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>(), *node,</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <a class="code" href="ExternalPAG_8cpp.html#abe9bb682282b331d0d8ca9d000d63443">getArgNo</a>(<span class="keyword">function</span>, (*node)-&gt;getValue()));</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (*node == retNode)</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <a class="code" href="ExternalPAG_8cpp.html#a84db1ce5293fc8c7b74a997a02675c38">outputPAGNode</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>(), *node, <span class="stringliteral">&quot;ret&quot;</span>);</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></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; <a class="code" href="ExternalPAG_8cpp.html#a84db1ce5293fc8c7b74a997a02675c38">outputPAGNode</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>(), *node);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; }</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; }</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> edge = edges.begin(); edge != edges.end(); ++edge)</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="comment">// TODO: proper file.</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="ExternalPAG_8cpp.html#a883ca6e5a9c61af716b49ba81adf4ca3">outputPAGEdge</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>(), *edge);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; }</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;PAG for functionName &quot;</span> &lt;&lt; functionName &lt;&lt; <span class="stringliteral">&quot; done\n&quot;</span>;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; }</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"><a class="line" href="classSVF_1_1ExternalPAG.html#a6e8b309508de040504ad4b2ce6a5de28"> 377</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExternalPAG.html#a6e8b309508de040504ad4b2ce6a5de28">ExternalPAG::addExternalPAG</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <span class="keyword">function</span>)</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">// The function does not exist in the module - bad arg?</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="comment">// TODO: maybe some warning?</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">function</span> == <span class="keyword">nullptr</span>) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="classSVF_1_1PAG.html">PAG</a> *pag = <a class="code" href="classSVF_1_1PAG.html#ac8910c7330638bdf31c23d4cc03ba9c5">PAG::getPAG</a>();</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">if</span> (hasExternalPAG(<span class="keyword">function</span>)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Adding extpag &quot;</span> &lt;&lt; this-&gt;getFunctionName() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="comment">// Temporarily trick SVF Module into thinking we are reading from</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="comment">// file to avoid setting BBs/Values (as these nodes don&#39;t have any).</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; std::string oldSVFModuleFileName = <a class="code" href="classSVF_1_1SVFModule.html#a54c2bc2cb7cda0d74f4cadc676461b60">SVFModule::pagFileName</a>();</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html#ac630e9f18a239ac6b3b88d05e64140c5">SVFModule::setPagFromTXT</a>(<span class="stringliteral">&quot;tmp&quot;</span>);</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; <span class="comment">// We need: the new nodes.</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">// : the new edges.</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="comment">// : to map function names to the entry nodes.</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="comment">// : to map function names to the return node.</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="comment">// To create the new edges.</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;NodeID, PAGNode *&gt;</a> extToNewNodes;</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="comment">// Add the value nodes.</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> extNodeIt = this-&gt;getValueNodes().begin();</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; extNodeIt != this-&gt;getValueNodes().end(); ++extNodeIt)</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; {</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newNodeId = pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a98b4beb7f17585173072f3bbea20eeb6">addDummyValNode</a>();</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; extToNewNodes[*extNodeIt] = pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(newNodeId);</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="comment">// Add the object nodes.</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> extNodeIt = this-&gt;getObjectNodes().begin();</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; extNodeIt != this-&gt;getObjectNodes().end(); ++extNodeIt)</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; {</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="comment">// TODO: fix obj node - there&#39;s more to it?</span></div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newNodeId = pag-&gt;<a class="code" href="classSVF_1_1PAG.html#adc044907b992993b5ad803d1acf0dd91">addDummyObjNode</a>();</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; extToNewNodes[*extNodeIt] = pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(newNodeId);</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; }</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="comment">// Add the edges.</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> extEdgeIt = this-&gt;getEdges().begin();</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; extEdgeIt != this-&gt;getEdges().end(); ++extEdgeIt)</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; {</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> extSrcId = std::get&lt;0&gt;(*extEdgeIt);</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> extDstId = std::get&lt;1&gt;(*extEdgeIt);</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; std::string extEdgeType = std::get&lt;2&gt;(*extEdgeIt);</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordtype">int</span> extOffsetOrCSId = std::get&lt;3&gt;(*extEdgeIt);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *srcNode = extToNewNodes[extSrcId];</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *dstNode = extToNewNodes[extDstId];</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId = srcNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId = dstNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">if</span> (extEdgeType == <span class="stringliteral">&quot;addr&quot;</span>)</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a6ac3b5eb1f34ac2257d0ba2556ed52c0">addAddrPE</a>(srcId, dstId);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extEdgeType == <span class="stringliteral">&quot;copy&quot;</span>)</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; {</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#aa50bf9fbf8ff2dff0392bff0319be622">addCopyPE</a>(srcId, dstId);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; }</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extEdgeType == <span class="stringliteral">&quot;load&quot;</span>)</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; {</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a0dc823946e0b86027b6093fe7c907543">addLoadPE</a>(srcId, dstId);</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; }</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extEdgeType == <span class="stringliteral">&quot;store&quot;</span>)</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; {</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#adbe031ff60dbcd981ff68e30a2e677ef">addStorePE</a>(srcId, dstId, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; }</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extEdgeType == <span class="stringliteral">&quot;gep&quot;</span>)</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; {</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a4606d6ff072f5ac5974719035676792e">addNormalGepPE</a>(srcId, dstId, <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(extOffsetOrCSId));</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extEdgeType == <span class="stringliteral">&quot;variant-gep&quot;</span>)</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; {</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a9d575070ab5234078590f9e8bf80bbf4">addVariantGepPE</a>(srcId, dstId);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; }</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extEdgeType == <span class="stringliteral">&quot;call&quot;</span>)</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; {</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a277706ab8f62e6f95c660be9cb825a27">addEdge</a>(srcNode, dstNode, <span class="keyword">new</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>(srcNode, dstNode, <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; }</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extEdgeType == <span class="stringliteral">&quot;ret&quot;</span>)</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; {</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a277706ab8f62e6f95c660be9cb825a27">addEdge</a>(srcNode, dstNode, <span class="keyword">new</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>(srcNode, dstNode, <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extEdgeType == <span class="stringliteral">&quot;cmp&quot;</span>)</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#af88ceecaac4e20ac1dd85908b3d190c8">addCmpPE</a>(srcId, dstId);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; }</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extEdgeType == <span class="stringliteral">&quot;binary-op&quot;</span>)</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; {</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#acf01961e2d9f3eba91c6e44c1f0137af">addBinaryOPPE</a>(srcId, dstId);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extEdgeType == <span class="stringliteral">&quot;unary-op&quot;</span>)</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; {</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a44e671995575a58c4a92dc892b0b7239">addUnaryOPPE</a>(srcId, dstId);</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; }</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; {</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Bad edge type found during extpag addition\n&quot;</span>;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; }</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="comment">// Record the arg nodes.</span></div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;int, PAGNode *&gt;</a> argNodes;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> argNodeIt = this-&gt;getArgNodes().begin();</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; argNodeIt != this-&gt;getArgNodes().end(); ++argNodeIt)</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; {</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordtype">int</span> index = argNodeIt-&gt;first;</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> extNodeId = argNodeIt-&gt;second;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; argNodes[index] = extToNewNodes[extNodeId];</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; }</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; functionToExternalPAGEntries[<span class="keyword">function</span>] = argNodes;</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="comment">// Record the return node.</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">if</span> (this-&gt;hasReturnNode())</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; {</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; functionToExternalPAGReturns[<span class="keyword">function</span>] =</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; extToNewNodes[this-&gt;getReturnNode()];</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="comment">// Put it back as if nothing happened.</span></div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html#ac630e9f18a239ac6b3b88d05e64140c5">SVFModule::setPagFromTXT</a>(oldSVFModuleFileName);</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;}</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;<span class="comment">// Very similar implementation to the PAGBuilderFromFile.</span></div><div class="line"><a name="l00507"></a><span class="lineno"><a class="line" href="classSVF_1_1ExternalPAG.html#ae010036c742cfdf95fad5355f0100984"> 507</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ExternalPAG.html#ae010036c742cfdf95fad5355f0100984">ExternalPAG::readFromFile</a>(std::string filename)</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;{</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; std::string line;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; std::ifstream pagFile(filename.c_str());</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">if</span> (!pagFile.is_open())</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; {</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;ExternalPAG::buildFromFile: could not open &quot;</span> &lt;&lt; filename</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; }</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">while</span> (pagFile.good())</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; {</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; std::getline(pagFile, line);</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> tokenCount = 0;</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; std::string tmps;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; std::istringstream ss(line);</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">while</span> (ss.good())</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; {</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; ss &gt;&gt; tmps;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; tokenCount++;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; }</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">if</span> (tokenCount == 0)</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="comment">// Empty line.</span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; }</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keywordflow">if</span> (tokenCount == 2 || tokenCount == 3)</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="comment">// It&#39;s a node.</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; std::string nodeType;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; std::istringstream ss(line);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; ss &gt;&gt; nodeId;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; ss &gt;&gt; nodeType;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keywordflow">if</span> (nodeType == <span class="stringliteral">&quot;v&quot;</span>)</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; {</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; valueNodes.insert(nodeId);</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; }</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nodeType == <span class="stringliteral">&quot;o&quot;</span>)</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; objectNodes.insert(nodeId);</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; {</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; &amp;&amp; <span class="stringliteral">&quot;format not supported, please specify node type&quot;</span>);</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">if</span> (tokenCount == 3)</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; {</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="comment">// If there are 3 tokens, it should be 0, 1, 2, ... or ret.</span></div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; std::string argNoOrRet;</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; ss &gt;&gt; argNoOrRet;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">if</span> (argNoOrRet == <span class="stringliteral">&quot;ret&quot;</span>)</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; setReturnNode(nodeId);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (std::all_of(argNoOrRet.begin(), argNoOrRet.end(),</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; ::isdigit))</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; {</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keywordtype">int</span> argNo = std::stoi(argNoOrRet);</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; argNodes[argNo] = nodeId;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; }</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; {</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; &amp;&amp; <span class="stringliteral">&quot;format not supported, not arg number or ret&quot;</span>);</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; }</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; }</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; }</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tokenCount == 4)</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="comment">// It&#39;s an edge</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeSrc;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeDst;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> offsetOrCSId;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; std::string edge;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; std::istringstream ss(line);</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; ss &gt;&gt; nodeSrc;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; ss &gt;&gt; edge;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; ss &gt;&gt; nodeDst;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; ss &gt;&gt; offsetOrCSId;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; edges.insert(</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; std::tuple&lt;NodeID, NodeID, std::string, int&gt;(nodeSrc, nodeDst,</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; edge,</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; offsetOrCSId));</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">if</span> (!line.empty())</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; {</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;format not supported, token count = &quot;</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; &lt;&lt; tokenCount &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;format not supported&quot;</span>);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; }</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; }</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; }</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;<span class="comment"> TODO: might need to include elsewhere.</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;<span class="comment"> u32_t lower_bound = 1000;</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;<span class="comment"> for(u32_t i = 0; i &lt; lower_bound; i++)</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;<span class="comment"> pag-&gt;incNodeNum();</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;}</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;</div><div class="ttc" id="ExternalPAG_8cpp_html_a2431eebebb81cd05cc1872e2b7b3744a"><div class="ttname"><a href="ExternalPAG_8cpp.html#a2431eebebb81cd05cc1872e2b7b3744a">ExternalPAGArgs</a></div><div class="ttdeci">llvm::cl::list&lt; std::string &gt; ExternalPAGArgs(&quot;extpags&quot;, llvm::cl::desc(&quot;ExternalPAGs to use during PAG construction (format: func1@/path/to/graph,func2@/foo,...&quot;), llvm::cl::CommaSeparated)</div></div>
70
- <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>
70
+ <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>
71
71
  <div class="ttc" id="classSVF_1_1ExternalPAG_html_a851dbb85d0b80c3942398732ba900e41"><div class="ttname"><a href="classSVF_1_1ExternalPAG.html#a851dbb85d0b80c3942398732ba900e41">SVF::ExternalPAG::functionToExternalPAGEntries</a></div><div class="ttdeci">static Map&lt; const SVFFunction *, Map&lt; int, PAGNode * &gt; &gt; functionToExternalPAGEntries</div><div class="ttdef"><b>Definition:</b> <a href="ExternalPAG_8h_source.html#l00028">ExternalPAG.h:28</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1GenericEdge_html_abe8525c542def8162b094c169a01993b"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">SVF::GenericEdge::getEdgeKind</a></div><div class="ttdeci">GEdgeKind getEdgeKind() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00081">GenericGraph.h:81</a></div></div>
73
73
  <div class="ttc" id="classSVF_1_1PAGEdge_html_a79080505b4744aa8806b55215ac2b0f6ad1f40a044008babd44bff30af846550c"><div class="ttname"><a href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6ad1f40a044008babd44bff30af846550c">SVF::PAGEdge::VariantGep</a></div><div class="ttdef"><b>Definition:</b> <a href="PAGEdge_8h_source.html#l00056">PAGEdge.h:56</a></div></div>
@@ -97,7 +97,7 @@ $(function() {
97
97
  <div class="ttc" id="classSVF_1_1PAGEdge_html_a79080505b4744aa8806b55215ac2b0f6a4b8b2eb7125c259d8d550dd83c51147b"><div class="ttname"><a href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a4b8b2eb7125c259d8d550dd83c51147b">SVF::PAGEdge::NormalGep</a></div><div class="ttdef"><b>Definition:</b> <a href="PAGEdge_8h_source.html#l00056">PAGEdge.h:56</a></div></div>
98
98
  <div class="ttc" id="classSVF_1_1SVFValue_html_adc15c1f7a77158142156fba7524e89c9"><div class="ttname"><a href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">SVF::SVFValue::getName</a></div><div class="ttdeci">const llvm::StringRef getName() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00231">SVFBasicTypes.h:231</a></div></div>
99
99
  <div class="ttc" id="ExternalPAG_8cpp_html_a883ca6e5a9c61af716b49ba81adf4ca3"><div class="ttname"><a href="ExternalPAG_8cpp.html#a883ca6e5a9c61af716b49ba81adf4ca3">outputPAGEdge</a></div><div class="ttdeci">static void outputPAGEdge(raw_ostream &amp;o, PAGEdge *pagEdge)</div><div class="ttdef"><b>Definition:</b> <a href="ExternalPAG_8cpp_source.html#l00196">ExternalPAG.cpp:196</a></div></div>
100
- <div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00038">SVFModule.h:38</a></div></div>
100
+ <div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00041">SVFModule.h:41</a></div></div>
101
101
  <div class="ttc" id="classSVF_1_1PAGNode_html_aa311aaac0f8fbb8650fac9d7662ec795"><div class="ttname"><a href="classSVF_1_1PAGNode.html#aa311aaac0f8fbb8650fac9d7662ec795">SVF::PAGNode::hasOutgoingEdges</a></div><div class="ttdeci">bool hasOutgoingEdges(PAGEdge::PEDGEK kind) const</div><div class="ttdoc">Has outgoing PAG edges. </div><div class="ttdef"><b>Definition:</b> <a href="PAGNode_8h_source.html#l00210">PAGNode.h:210</a></div></div>
102
102
  <div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00100">SVFBasicTypes.h:100</a></div></div>
103
103
  <div class="ttc" id="classSVF_1_1CallSite_html_a46e8ffe430bb2711abaafc9d7864909e"><div class="ttname"><a href="classSVF_1_1CallSite.html#a46e8ffe430bb2711abaafc9d7864909e">SVF::CallSite::arg_end</a></div><div class="ttdeci">User::const_op_iterator arg_end() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00325">BasicTypes.h:325</a></div></div>
@@ -109,13 +109,13 @@ $(function() {
109
109
  <div class="ttc" id="classSVF_1_1PAG_html_ac8910c7330638bdf31c23d4cc03ba9c5"><div class="ttname"><a href="classSVF_1_1PAG.html#ac8910c7330638bdf31c23d4cc03ba9c5">SVF::PAG::getPAG</a></div><div class="ttdeci">static PAG * getPAG(bool buildFromFile=false)</div><div class="ttdoc">Singleton design here to make sure we only have one instance during any analysis. ...</div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00162">PAG.h:162</a></div></div>
110
110
  <div class="ttc" id="classSVF_1_1PAGEdge_html_a79080505b4744aa8806b55215ac2b0f6aab0965e92d7414417a77f925efb79dac"><div class="ttname"><a href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6aab0965e92d7414417a77f925efb79dac">SVF::PAGEdge::BinaryOp</a></div><div class="ttdef"><b>Definition:</b> <a href="PAGEdge_8h_source.html#l00056">PAGEdge.h:56</a></div></div>
111
111
  <div class="ttc" id="classSVF_1_1PAG_html_addb513f5571acf2854adc878e58cf523"><div class="ttname"><a href="classSVF_1_1PAG.html#addb513f5571acf2854adc878e58cf523">SVF::PAG::addBlackHoleAddrPE</a></div><div class="ttdeci">PAGEdge * addBlackHoleAddrPE(NodeID node)</div><div class="ttdoc">Set a pointer points-to black hole (e.g. int2ptr) </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8cpp_source.html#l00530">PAG.cpp:530</a></div></div>
112
- <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>
112
+ <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>
113
113
  <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>
114
114
  <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>
115
- <div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph&lt; PAGNode, PAGEdge &gt;::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00337">GenericGraph.h:337</a></div></div>
115
+ <div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph&lt; PAGNode, PAGEdge &gt;::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00338">GenericGraph.h:338</a></div></div>
116
116
  <div class="ttc" id="classSVF_1_1RetPN_html_acedd9e576a077f96c0638065d4c70bcf"><div class="ttname"><a href="classSVF_1_1RetPN.html#acedd9e576a077f96c0638065d4c70bcf">SVF::RetPN::classof</a></div><div class="ttdeci">static bool classof(const RetPN *)</div><div class="ttdef"><b>Definition:</b> <a href="PAGNode_8h_source.html#l00583">PAGNode.h:583</a></div></div>
117
117
  <div class="ttc" id="classSVF_1_1GenericEdge_html_aeaa31a2c8479e831b36ce2e2582ceb86"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">SVF::GenericEdge::getDstNode</a></div><div class="ttdeci">NodeType * getDstNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00089">GenericGraph.h:89</a></div></div>
118
- <div class="ttc" id="classSVF_1_1SVFModule_html_a54c2bc2cb7cda0d74f4cadc676461b60"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a54c2bc2cb7cda0d74f4cadc676461b60">SVF::SVFModule::pagFileName</a></div><div class="ttdeci">static std::string pagFileName()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00077">SVFModule.h:77</a></div></div>
118
+ <div class="ttc" id="classSVF_1_1SVFModule_html_a54c2bc2cb7cda0d74f4cadc676461b60"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a54c2bc2cb7cda0d74f4cadc676461b60">SVF::SVFModule::pagFileName</a></div><div class="ttdeci">static std::string pagFileName()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00093">SVFModule.h:93</a></div></div>
119
119
  <div class="ttc" id="ExternalPAG_8cpp_html_a99fd9118248348106730e69c576c6c12"><div class="ttname"><a href="ExternalPAG_8cpp.html#a99fd9118248348106730e69c576c6c12">DumpPAGFunctions</a></div><div class="ttdeci">llvm::cl::list&lt; std::string &gt; DumpPAGFunctions(&quot;dump-function-pags&quot;, llvm::cl::desc(&quot;Dump PAG for functions&quot;), llvm::cl::CommaSeparated)</div></div>
120
120
  <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>
121
121
  <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>
@@ -123,7 +123,7 @@ $(function() {
123
123
  <div class="ttc" id="classSVF_1_1PAG_html_a6ac3b5eb1f34ac2257d0ba2556ed52c0"><div class="ttname"><a href="classSVF_1_1PAG.html#a6ac3b5eb1f34ac2257d0ba2556ed52c0">SVF::PAG::addAddrPE</a></div><div class="ttdeci">AddrPE * addAddrPE(NodeID src, NodeID dst)</div><div class="ttdoc">Add Address edge. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8cpp_source.html#l00375">PAG.cpp:375</a></div></div>
124
124
  <div class="ttc" id="namespaceSVF_html_a2db29836a72e8d86e9baa6d8d55d2978"><div class="ttname"><a href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">SVF::Size_t</a></div><div class="ttdeci">signed long Size_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00078">SVFBasicTypes.h:78</a></div></div>
125
125
  <div class="ttc" id="classSVF_1_1NormalGepPE_html"><div class="ttname"><a href="classSVF_1_1NormalGepPE.html">SVF::NormalGepPE</a></div><div class="ttdef"><b>Definition:</b> <a href="PAGEdge_8h_source.html#l00472">PAGEdge.h:472</a></div></div>
126
- <div class="ttc" id="classSVF_1_1GenericNode_html_a2d9cd758d6f8c5189d9b90b74f43e009"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">SVF::GenericNode::getOutEdges</a></div><div class="ttdeci">const GEdgeSetTy &amp; getOutEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00177">GenericGraph.h:177</a></div></div>
126
+ <div class="ttc" id="classSVF_1_1GenericNode_html_a2d9cd758d6f8c5189d9b90b74f43e009"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">SVF::GenericNode::getOutEdges</a></div><div class="ttdeci">const GEdgeSetTy &amp; getOutEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00178">GenericGraph.h:178</a></div></div>
127
127
  <div class="ttc" id="classSVF_1_1ExternalPAG_html_a865a75aec231c9122842d2bdafeb4f6b"><div class="ttname"><a href="classSVF_1_1ExternalPAG.html#a865a75aec231c9122842d2bdafeb4f6b">SVF::ExternalPAG::initialise</a></div><div class="ttdeci">static void initialise(SVFModule *svfModule)</div><div class="ttdef"><b>Definition:</b> <a href="ExternalPAG_8cpp_source.html#l00054">ExternalPAG.cpp:54</a></div></div>
128
128
  <div class="ttc" id="classSVF_1_1PAGEdge_html_a79080505b4744aa8806b55215ac2b0f6a8fcebc849a231c3c87dddbf0ab5a2167"><div class="ttname"><a href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a8fcebc849a231c3c87dddbf0ab5a2167">SVF::PAGEdge::Load</a></div><div class="ttdef"><b>Definition:</b> <a href="PAGEdge_8h_source.html#l00056">PAGEdge.h:56</a></div></div>
129
129
  <div class="ttc" id="classSVF_1_1CallSite_html_aabc0054b7f4e06b7ca0b6072746984e6"><div class="ttname"><a href="classSVF_1_1CallSite.html#aabc0054b7f4e06b7ca0b6072746984e6">SVF::CallSite::arg_begin</a></div><div class="ttdeci">User::const_op_iterator arg_begin() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00324">BasicTypes.h:324</a></div></div>
@@ -149,7 +149,7 @@ $(function() {
149
149
  <div class="ttc" id="classSVF_1_1CallBlockNode_html_ad3d50024efcfa94b1246c982b43aff2f"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">SVF::CallBlockNode::getCallSite</a></div><div class="ttdeci">const Instruction * getCallSite() const</div><div class="ttdoc">Return callsite. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00381">ICFGNode.h:381</a></div></div>
150
150
  <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
151
151
  <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00313">BasicTypes.h:313</a></div></div>
152
- <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>
152
+ <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>
153
153
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a4f457db1cfa0d4f94762a306c0ac3757"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a4f457db1cfa0d4f94762a306c0ac3757">SVF::SVFUtil::getFunction</a></div><div class="ttdeci">const SVFFunction * getFunction(StringRef name)</div><div class="ttdoc">Get the corresponding Function based on its name. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00227">SVFUtil.h:227</a></div></div>
154
154
  <div class="ttc" id="classSVF_1_1PAG_html_adbe031ff60dbcd981ff68e30a2e677ef"><div class="ttname"><a href="classSVF_1_1PAG.html#adbe031ff60dbcd981ff68e30a2e677ef">SVF::PAG::addStorePE</a></div><div class="ttdeci">StorePE * addStorePE(NodeID src, NodeID dst, const IntraBlockNode *val)</div><div class="ttdoc">Add Store edge. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8cpp_source.html#l00479">PAG.cpp:479</a></div></div>
155
155
  <div class="ttc" id="classSVF_1_1CallSite_html_a9b7d53a345875e4e6c72eb23ac6475de"><div class="ttname"><a href="classSVF_1_1CallSite.html#a9b7d53a345875e4e6c72eb23ac6475de">SVF::CallSite::getType</a></div><div class="ttdeci">Type * getType() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00323">BasicTypes.h:323</a></div></div>
@@ -160,7 +160,7 @@ $(function() {
160
160
  <div class="ttc" id="classSVF_1_1ExternalPAG_html"><div class="ttname"><a href="classSVF_1_1ExternalPAG.html">SVF::ExternalPAG</a></div><div class="ttdef"><b>Definition:</b> <a href="ExternalPAG_8h_source.html#l00022">ExternalPAG.h:22</a></div></div>
161
161
  <div class="ttc" id="classSVF_1_1PAGEdge_html_a79080505b4744aa8806b55215ac2b0f6a90aa1e3ce21dcd54cf433610b427ba96"><div class="ttname"><a href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a90aa1e3ce21dcd54cf433610b427ba96">SVF::PAGEdge::Cmp</a></div><div class="ttdef"><b>Definition:</b> <a href="PAGEdge_8h_source.html#l00056">PAGEdge.h:56</a></div></div>
162
162
  <div class="ttc" id="classSVF_1_1ExternalPAG_html_a50cf3da29657a69d66396a6951f628d8"><div class="ttname"><a href="classSVF_1_1ExternalPAG.html#a50cf3da29657a69d66396a6951f628d8">SVF::ExternalPAG::parseExternalPAGs</a></div><div class="ttdeci">static std::vector&lt; std::pair&lt; std::string, std::string &gt; &gt; parseExternalPAGs(llvm::cl::list&lt; std::string &gt; &amp;extpagsArgs)</div><div class="ttdef"><b>Definition:</b> <a href="ExternalPAG_8cpp_source.html#l00036">ExternalPAG.cpp:36</a></div></div>
163
- <div class="ttc" id="classSVF_1_1SVFModule_html_ac630e9f18a239ac6b3b88d05e64140c5"><div class="ttname"><a href="classSVF_1_1SVFModule.html#ac630e9f18a239ac6b3b88d05e64140c5">SVF::SVFModule::setPagFromTXT</a></div><div class="ttdeci">static void setPagFromTXT(std::string txt)</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00072">SVFModule.h:72</a></div></div>
163
+ <div class="ttc" id="classSVF_1_1SVFModule_html_ac630e9f18a239ac6b3b88d05e64140c5"><div class="ttname"><a href="classSVF_1_1SVFModule.html#ac630e9f18a239ac6b3b88d05e64140c5">SVF::SVFModule::setPagFromTXT</a></div><div class="ttdeci">static void setPagFromTXT(std::string txt)</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00088">SVFModule.h:88</a></div></div>
164
164
  <div class="ttc" id="classSVF_1_1PAG_html_a0dc823946e0b86027b6093fe7c907543"><div class="ttname"><a href="classSVF_1_1PAG.html#a0dc823946e0b86027b6093fe7c907543">SVF::PAG::addLoadPE</a></div><div class="ttdeci">LoadPE * addLoadPE(NodeID src, NodeID dst)</div><div class="ttdoc">Add Load edge. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8cpp_source.html#l00461">PAG.cpp:461</a></div></div>
165
165
  <div class="ttc" id="classSVF_1_1CallBlockNode_html"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html">SVF::CallBlockNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
166
166
  <div class="ttc" id="classSVF_1_1ExternalPAG_html_ae010036c742cfdf95fad5355f0100984"><div class="ttname"><a href="classSVF_1_1ExternalPAG.html#ae010036c742cfdf95fad5355f0100984">SVF::ExternalPAG::readFromFile</a></div><div class="ttdeci">void readFromFile(std::string filename)</div><div class="ttdef"><b>Definition:</b> <a href="ExternalPAG_8cpp_source.html#l00507">ExternalPAG.cpp:507</a></div></div>
@@ -80,7 +80,7 @@ $(function() {
80
80
  <div class="ttc" id="classSVF_1_1ExternalPAG_html_ae8d9064d781ed859cba85b99a69070ac"><div class="ttname"><a href="classSVF_1_1ExternalPAG.html#ae8d9064d781ed859cba85b99a69070ac">SVF::ExternalPAG::argNodes</a></div><div class="ttdeci">Map&lt; int, NodeID &gt; argNodes</div><div class="ttdef"><b>Definition:</b> <a href="ExternalPAG_8h_source.html#l00048">ExternalPAG.h:48</a></div></div>
81
81
  <div class="ttc" id="classSVF_1_1ExternalPAG_html_ab32ce97e36e69379bc6b70c1657bbaa6"><div class="ttname"><a href="classSVF_1_1ExternalPAG.html#ab32ce97e36e69379bc6b70c1657bbaa6">SVF::ExternalPAG::getReturnNode</a></div><div class="ttdeci">NodeID getReturnNode() const</div><div class="ttdef"><b>Definition:</b> <a href="ExternalPAG_8h_source.html#l00122">ExternalPAG.h:122</a></div></div>
82
82
  <div class="ttc" id="classSVF_1_1ExternalPAG_html_a7401db95a642fc218e6337dce61b98e1"><div class="ttname"><a href="classSVF_1_1ExternalPAG.html#a7401db95a642fc218e6337dce61b98e1">SVF::ExternalPAG::ExternalPAG</a></div><div class="ttdeci">ExternalPAG(std::string functionName)</div><div class="ttdef"><b>Definition:</b> <a href="ExternalPAG_8h_source.html#l00079">ExternalPAG.h:79</a></div></div>
83
- <div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00038">SVFModule.h:38</a></div></div>
83
+ <div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00041">SVFModule.h:41</a></div></div>
84
84
  <div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00100">SVFBasicTypes.h:100</a></div></div>
85
85
  <div class="ttc" id="classSVF_1_1ExternalPAG_html_a1d35176325629ae64beb28d5474dd8d7"><div class="ttname"><a href="classSVF_1_1ExternalPAG.html#a1d35176325629ae64beb28d5474dd8d7">SVF::ExternalPAG::getValueNodes</a></div><div class="ttdeci">NodeSet &amp; getValueNodes()</div><div class="ttdef"><b>Definition:</b> <a href="ExternalPAG_8h_source.html#l00104">ExternalPAG.h:104</a></div></div>
86
86
  <div class="ttc" id="PAGNode_8h_html"><div class="ttname"><a href="PAGNode_8h.html">PAGNode.h</a></div></div>