svf-tools 1.0.342 → 1.0.346

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 (420) hide show
  1. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +2 -2
  2. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +8 -8
  3. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +9 -9
  4. package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
  5. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
  6. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +7 -7
  7. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +5 -5
  8. package/SVF-doxygen/html/html/DDAClient_8h_source.html +3 -3
  9. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +7 -7
  10. package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +3 -3
  11. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +3 -3
  12. package/SVF-doxygen/html/html/FileChecker_8cpp_source.html +3 -3
  13. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
  14. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +7 -7
  15. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +8 -8
  16. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +2 -2
  17. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +6 -6
  18. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +11 -11
  19. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +15 -15
  20. package/SVF-doxygen/html/html/ICFGNode_8h.html +7 -7
  21. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +69 -69
  22. package/SVF-doxygen/html/html/ICFGStat_8h_source.html +1 -1
  23. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +45 -44
  24. package/SVF-doxygen/html/html/ICFG_8h_source.html +34 -34
  25. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +9 -9
  26. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +6 -6
  27. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
  28. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +5 -5
  29. package/SVF-doxygen/html/html/MHP_8cpp_source.html +9 -9
  30. package/SVF-doxygen/html/html/MHP_8h_source.html +6 -6
  31. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +9 -9
  32. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +2 -2
  33. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
  34. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +26 -26
  35. package/SVF-doxygen/html/html/MemRegion_8h_source.html +18 -18
  36. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +9 -9
  37. package/SVF-doxygen/html/html/MemSSA_8h_source.html +12 -12
  38. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +41 -41
  39. package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +47 -46
  40. package/SVF-doxygen/html/html/Options_8cpp_source.html +1 -1
  41. package/SVF-doxygen/html/html/PCG_8cpp_source.html +2 -2
  42. package/SVF-doxygen/html/html/PCG_8h_source.html +4 -4
  43. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +10 -10
  44. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +17 -17
  45. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +6 -6
  46. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +2 -2
  47. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +16 -16
  48. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +17 -17
  49. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +4 -4
  50. package/SVF-doxygen/html/html/ProgSlice_8h_source.html +4 -4
  51. package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +3 -3
  52. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +17 -17
  53. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +2 -2
  54. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +9 -9
  55. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +31 -31
  56. package/SVF-doxygen/html/html/SVFG_8h_source.html +27 -27
  57. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +3 -3
  58. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +13 -13
  59. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +9 -9
  60. package/SVF-doxygen/html/html/SVFIR_8h_source.html +31 -31
  61. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +14 -14
  62. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +7 -7
  63. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +2 -2
  64. package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +4 -4
  65. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
  66. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +2 -2
  67. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +2 -2
  68. package/SVF-doxygen/html/html/TCT_8h_source.html +3 -3
  69. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +15 -15
  70. package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +20 -20
  71. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +4 -4
  72. package/SVF-doxygen/html/html/TypeAnalysis_8h_source.html +2 -2
  73. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +3 -3
  74. package/SVF-doxygen/html/html/VFGNode_8h_source.html +11 -11
  75. package/SVF-doxygen/html/html/VFG_8cpp_source.html +19 -19
  76. package/SVF-doxygen/html/html/VFG_8h_source.html +19 -19
  77. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +6 -6
  78. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
  79. package/SVF-doxygen/html/html/annotated.html +17 -17
  80. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode-members.html +3 -3
  81. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +23 -23
  82. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode-members.html +3 -3
  83. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +23 -23
  84. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode-members.html +3 -3
  85. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +22 -22
  86. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode-members.html +3 -3
  87. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +24 -24
  88. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient-members.html +1 -1
  89. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +7 -7
  90. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +12 -12
  91. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +51 -51
  92. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +12 -12
  93. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +32 -32
  94. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +12 -12
  95. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +32 -32
  96. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +12 -12
  97. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +32 -32
  98. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +12 -12
  99. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +32 -32
  100. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +12 -12
  101. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +34 -34
  102. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +12 -12
  103. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +32 -32
  104. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +12 -12
  105. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +32 -32
  106. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +12 -12
  107. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +38 -38
  108. package/SVF-doxygen/html/html/classSVF_1_1CallCHI-members.html +3 -3
  109. package/SVF-doxygen/html/html/classSVF_1_1CallCHI.html +22 -22
  110. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +4 -4
  111. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode-members.html +158 -0
  112. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +852 -0
  113. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.png +0 -0
  114. package/SVF-doxygen/html/html/classSVF_1_1CallMU-members.html +3 -3
  115. package/SVF-doxygen/html/html/classSVF_1_1CallMU.html +22 -22
  116. package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +4 -4
  117. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +27 -27
  118. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +12 -12
  119. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +31 -31
  120. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +2 -2
  121. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +14 -14
  122. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +60 -60
  123. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver-members.html +1 -1
  124. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +16 -16
  125. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG-members.html +21 -21
  126. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +51 -51
  127. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker-members.html +5 -5
  128. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +16 -16
  129. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +12 -12
  130. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +33 -33
  131. package/SVF-doxygen/html/html/classSVF_1_1FileChecker-members.html +5 -5
  132. package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +20 -20
  133. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +11 -11
  134. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +52 -52
  135. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +12 -12
  136. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +45 -45
  137. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +12 -12
  138. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +33 -33
  139. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis-members.html +1 -1
  140. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +21 -21
  141. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode-members.html +3 -3
  142. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +19 -19
  143. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode-members.html +3 -3
  144. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +18 -18
  145. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode-members.html +150 -0
  146. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +618 -0
  147. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.png +0 -0
  148. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode-members.html +149 -0
  149. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +624 -0
  150. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.png +0 -0
  151. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient-members.html +1 -1
  152. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +12 -12
  153. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +3 -3
  154. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
  155. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode-members.html +144 -0
  156. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +413 -0
  157. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.png +0 -0
  158. package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge-members.html +3 -3
  159. package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge.html +11 -11
  160. package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +22 -22
  161. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +191 -184
  162. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder-members.html +4 -4
  163. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +69 -66
  164. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +9 -9
  165. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.png +0 -0
  166. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +11 -11
  167. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +30 -30
  168. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +3 -3
  169. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG-members.html +21 -21
  170. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +51 -51
  171. package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode-members.html +144 -0
  172. package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode.html +399 -0
  173. package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode.png +0 -0
  174. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode-members.html +2 -2
  175. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +23 -23
  176. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode-members.html +2 -2
  177. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +20 -20
  178. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG-members.html +21 -21
  179. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +51 -51
  180. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode-members.html +146 -0
  181. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +494 -0
  182. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.png +0 -0
  183. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker-members.html +5 -5
  184. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +61 -61
  185. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +14 -14
  186. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator-members.html +1 -1
  187. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +10 -10
  188. package/SVF-doxygen/html/html/classSVF_1_1MHP-members.html +1 -1
  189. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +22 -22
  190. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator-members.html +24 -24
  191. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +196 -196
  192. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +8 -8
  193. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +6 -6
  194. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +5 -5
  195. package/SVF-doxygen/html/html/classSVF_1_1MemSSA-members.html +10 -10
  196. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +77 -77
  197. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator-members.html +5 -4
  198. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +43 -39
  199. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +90 -90
  200. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
  201. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +2 -2
  202. package/SVF-doxygen/html/html/classSVF_1_1PCG-members.html +1 -1
  203. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +13 -13
  204. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph-members.html +15 -15
  205. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +118 -118
  206. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge-members.html +3 -3
  207. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +32 -32
  208. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +12 -12
  209. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +107 -107
  210. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice-members.html +2 -2
  211. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +18 -18
  212. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode-members.html +153 -0
  213. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +696 -0
  214. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.png +0 -0
  215. package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +4 -4
  216. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +26 -26
  217. package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +24 -24
  218. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +159 -159
  219. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
  220. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +24 -24
  221. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +76 -76
  222. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +19 -19
  223. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +132 -132
  224. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +4 -4
  225. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +58 -58
  226. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI-members.html +4 -4
  227. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +20 -20
  228. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder-members.html +1 -1
  229. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +13 -13
  230. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA-members.html +1 -1
  231. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +7 -7
  232. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +12 -12
  233. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +32 -32
  234. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt-members.html +1 -1
  235. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +7 -7
  236. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +4 -4
  237. package/SVF-doxygen/html/html/classSVF_1_1TCT-members.html +1 -1
  238. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +22 -22
  239. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +4 -4
  240. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +15 -15
  241. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +4 -4
  242. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +15 -15
  243. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph-members.html +40 -40
  244. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +220 -220
  245. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +10 -10
  246. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge-members.html +3 -3
  247. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +11 -11
  248. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge-members.html +3 -3
  249. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +11 -11
  250. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +12 -12
  251. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +41 -41
  252. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +3 -3
  253. package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +9 -9
  254. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +96 -96
  255. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +12 -12
  256. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +39 -39
  257. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +12 -12
  258. package/SVF-doxygen/html/html/classes.html +16 -16
  259. package/SVF-doxygen/html/html/functions_a.html +59 -59
  260. package/SVF-doxygen/html/html/functions_c.html +65 -67
  261. package/SVF-doxygen/html/html/functions_eval_r.html +3 -0
  262. package/SVF-doxygen/html/html/functions_f.html +14 -14
  263. package/SVF-doxygen/html/html/functions_func.html +56 -56
  264. package/SVF-doxygen/html/html/functions_func_c.html +28 -28
  265. package/SVF-doxygen/html/html/functions_func_f.html +6 -6
  266. package/SVF-doxygen/html/html/functions_func_g.html +86 -86
  267. package/SVF-doxygen/html/html/functions_func_h.html +17 -17
  268. package/SVF-doxygen/html/html/functions_func_i.html +12 -12
  269. package/SVF-doxygen/html/html/functions_func_m.html +1 -1
  270. package/SVF-doxygen/html/html/functions_func_p.html +1 -1
  271. package/SVF-doxygen/html/html/functions_func_r.html +6 -6
  272. package/SVF-doxygen/html/html/functions_func_s.html +2 -2
  273. package/SVF-doxygen/html/html/functions_func_t.html +7 -7
  274. package/SVF-doxygen/html/html/functions_func_u.html +3 -3
  275. package/SVF-doxygen/html/html/functions_g.html +88 -88
  276. package/SVF-doxygen/html/html/functions_h.html +16 -16
  277. package/SVF-doxygen/html/html/functions_i.html +22 -22
  278. package/SVF-doxygen/html/html/functions_l.html +3 -3
  279. package/SVF-doxygen/html/html/functions_m.html +2 -2
  280. package/SVF-doxygen/html/html/functions_o.html +13 -13
  281. package/SVF-doxygen/html/html/functions_p.html +14 -14
  282. package/SVF-doxygen/html/html/functions_r.html +13 -12
  283. package/SVF-doxygen/html/html/functions_s.html +13 -13
  284. package/SVF-doxygen/html/html/functions_t.html +12 -14
  285. package/SVF-doxygen/html/html/functions_type.html +1 -1
  286. package/SVF-doxygen/html/html/functions_type_c.html +24 -24
  287. package/SVF-doxygen/html/html/functions_type_f.html +3 -3
  288. package/SVF-doxygen/html/html/functions_type_i.html +2 -2
  289. package/SVF-doxygen/html/html/functions_type_p.html +1 -1
  290. package/SVF-doxygen/html/html/functions_type_s.html +1 -1
  291. package/SVF-doxygen/html/html/functions_type_v.html +2 -2
  292. package/SVF-doxygen/html/html/functions_u.html +3 -3
  293. package/SVF-doxygen/html/html/functions_v.html +8 -8
  294. package/SVF-doxygen/html/html/functions_vars_a.html +2 -2
  295. package/SVF-doxygen/html/html/functions_vars_c.html +11 -11
  296. package/SVF-doxygen/html/html/functions_vars_f.html +5 -5
  297. package/SVF-doxygen/html/html/functions_vars_g.html +1 -1
  298. package/SVF-doxygen/html/html/functions_vars_i.html +3 -3
  299. package/SVF-doxygen/html/html/functions_vars_r.html +1 -1
  300. package/SVF-doxygen/html/html/functions_w.html +9 -5
  301. package/SVF-doxygen/html/html/hierarchy.html +7 -7
  302. package/SVF-doxygen/html/html/namespaceSVF.html +11 -11
  303. package/SVF-doxygen/html/html/search/all_1.js +58 -58
  304. package/SVF-doxygen/html/html/search/all_10.js +8 -8
  305. package/SVF-doxygen/html/html/search/all_12.js +8 -7
  306. package/SVF-doxygen/html/html/search/all_13.js +11 -11
  307. package/SVF-doxygen/html/html/search/all_14.js +8 -8
  308. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  309. package/SVF-doxygen/html/html/search/all_16.js +4 -4
  310. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  311. package/SVF-doxygen/html/html/search/all_3.js +35 -34
  312. package/SVF-doxygen/html/html/search/all_6.js +12 -12
  313. package/SVF-doxygen/html/html/search/all_7.js +62 -61
  314. package/SVF-doxygen/html/html/search/all_8.js +17 -17
  315. package/SVF-doxygen/html/html/search/all_9.js +16 -16
  316. package/SVF-doxygen/html/html/search/all_c.js +2 -2
  317. package/SVF-doxygen/html/html/search/all_d.js +5 -5
  318. package/SVF-doxygen/html/html/search/all_e.js +3 -3
  319. package/SVF-doxygen/html/html/search/all_f.js +3 -3
  320. package/SVF-doxygen/html/html/search/classes_2.js +1 -1
  321. package/SVF-doxygen/html/html/search/classes_5.js +2 -2
  322. package/SVF-doxygen/html/html/search/classes_6.js +1 -1
  323. package/SVF-doxygen/html/html/search/classes_8.js +2 -2
  324. package/SVF-doxygen/html/html/search/classes_e.js +1 -1
  325. package/SVF-doxygen/html/html/search/enumvalues_e.js +2 -1
  326. package/SVF-doxygen/html/html/search/functions_0.js +55 -55
  327. package/SVF-doxygen/html/html/search/functions_10.js +3 -3
  328. package/SVF-doxygen/html/html/search/functions_11.js +4 -4
  329. package/SVF-doxygen/html/html/search/functions_12.js +1 -1
  330. package/SVF-doxygen/html/html/search/functions_2.js +10 -10
  331. package/SVF-doxygen/html/html/search/functions_5.js +4 -4
  332. package/SVF-doxygen/html/html/search/functions_6.js +61 -61
  333. package/SVF-doxygen/html/html/search/functions_7.js +17 -17
  334. package/SVF-doxygen/html/html/search/functions_8.js +12 -12
  335. package/SVF-doxygen/html/html/search/functions_b.js +1 -1
  336. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  337. package/SVF-doxygen/html/html/search/functions_f.js +4 -4
  338. package/SVF-doxygen/html/html/search/typedefs_0.js +1 -1
  339. package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
  340. package/SVF-doxygen/html/html/search/typedefs_14.js +1 -1
  341. package/SVF-doxygen/html/html/search/typedefs_2.js +21 -21
  342. package/SVF-doxygen/html/html/search/typedefs_5.js +3 -3
  343. package/SVF-doxygen/html/html/search/typedefs_8.js +2 -2
  344. package/SVF-doxygen/html/html/search/typedefs_f.js +1 -1
  345. package/SVF-doxygen/html/html/search/variables_1.js +2 -2
  346. package/SVF-doxygen/html/html/search/variables_12.js +1 -1
  347. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  348. package/SVF-doxygen/html/html/search/variables_3.js +4 -4
  349. package/SVF-doxygen/html/html/search/variables_6.js +5 -5
  350. package/SVF-doxygen/html/html/search/variables_7.js +1 -1
  351. package/SVF-doxygen/html/html/search/variables_9.js +1 -1
  352. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  353. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  354. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +22 -22
  355. package/include/DDA/ContextDDA.h +3 -3
  356. package/include/DDA/DDAClient.h +2 -2
  357. package/include/DDA/DDAVFSolver.h +2 -2
  358. package/include/DDA/FlowDDA.h +2 -2
  359. package/include/Graphs/ICFG.h +33 -33
  360. package/include/Graphs/ICFGNode.h +33 -33
  361. package/include/Graphs/ICFGStat.h +11 -11
  362. package/include/Graphs/PTACallGraph.h +19 -19
  363. package/include/Graphs/SVFG.h +16 -16
  364. package/include/Graphs/SVFGNode.h +14 -14
  365. package/include/Graphs/SVFGOPT.h +1 -1
  366. package/include/Graphs/ThreadCallGraph.h +25 -25
  367. package/include/Graphs/VFG.h +10 -10
  368. package/include/Graphs/VFGNode.h +8 -8
  369. package/include/MSSA/MSSAMuChi.h +6 -6
  370. package/include/MSSA/MemRegion.h +24 -24
  371. package/include/MSSA/MemSSA.h +10 -10
  372. package/include/MTA/LockResultValidator.h +2 -2
  373. package/include/MTA/MHP.h +4 -4
  374. package/include/MTA/PCG.h +1 -1
  375. package/include/MTA/TCT.h +2 -2
  376. package/include/MemoryModel/PointerAnalysis.h +12 -12
  377. package/include/MemoryModel/SVFIR.h +21 -21
  378. package/include/MemoryModel/SVFStatements.h +11 -11
  379. package/include/SABER/LeakChecker.h +4 -4
  380. package/include/SABER/ProgSlice.h +2 -2
  381. package/include/SABER/SaberCheckerAPI.h +4 -4
  382. package/include/SABER/SaberSVFGBuilder.h +1 -1
  383. package/include/SABER/SrcSnkDDA.h +1 -1
  384. package/include/SVF-FE/ICFGBuilder.h +4 -4
  385. package/include/SVF-FE/SVFIRBuilder.h +5 -5
  386. package/include/Util/NodeIDAllocator.h +3 -0
  387. package/lib/DDA/ContextDDA.cpp +3 -3
  388. package/lib/DDA/DDAClient.cpp +1 -1
  389. package/lib/DDA/FlowDDA.cpp +1 -1
  390. package/lib/Graphs/ICFG.cpp +55 -50
  391. package/lib/Graphs/PTACallGraph.cpp +5 -5
  392. package/lib/Graphs/SVFG.cpp +7 -7
  393. package/lib/Graphs/ThreadCallGraph.cpp +6 -6
  394. package/lib/Graphs/VFG.cpp +6 -6
  395. package/lib/MSSA/MemRegion.cpp +17 -17
  396. package/lib/MSSA/MemSSA.cpp +3 -3
  397. package/lib/MTA/LockAnalysis.cpp +4 -4
  398. package/lib/MTA/MHP.cpp +5 -5
  399. package/lib/MTA/MTAResultValidator.cpp +1 -1
  400. package/lib/MTA/PCG.cpp +1 -1
  401. package/lib/MemoryModel/PointerAnalysis.cpp +10 -10
  402. package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
  403. package/lib/MemoryModel/SVFIR.cpp +5 -5
  404. package/lib/SABER/DoubleFreeChecker.cpp +1 -1
  405. package/lib/SABER/FileChecker.cpp +2 -2
  406. package/lib/SABER/LeakChecker.cpp +8 -8
  407. package/lib/SABER/ProgSlice.cpp +2 -2
  408. package/lib/SVF-FE/CallGraphBuilder.cpp +4 -4
  409. package/lib/SVF-FE/Graph2Json.cpp +5 -5
  410. package/lib/SVF-FE/ICFGBuilder.cpp +31 -25
  411. package/lib/SVF-FE/SVFIRBuilder.cpp +8 -8
  412. package/lib/Util/NodeIDAllocator.cpp +12 -0
  413. package/lib/Util/Options.cpp +2 -1
  414. package/lib/Util/TypeBasedHeapCloning.cpp +1 -1
  415. package/lib/WPA/Andersen.cpp +3 -3
  416. package/lib/WPA/FlowSensitive.cpp +2 -2
  417. package/lib/WPA/TypeAnalysis.cpp +1 -1
  418. package/lib/WPA/VersionedFlowSensitive.cpp +4 -4
  419. package/lib/WPA/WPAPass.cpp +4 -4
  420. package/package.json +1 -1
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">WPAPass.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="WPAPass_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">//===- WPAPass.cpp -- Whole program analysis pass------------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===-----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * @file: WPA.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * @author: yesen</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * @date: 10/06/2014</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * @version: 1.0</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> * @section LICENSE</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"> * @section DESCRIPTION</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>&quot;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>&quot;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="WPAPass_8h.html">WPA/WPAPass.h</a>&quot;</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>&quot;</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="AndersenSFR_8h.html">WPA/AndersenSFR.h</a>&quot;</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="FlowSensitive_8h.html">WPA/FlowSensitive.h</a>&quot;</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="FlowSensitiveTBHC_8h.html">WPA/FlowSensitiveTBHC.h</a>&quot;</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="VersionedFlowSensitive_8h.html">WPA/VersionedFlowSensitive.h</a>&quot;</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="TypeAnalysis_8h.html">WPA/TypeAnalysis.h</a>&quot;</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Steensgaard_8h.html">WPA/Steensgaard.h</a>&quot;</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFIRBuilder_8h.html">SVF-FE/SVFIRBuilder.h</a>&quot;</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</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="keywordtype">char</span> <a class="code" href="classSVF_1_1WPAPass.html#a2674527c92cdef223e655d449f0811d4">WPAPass::ID</a> = 0;</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;<span class="keyword">static</span> llvm::RegisterPass&lt;WPAPass&gt; <a class="code" href="WPAPass_8cpp.html#a0a306f89dc7cb0253059399b0599c678">WHOLEPROGRAMPA</a>(<span class="stringliteral">&quot;wpa&quot;</span>,</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="stringliteral">&quot;Whole Program Pointer AnalysWPAis Pass&quot;</span>);</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;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#a7ea8006b7e9237a470dfd34ad633826b"> 60</a></span>&#160;<a class="code" href="classSVF_1_1WPAPass.html#a7ea8006b7e9237a470dfd34ad633826b">WPAPass::~WPAPass</a>()</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;{</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; PTAVector::const_iterator it = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.begin();</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; PTAVector::const_iterator eit = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.end();</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">for</span> (; it != eit; ++it)</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_1PointerAnalysis.html">PointerAnalysis</a>* pta = *it;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">delete</span> pta;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.clear();</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="l00075"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#a394dcd976c1ef08d9cadcba8f5d07c75"> 75</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPAPass.html#a394dcd976c1ef08d9cadcba8f5d07c75">WPAPass::runOnModule</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;{</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i&lt;= <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85adb3d4cbd8c38c1c498bc51198626a790">PointerAnalysis::Default_PTA</a>; i++)</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="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a1211da4c36f1fcc65235891f31d87038">Options::PASelected</a>.isSet(i))</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a2d6a270c3a71b5963eaed37839355fd3">runPointerAnalysis</a>(svfModule, i);</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="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.empty() &amp;&amp; <span class="stringliteral">&quot;No pointer analysis is specified.\n&quot;</span>);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#a1f47c1cb5a64bab9a6b8ac38103416ac"> 88</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1WPAPass.html#a394dcd976c1ef08d9cadcba8f5d07c75">WPAPass::runOnModule</a>(<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; module)</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;{</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae919327019b5014f64b754dbdeb07f75">buildSVFModule</a>(module);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a394dcd976c1ef08d9cadcba8f5d07c75">runOnModule</a>(svfModule);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;}</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#a2d6a270c3a71b5963eaed37839355fd3"> 98</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPAPass.html#a2d6a270c3a71b5963eaed37839355fd3">WPAPass::runPointerAnalysis</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> kind)</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;{</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html">SVFIRBuilder</a> builder;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = builder.<a class="code" href="classSVF_1_1SVFIRBuilder.html#aa6d56f9580f76fd09d25ce6cf7541e98">build</a>(svfModule);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">switch</span> (kind)</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="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6">PointerAnalysis::Andersen_WPA</a>:</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>(pag);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac7c033efd59e2b5fcded79fc3ebdb9d4">PointerAnalysis::AndersenLCD_WPA</a>:</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenLCD.html">AndersenLCD</a>(pag);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a46f5e74d5f4b0a2d134e68d262079c3f">PointerAnalysis::AndersenHCD_WPA</a>:</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenHCD.html">AndersenHCD</a>(pag);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f">PointerAnalysis::AndersenHLCD_WPA</a>:</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenHLCD.html">AndersenHLCD</a>(pag);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">PointerAnalysis::AndersenSCD_WPA</a>:</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenSCD.html">AndersenSCD</a>(pag);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">PointerAnalysis::AndersenSFR_WPA</a>:</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenSFR.html">AndersenSFR</a>(pag);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">PointerAnalysis::AndersenWaveDiff_WPA</a>:</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>(pag);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad24ef5326c26db858c73432aa7e67a0a">PointerAnalysis::Steensgaard_WPA</a>:</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1Steensgaard.html">Steensgaard</a>(pag);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad6ccf1ce66083278349c5c3111172d78">PointerAnalysis::FSSPARSE_WPA</a>:</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FlowSensitive.html">FlowSensitive</a>(pag);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a088dda60195ab259693977af8414f203">PointerAnalysis::FSTBHC_WPA</a>:</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html">FlowSensitiveTBHC</a>(pag);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a412254a7738029bf3ee96f5c15a6bec9">PointerAnalysis::VFS_WPA</a>:</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html">VersionedFlowSensitive</a>(pag);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acc2e7cbdd04a614a3b6189d2f01042f3">PointerAnalysis::TypeCPP_WPA</a>:</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1TypeAnalysis.html">TypeAnalysis</a>(pag);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;This pointer analysis has not been implemented yet.\n&quot;</span>);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; }</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; <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.push_back(<a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae1e217dc18be0ce70bee5ad930cb54c6">analyze</a>();</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a30cbb0b3633c769c92f4625680ec17e3">Options::AnderSVFG</a>)</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classSVF_1_1SVFGBuilder.html">SVFGBuilder</a> memSSA(<span class="keyword">true</span>);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;AndersenBase&gt;(<a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>) &amp;&amp; <span class="stringliteral">&quot;supports only andersen/steensgaard for pre-computed SVFG&quot;</span>);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="classSVF_1_1SVFG.html">SVFG</a> *svfg;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a7704ff30e6fc5043313adf5c655bcd4a">Options::OPTSVFG</a>)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; svfg = memSSA.<a class="code" href="classSVF_1_1SVFGBuilder.html#a54a713e3989597b11cee70864d0197bd">buildFullSVFG</a>((<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>*)<a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; svfg = memSSA.<a class="code" href="classSVF_1_1SVFGBuilder.html#a7a43ae081645eb74fa48c136548f0809">buildFullSVFGWithoutOPT</a>((<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>*)<a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>);</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;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a1211da4c36f1fcc65235891f31d87038">Options::PASelected</a>.isSet(<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">PointerAnalysis::AndersenWaveDiff_WPA</a>))</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#ac0f6d1221ee66ac17d0b201d73d7e28a">_svfg</a> = svfg;</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"> 167</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a1b1d1ad6b3a6c48a9fa07161b582c7fe">Options::PrintAliases</a>)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#abb6e0c5cc5de312ee0285d1854550752">PrintAliasPairs</a>(<a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;}</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#abb6e0c5cc5de312ee0285d1854550752"> 171</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPAPass.html#abb6e0c5cc5de312ee0285d1854550752">WPAPass::PrintAliasPairs</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;{</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> lit = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), elit = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); lit != elit; ++lit)</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node1 = lit-&gt;second;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node2 = node1;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> rit = lit, erit = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); rit != erit; ++rit)</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; node2 = rit-&gt;second;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">if</span>(node1==node2)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun1 = node1-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a53439a493963d16e5a1b5ed36ab6d33e">getFunction</a>();</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun2 = node2-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a53439a493963d16e5a1b5ed36ab6d33e">getFunction</a>();</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="cuddInt_8c.html#a8b2e13c78efca330f06b6ddcd7464b41">result</a> = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">alias</a>(node1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), node2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; (result == AliasResult::NoAlias ? <span class="stringliteral">&quot;NoAlias&quot;</span> : <span class="stringliteral">&quot;MayAlias&quot;</span>)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; &lt;&lt; <span class="stringliteral">&quot; var&quot;</span> &lt;&lt; node1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;[&quot;</span> &lt;&lt; node1-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a54b2a5ed3ed21e54eaf04182f0338333">getValueName</a>()</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; &lt;&lt; <span class="stringliteral">&quot;@&quot;</span> &lt;&lt; (fun1==<span class="keyword">nullptr</span>?<span class="stringliteral">&quot;&quot;</span>:fun1-&gt;getName()) &lt;&lt; <span class="stringliteral">&quot;] --&quot;</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; &lt;&lt; <span class="stringliteral">&quot; var&quot;</span> &lt;&lt; node2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;[&quot;</span> &lt;&lt; node2-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a54b2a5ed3ed21e54eaf04182f0338333">getValueName</a>()</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; &lt;&lt; <span class="stringliteral">&quot;@&quot;</span> &lt;&lt; (fun2==<span class="keyword">nullptr</span>?<span class="stringliteral">&quot;&quot;</span>:fun2-&gt;getName()) &lt;&lt; <span class="stringliteral">&quot;]\n&quot;</span>;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;}</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#a5a71ab4d4bd993ff52da60c730d7b57f"> 199</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1WPAPass.html#af339db8bffc554be7dd5cb6b100649e7">WPAPass::alias</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V2)</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;{</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="cuddInt_8c.html#a8b2e13c78efca330f06b6ddcd7464b41">result</a> = llvm::AliasResult::MayAlias;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span> (pag-&gt;<a class="code" href="classSVF_1_1IRGraph.html#aceb17dfbe137658625e16291127267d1">hasValueNode</a>(V1) &amp;&amp; pag-&gt;<a class="code" href="classSVF_1_1IRGraph.html#aceb17dfbe137658625e16291127267d1">hasValueNode</a>(V2))</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ab9db3ae038f26a350afc964952907bd7">Options::AliasRule</a>.getBits() == 0 || <a class="code" href="classSVF_1_1Options.html#ab9db3ae038f26a350afc964952907bd7">Options::AliasRule</a>.isSet(<a class="code" href="classSVF_1_1WPAPass.html#a4505a1882956feda3cf83c788149394dabb45a604558e2ebff460adb77b4a5d7c">Veto</a>))</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; result = llvm::AliasResult::MayAlias;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">for</span> (PTAVector::const_iterator it = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.begin(), eit = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.end();</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span> ((*it)-&gt;alias(V1, V2) == llvm::AliasResult::NoAlias)</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; result = llvm::AliasResult::NoAlias;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ab9db3ae038f26a350afc964952907bd7">Options::AliasRule</a>.isSet(<a class="code" href="classSVF_1_1WPAPass.html#a4505a1882956feda3cf83c788149394da498ba80d25733b291f391a94500dd4c7">Conservative</a>))</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; {</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; result = llvm::AliasResult::NoAlias;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">for</span> (PTAVector::const_iterator it = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.begin(), eit = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.end();</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">if</span> ((*it)-&gt;alias(V1, V2) == llvm::AliasResult::MayAlias)</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; result = llvm::AliasResult::MayAlias;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span> <a class="code" href="cuddInt_8c.html#a8b2e13c78efca330f06b6ddcd7464b41">result</a>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;}</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#a567f818fa7b29142b18cb39e5c063a4e"> 246</a></span>&#160;<a class="code" href="namespaceSVF.html#a7e833aa9feaf931fb44fb1e3fd502a6c">ModRefInfo</a> <a class="code" href="classSVF_1_1WPAPass.html#a567f818fa7b29142b18cb39e5c063a4e">WPAPass::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a>* callInst)</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;{</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1Options.html#a1211da4c36f1fcc65235891f31d87038">Options::PASelected</a>.isSet(<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">PointerAnalysis::AndersenWaveDiff_WPA</a>) &amp;&amp; <a class="code" href="classSVF_1_1Options.html#a30cbb0b3633c769c92f4625680ec17e3">Options::AnderSVFG</a> &amp;&amp; <span class="stringliteral">&quot;mod-ref query is only support with -ander and -svfg turned on&quot;</span>);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg = <a class="code" href="classSVF_1_1WPAPass.html#ac0f6d1221ee66ac17d0b201d73d7e28a">_svfg</a>-&gt;<a class="code" href="classSVF_1_1VFG.html#a7622e381fbc1601b3f9a8384df2751bd">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>();</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cbn = icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(callInst);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1WPAPass.html#ac0f6d1221ee66ac17d0b201d73d7e28a">_svfg</a>-&gt;<a class="code" href="classSVF_1_1SVFG.html#a49a910bc4ea6e98d1584e74a018badc9">getMSSA</a>()-&gt;<a class="code" href="classSVF_1_1MemSSA.html#ab2dfdcf6fb50ba6cacad1254350a5b09">getMRGenerator</a>()-&gt;<a class="code" href="classSVF_1_1MRGenerator.html#a455e0ba173141ac8ce76a655ac52205f">getModRefInfo</a>(cbn);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;}</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#a81277c93b6a89c01a7a1f476bc3d744d"> 257</a></span>&#160;<a class="code" href="namespaceSVF.html#a7e833aa9feaf931fb44fb1e3fd502a6c">ModRefInfo</a> <a class="code" href="classSVF_1_1WPAPass.html#a567f818fa7b29142b18cb39e5c063a4e">WPAPass::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a>* callInst, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V)</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;{</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1Options.html#a1211da4c36f1fcc65235891f31d87038">Options::PASelected</a>.isSet(<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">PointerAnalysis::AndersenWaveDiff_WPA</a>) &amp;&amp; <a class="code" href="classSVF_1_1Options.html#a30cbb0b3633c769c92f4625680ec17e3">Options::AnderSVFG</a> &amp;&amp; <span class="stringliteral">&quot;mod-ref query is only support with -ander and -svfg turned on&quot;</span>);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg = <a class="code" href="classSVF_1_1WPAPass.html#ac0f6d1221ee66ac17d0b201d73d7e28a">_svfg</a>-&gt;<a class="code" href="classSVF_1_1VFG.html#a7622e381fbc1601b3f9a8384df2751bd">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>();</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cbn = icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(callInst);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1WPAPass.html#ac0f6d1221ee66ac17d0b201d73d7e28a">_svfg</a>-&gt;<a class="code" href="classSVF_1_1SVFG.html#a49a910bc4ea6e98d1584e74a018badc9">getMSSA</a>()-&gt;<a class="code" href="classSVF_1_1MemSSA.html#ab2dfdcf6fb50ba6cacad1254350a5b09">getMRGenerator</a>()-&gt;<a class="code" href="classSVF_1_1MRGenerator.html#a455e0ba173141ac8ce76a655ac52205f">getModRefInfo</a>(cbn, V);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;}</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#a148cd86101e402e7ed8d3b3dae151d79"> 268</a></span>&#160;<a class="code" href="namespaceSVF.html#a7e833aa9feaf931fb44fb1e3fd502a6c">ModRefInfo</a> <a class="code" href="classSVF_1_1WPAPass.html#a567f818fa7b29142b18cb39e5c063a4e">WPAPass::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a>* callInst1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a>* callInst2)</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;{</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1Options.html#a1211da4c36f1fcc65235891f31d87038">Options::PASelected</a>.isSet(<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">PointerAnalysis::AndersenWaveDiff_WPA</a>) &amp;&amp; <a class="code" href="classSVF_1_1Options.html#a30cbb0b3633c769c92f4625680ec17e3">Options::AnderSVFG</a> &amp;&amp; <span class="stringliteral">&quot;mod-ref query is only support with -ander and -svfg turned on&quot;</span>);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg = <a class="code" href="classSVF_1_1WPAPass.html#ac0f6d1221ee66ac17d0b201d73d7e28a">_svfg</a>-&gt;<a class="code" href="classSVF_1_1VFG.html#a7622e381fbc1601b3f9a8384df2751bd">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>();</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cbn1 = icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(callInst1);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cbn2 = icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(callInst2);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1WPAPass.html#ac0f6d1221ee66ac17d0b201d73d7e28a">_svfg</a>-&gt;<a class="code" href="classSVF_1_1SVFG.html#a49a910bc4ea6e98d1584e74a018badc9">getMSSA</a>()-&gt;<a class="code" href="classSVF_1_1MemSSA.html#ab2dfdcf6fb50ba6cacad1254350a5b09">getMRGenerator</a>()-&gt;<a class="code" href="classSVF_1_1MRGenerator.html#a455e0ba173141ac8ce76a655ac52205f">getModRefInfo</a>(cbn1, cbn2);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;}</div><div class="ttc" id="TypeAnalysis_8h_html"><div class="ttname"><a href="TypeAnalysis_8h.html">TypeAnalysis.h</a></div></div>
69
+ <a href="WPAPass_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">//===- WPAPass.cpp -- Whole program analysis pass------------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===-----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * @file: WPA.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * @author: yesen</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * @date: 10/06/2014</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * @version: 1.0</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> * @section LICENSE</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"> * @section DESCRIPTION</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>&quot;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>&quot;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="WPAPass_8h.html">WPA/WPAPass.h</a>&quot;</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>&quot;</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="AndersenSFR_8h.html">WPA/AndersenSFR.h</a>&quot;</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="FlowSensitive_8h.html">WPA/FlowSensitive.h</a>&quot;</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="FlowSensitiveTBHC_8h.html">WPA/FlowSensitiveTBHC.h</a>&quot;</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="VersionedFlowSensitive_8h.html">WPA/VersionedFlowSensitive.h</a>&quot;</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="TypeAnalysis_8h.html">WPA/TypeAnalysis.h</a>&quot;</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Steensgaard_8h.html">WPA/Steensgaard.h</a>&quot;</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFIRBuilder_8h.html">SVF-FE/SVFIRBuilder.h</a>&quot;</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</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="keywordtype">char</span> <a class="code" href="classSVF_1_1WPAPass.html#a2674527c92cdef223e655d449f0811d4">WPAPass::ID</a> = 0;</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;<span class="keyword">static</span> llvm::RegisterPass&lt;WPAPass&gt; <a class="code" href="WPAPass_8cpp.html#a0a306f89dc7cb0253059399b0599c678">WHOLEPROGRAMPA</a>(<span class="stringliteral">&quot;wpa&quot;</span>,</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="stringliteral">&quot;Whole Program Pointer AnalysWPAis Pass&quot;</span>);</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;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#a7ea8006b7e9237a470dfd34ad633826b"> 60</a></span>&#160;<a class="code" href="classSVF_1_1WPAPass.html#a7ea8006b7e9237a470dfd34ad633826b">WPAPass::~WPAPass</a>()</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;{</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; PTAVector::const_iterator it = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.begin();</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; PTAVector::const_iterator eit = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.end();</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">for</span> (; it != eit; ++it)</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_1PointerAnalysis.html">PointerAnalysis</a>* pta = *it;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">delete</span> pta;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.clear();</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="l00075"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#a394dcd976c1ef08d9cadcba8f5d07c75"> 75</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPAPass.html#a394dcd976c1ef08d9cadcba8f5d07c75">WPAPass::runOnModule</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;{</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i&lt;= <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85adb3d4cbd8c38c1c498bc51198626a790">PointerAnalysis::Default_PTA</a>; i++)</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="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a1211da4c36f1fcc65235891f31d87038">Options::PASelected</a>.isSet(i))</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a2d6a270c3a71b5963eaed37839355fd3">runPointerAnalysis</a>(svfModule, i);</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="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.empty() &amp;&amp; <span class="stringliteral">&quot;No pointer analysis is specified.\n&quot;</span>);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#a1f47c1cb5a64bab9a6b8ac38103416ac"> 88</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1WPAPass.html#a394dcd976c1ef08d9cadcba8f5d07c75">WPAPass::runOnModule</a>(<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; module)</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;{</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae919327019b5014f64b754dbdeb07f75">buildSVFModule</a>(module);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a394dcd976c1ef08d9cadcba8f5d07c75">runOnModule</a>(svfModule);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;}</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#a2d6a270c3a71b5963eaed37839355fd3"> 98</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPAPass.html#a2d6a270c3a71b5963eaed37839355fd3">WPAPass::runPointerAnalysis</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> kind)</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;{</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html">SVFIRBuilder</a> builder;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = builder.<a class="code" href="classSVF_1_1SVFIRBuilder.html#aa6d56f9580f76fd09d25ce6cf7541e98">build</a>(svfModule);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">switch</span> (kind)</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="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6">PointerAnalysis::Andersen_WPA</a>:</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>(pag);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac7c033efd59e2b5fcded79fc3ebdb9d4">PointerAnalysis::AndersenLCD_WPA</a>:</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenLCD.html">AndersenLCD</a>(pag);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a46f5e74d5f4b0a2d134e68d262079c3f">PointerAnalysis::AndersenHCD_WPA</a>:</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenHCD.html">AndersenHCD</a>(pag);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f">PointerAnalysis::AndersenHLCD_WPA</a>:</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenHLCD.html">AndersenHLCD</a>(pag);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">PointerAnalysis::AndersenSCD_WPA</a>:</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenSCD.html">AndersenSCD</a>(pag);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">PointerAnalysis::AndersenSFR_WPA</a>:</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenSFR.html">AndersenSFR</a>(pag);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">PointerAnalysis::AndersenWaveDiff_WPA</a>:</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>(pag);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad24ef5326c26db858c73432aa7e67a0a">PointerAnalysis::Steensgaard_WPA</a>:</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1Steensgaard.html">Steensgaard</a>(pag);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad6ccf1ce66083278349c5c3111172d78">PointerAnalysis::FSSPARSE_WPA</a>:</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FlowSensitive.html">FlowSensitive</a>(pag);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a088dda60195ab259693977af8414f203">PointerAnalysis::FSTBHC_WPA</a>:</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html">FlowSensitiveTBHC</a>(pag);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a412254a7738029bf3ee96f5c15a6bec9">PointerAnalysis::VFS_WPA</a>:</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html">VersionedFlowSensitive</a>(pag);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acc2e7cbdd04a614a3b6189d2f01042f3">PointerAnalysis::TypeCPP_WPA</a>:</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1TypeAnalysis.html">TypeAnalysis</a>(pag);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;This pointer analysis has not been implemented yet.\n&quot;</span>);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; }</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; <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.push_back(<a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae1e217dc18be0ce70bee5ad930cb54c6">analyze</a>();</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a30cbb0b3633c769c92f4625680ec17e3">Options::AnderSVFG</a>)</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classSVF_1_1SVFGBuilder.html">SVFGBuilder</a> memSSA(<span class="keyword">true</span>);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;AndersenBase&gt;(<a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>) &amp;&amp; <span class="stringliteral">&quot;supports only andersen/steensgaard for pre-computed SVFG&quot;</span>);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="classSVF_1_1SVFG.html">SVFG</a> *svfg;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a7704ff30e6fc5043313adf5c655bcd4a">Options::OPTSVFG</a>)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; svfg = memSSA.<a class="code" href="classSVF_1_1SVFGBuilder.html#a54a713e3989597b11cee70864d0197bd">buildFullSVFG</a>((<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>*)<a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; svfg = memSSA.<a class="code" href="classSVF_1_1SVFGBuilder.html#a7a43ae081645eb74fa48c136548f0809">buildFullSVFGWithoutOPT</a>((<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>*)<a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>);</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;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a1211da4c36f1fcc65235891f31d87038">Options::PASelected</a>.isSet(<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">PointerAnalysis::AndersenWaveDiff_WPA</a>))</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#ac0f6d1221ee66ac17d0b201d73d7e28a">_svfg</a> = svfg;</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"> 167</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a1b1d1ad6b3a6c48a9fa07161b582c7fe">Options::PrintAliases</a>)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html#abb6e0c5cc5de312ee0285d1854550752">PrintAliasPairs</a>(<a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;}</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#abb6e0c5cc5de312ee0285d1854550752"> 171</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPAPass.html#abb6e0c5cc5de312ee0285d1854550752">WPAPass::PrintAliasPairs</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;{</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> lit = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), elit = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); lit != elit; ++lit)</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node1 = lit-&gt;second;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node2 = node1;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> rit = lit, erit = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); rit != erit; ++rit)</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; node2 = rit-&gt;second;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">if</span>(node1==node2)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun1 = node1-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a53439a493963d16e5a1b5ed36ab6d33e">getFunction</a>();</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun2 = node2-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a53439a493963d16e5a1b5ed36ab6d33e">getFunction</a>();</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="cuddInt_8c.html#a8b2e13c78efca330f06b6ddcd7464b41">result</a> = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">alias</a>(node1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), node2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; (result == AliasResult::NoAlias ? <span class="stringliteral">&quot;NoAlias&quot;</span> : <span class="stringliteral">&quot;MayAlias&quot;</span>)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; &lt;&lt; <span class="stringliteral">&quot; var&quot;</span> &lt;&lt; node1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;[&quot;</span> &lt;&lt; node1-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a54b2a5ed3ed21e54eaf04182f0338333">getValueName</a>()</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; &lt;&lt; <span class="stringliteral">&quot;@&quot;</span> &lt;&lt; (fun1==<span class="keyword">nullptr</span>?<span class="stringliteral">&quot;&quot;</span>:fun1-&gt;getName()) &lt;&lt; <span class="stringliteral">&quot;] --&quot;</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; &lt;&lt; <span class="stringliteral">&quot; var&quot;</span> &lt;&lt; node2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;[&quot;</span> &lt;&lt; node2-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a54b2a5ed3ed21e54eaf04182f0338333">getValueName</a>()</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; &lt;&lt; <span class="stringliteral">&quot;@&quot;</span> &lt;&lt; (fun2==<span class="keyword">nullptr</span>?<span class="stringliteral">&quot;&quot;</span>:fun2-&gt;getName()) &lt;&lt; <span class="stringliteral">&quot;]\n&quot;</span>;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;}</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#a5a71ab4d4bd993ff52da60c730d7b57f"> 199</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1WPAPass.html#af339db8bffc554be7dd5cb6b100649e7">WPAPass::alias</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V2)</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;{</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="cuddInt_8c.html#a8b2e13c78efca330f06b6ddcd7464b41">result</a> = llvm::AliasResult::MayAlias;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span> (pag-&gt;<a class="code" href="classSVF_1_1IRGraph.html#aceb17dfbe137658625e16291127267d1">hasValueNode</a>(V1) &amp;&amp; pag-&gt;<a class="code" href="classSVF_1_1IRGraph.html#aceb17dfbe137658625e16291127267d1">hasValueNode</a>(V2))</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ab9db3ae038f26a350afc964952907bd7">Options::AliasRule</a>.getBits() == 0 || <a class="code" href="classSVF_1_1Options.html#ab9db3ae038f26a350afc964952907bd7">Options::AliasRule</a>.isSet(<a class="code" href="classSVF_1_1WPAPass.html#a4505a1882956feda3cf83c788149394dabb45a604558e2ebff460adb77b4a5d7c">Veto</a>))</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; result = llvm::AliasResult::MayAlias;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">for</span> (PTAVector::const_iterator it = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.begin(), eit = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.end();</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span> ((*it)-&gt;alias(V1, V2) == llvm::AliasResult::NoAlias)</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; result = llvm::AliasResult::NoAlias;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ab9db3ae038f26a350afc964952907bd7">Options::AliasRule</a>.isSet(<a class="code" href="classSVF_1_1WPAPass.html#a4505a1882956feda3cf83c788149394da498ba80d25733b291f391a94500dd4c7">Conservative</a>))</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; {</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; result = llvm::AliasResult::NoAlias;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">for</span> (PTAVector::const_iterator it = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.begin(), eit = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.end();</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">if</span> ((*it)-&gt;alias(V1, V2) == llvm::AliasResult::MayAlias)</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; result = llvm::AliasResult::MayAlias;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span> <a class="code" href="cuddInt_8c.html#a8b2e13c78efca330f06b6ddcd7464b41">result</a>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;}</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#a567f818fa7b29142b18cb39e5c063a4e"> 246</a></span>&#160;<a class="code" href="namespaceSVF.html#a7e833aa9feaf931fb44fb1e3fd502a6c">ModRefInfo</a> <a class="code" href="classSVF_1_1WPAPass.html#a567f818fa7b29142b18cb39e5c063a4e">WPAPass::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a>* callInst)</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;{</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1Options.html#a1211da4c36f1fcc65235891f31d87038">Options::PASelected</a>.isSet(<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">PointerAnalysis::AndersenWaveDiff_WPA</a>) &amp;&amp; <a class="code" href="classSVF_1_1Options.html#a30cbb0b3633c769c92f4625680ec17e3">Options::AnderSVFG</a> &amp;&amp; <span class="stringliteral">&quot;mod-ref query is only support with -ander and -svfg turned on&quot;</span>);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg = <a class="code" href="classSVF_1_1WPAPass.html#ac0f6d1221ee66ac17d0b201d73d7e28a">_svfg</a>-&gt;<a class="code" href="classSVF_1_1VFG.html#a7622e381fbc1601b3f9a8384df2751bd">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>();</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn = icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#a483e92e076a426ec8f177eab3b971723">getCallBlockNode</a>(callInst);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1WPAPass.html#ac0f6d1221ee66ac17d0b201d73d7e28a">_svfg</a>-&gt;<a class="code" href="classSVF_1_1SVFG.html#a49a910bc4ea6e98d1584e74a018badc9">getMSSA</a>()-&gt;<a class="code" href="classSVF_1_1MemSSA.html#ab2dfdcf6fb50ba6cacad1254350a5b09">getMRGenerator</a>()-&gt;<a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">getModRefInfo</a>(cbn);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;}</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#a81277c93b6a89c01a7a1f476bc3d744d"> 257</a></span>&#160;<a class="code" href="namespaceSVF.html#a7e833aa9feaf931fb44fb1e3fd502a6c">ModRefInfo</a> <a class="code" href="classSVF_1_1WPAPass.html#a567f818fa7b29142b18cb39e5c063a4e">WPAPass::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a>* callInst, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V)</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;{</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1Options.html#a1211da4c36f1fcc65235891f31d87038">Options::PASelected</a>.isSet(<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">PointerAnalysis::AndersenWaveDiff_WPA</a>) &amp;&amp; <a class="code" href="classSVF_1_1Options.html#a30cbb0b3633c769c92f4625680ec17e3">Options::AnderSVFG</a> &amp;&amp; <span class="stringliteral">&quot;mod-ref query is only support with -ander and -svfg turned on&quot;</span>);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg = <a class="code" href="classSVF_1_1WPAPass.html#ac0f6d1221ee66ac17d0b201d73d7e28a">_svfg</a>-&gt;<a class="code" href="classSVF_1_1VFG.html#a7622e381fbc1601b3f9a8384df2751bd">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>();</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn = icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#a483e92e076a426ec8f177eab3b971723">getCallBlockNode</a>(callInst);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1WPAPass.html#ac0f6d1221ee66ac17d0b201d73d7e28a">_svfg</a>-&gt;<a class="code" href="classSVF_1_1SVFG.html#a49a910bc4ea6e98d1584e74a018badc9">getMSSA</a>()-&gt;<a class="code" href="classSVF_1_1MemSSA.html#ab2dfdcf6fb50ba6cacad1254350a5b09">getMRGenerator</a>()-&gt;<a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">getModRefInfo</a>(cbn, V);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;}</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"><a class="line" href="classSVF_1_1WPAPass.html#a148cd86101e402e7ed8d3b3dae151d79"> 268</a></span>&#160;<a class="code" href="namespaceSVF.html#a7e833aa9feaf931fb44fb1e3fd502a6c">ModRefInfo</a> <a class="code" href="classSVF_1_1WPAPass.html#a567f818fa7b29142b18cb39e5c063a4e">WPAPass::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a>* callInst1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a>* callInst2)</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;{</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1Options.html#a1211da4c36f1fcc65235891f31d87038">Options::PASelected</a>.isSet(<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">PointerAnalysis::AndersenWaveDiff_WPA</a>) &amp;&amp; <a class="code" href="classSVF_1_1Options.html#a30cbb0b3633c769c92f4625680ec17e3">Options::AnderSVFG</a> &amp;&amp; <span class="stringliteral">&quot;mod-ref query is only support with -ander and -svfg turned on&quot;</span>);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg = <a class="code" href="classSVF_1_1WPAPass.html#ac0f6d1221ee66ac17d0b201d73d7e28a">_svfg</a>-&gt;<a class="code" href="classSVF_1_1VFG.html#a7622e381fbc1601b3f9a8384df2751bd">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>();</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn1 = icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#a483e92e076a426ec8f177eab3b971723">getCallBlockNode</a>(callInst1);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn2 = icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#a483e92e076a426ec8f177eab3b971723">getCallBlockNode</a>(callInst2);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1WPAPass.html#ac0f6d1221ee66ac17d0b201d73d7e28a">_svfg</a>-&gt;<a class="code" href="classSVF_1_1SVFG.html#a49a910bc4ea6e98d1584e74a018badc9">getMSSA</a>()-&gt;<a class="code" href="classSVF_1_1MemSSA.html#ab2dfdcf6fb50ba6cacad1254350a5b09">getMRGenerator</a>()-&gt;<a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">getModRefInfo</a>(cbn1, cbn2);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;}</div><div class="ttc" id="TypeAnalysis_8h_html"><div class="ttname"><a href="TypeAnalysis_8h.html">TypeAnalysis.h</a></div></div>
70
70
  <div class="ttc" id="FlowSensitiveTBHC_8h_html"><div class="ttname"><a href="FlowSensitiveTBHC_8h.html">FlowSensitiveTBHC.h</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1Options_html_ab9db3ae038f26a350afc964952907bd7"><div class="ttname"><a href="classSVF_1_1Options.html#ab9db3ae038f26a350afc964952907bd7">SVF::Options::AliasRule</a></div><div class="ttdeci">static llvm::cl::bits&lt; WPAPass::AliasCheckRule &gt; AliasRule</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00251">Options.h:251</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html">SVF::BVDataPTAImpl</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00042">PointerAnalysisImpl.h:42</a></div></div>
@@ -77,7 +77,6 @@ $(function() {
77
77
  <div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00084">BasicTypes.h:84</a></div></div>
78
78
  <div class="ttc" id="classSVF_1_1FlowSensitive_html"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html">SVF::FlowSensitive</a></div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00049">FlowSensitive.h:49</a></div></div>
79
79
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aa6d56f9580f76fd09d25ce6cf7541e98"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aa6d56f9580f76fd09d25ce6cf7541e98">SVF::SVFIRBuilder::build</a></div><div class="ttdeci">virtual SVFIR * build(SVFModule *svfModule)</div><div class="ttdoc">Start building SVFIR here. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00047">SVFIRBuilder.cpp:47</a></div></div>
80
- <div class="ttc" id="classSVF_1_1ICFG_html_a7d10e8a815c836a070d35850f817a18c"><div class="ttname"><a href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">SVF::ICFG::getCallBlockNode</a></div><div class="ttdeci">CallBlockNode * getCallBlockNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00209">ICFG.cpp:209</a></div></div>
81
80
  <div class="ttc" id="classSVF_1_1SVFGBuilder_html_a54a713e3989597b11cee70864d0197bd"><div class="ttname"><a href="classSVF_1_1SVFGBuilder.html#a54a713e3989597b11cee70864d0197bd">SVF::SVFGBuilder::buildFullSVFG</a></div><div class="ttdeci">SVFG * buildFullSVFG(BVDataPTAImpl *pta)</div><div class="ttdef"><b>Definition:</b> <a href="SVFGBuilder_8cpp_source.html#l00054">SVFGBuilder.cpp:54</a></div></div>
82
81
  <div class="ttc" id="classSVF_1_1WPAPass_html_ac0f6d1221ee66ac17d0b201d73d7e28a"><div class="ttname"><a href="classSVF_1_1WPAPass.html#ac0f6d1221ee66ac17d0b201d73d7e28a">SVF::WPAPass::_svfg</a></div><div class="ttdeci">SVFG * _svfg</div><div class="ttdoc">svfg generated through -ander pointer analysis </div><div class="ttdef"><b>Definition:</b> <a href="WPAPass_8h_source.html#l00137">WPAPass.h:137</a></div></div>
83
82
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
@@ -136,6 +135,7 @@ $(function() {
136
135
  <div class="ttc" id="classSVF_1_1SVFVar_html_a54b2a5ed3ed21e54eaf04182f0338333"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a54b2a5ed3ed21e54eaf04182f0338333">SVF::SVFVar::getValueName</a></div><div class="ttdeci">virtual const std::string getValueName() const =0</div><div class="ttdoc">Get name of the LLVM value. </div></div>
137
136
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">SVF::PointerAnalysis::AndersenSFR_WPA</a></div><div class="ttdoc">Stride-based field representation. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00071">PointerAnalysis.h:71</a></div></div>
138
137
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85ad6ccf1ce66083278349c5c3111172d78"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad6ccf1ce66083278349c5c3111172d78">SVF::PointerAnalysis::FSSPARSE_WPA</a></div><div class="ttdoc">Sparse flow sensitive WPA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00078">PointerAnalysis.h:78</a></div></div>
138
+ <div class="ttc" id="classSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
139
139
  <div class="ttc" id="Steensgaard_8h_html"><div class="ttname"><a href="Steensgaard_8h.html">Steensgaard.h</a></div></div>
140
140
  <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00069">LLVMModule.h:69</a></div></div>
141
141
  <div class="ttc" id="classSVF_1_1WPAPass_html_a567f818fa7b29142b18cb39e5c063a4e"><div class="ttname"><a href="classSVF_1_1WPAPass.html#a567f818fa7b29142b18cb39e5c063a4e">SVF::WPAPass::getModRefInfo</a></div><div class="ttdeci">virtual ModRefInfo getModRefInfo(const CallInst *callInst)</div><div class="ttdoc">Interface of mod-ref analysis to determine whether a CallSite instruction can mod or ref any memory l...</div><div class="ttdef"><b>Definition:</b> <a href="WPAPass_8cpp_source.html#l00246">WPAPass.cpp:246</a></div></div>
@@ -144,19 +144,19 @@ $(function() {
144
144
  <div class="ttc" id="cuddInt_8c_html_a8b2e13c78efca330f06b6ddcd7464b41"><div class="ttname"><a href="cuddInt_8c.html#a8b2e13c78efca330f06b6ddcd7464b41">result</a></div><div class="ttdeci">static int result</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8c_source.html#l07466">cuddInt.c:7466</a></div></div>
145
145
  <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>
146
146
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_ae1e217dc18be0ce70bee5ad930cb54c6"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ae1e217dc18be0ce70bee5ad930cb54c6">SVF::PointerAnalysis::analyze</a></div><div class="ttdeci">virtual void analyze()=0</div><div class="ttdoc">Start Analysis here (main part of pointer analysis). It needs to be implemented in child class...</div></div>
147
+ <div class="ttc" id="classSVF_1_1ICFG_html_a483e92e076a426ec8f177eab3b971723"><div class="ttname"><a href="classSVF_1_1ICFG.html#a483e92e076a426ec8f177eab3b971723">SVF::ICFG::getCallBlockNode</a></div><div class="ttdeci">CallICFGNode * getCallBlockNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00209">ICFG.cpp:209</a></div></div>
147
148
  <div class="ttc" id="classSVF_1_1TypeAnalysis_html"><div class="ttname"><a href="classSVF_1_1TypeAnalysis.html">SVF::TypeAnalysis</a></div><div class="ttdef"><b>Definition:</b> <a href="TypeAnalysis_8h_source.html#l00038">TypeAnalysis.h:38</a></div></div>
148
149
  <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>
149
- <div class="ttc" id="classSVF_1_1MRGenerator_html_a455e0ba173141ac8ce76a655ac52205f"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a455e0ba173141ac8ce76a655ac52205f">SVF::MRGenerator::getModRefInfo</a></div><div class="ttdeci">ModRefInfo getModRefInfo(const CallBlockNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00719">MemRegion.cpp:719</a></div></div>
150
150
  <div class="ttc" id="classSVF_1_1SVFGBuilder_html"><div class="ttname"><a href="classSVF_1_1SVFGBuilder.html">SVF::SVFGBuilder</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGBuilder_8h_source.html#l00059">SVFGBuilder.h:59</a></div></div>
151
151
  <div class="ttc" id="SVFModule_8h_html"><div class="ttname"><a href="SVFModule_8h.html">SVFModule.h</a></div></div>
152
152
  <div class="ttc" id="SVFIRBuilder_8h_html"><div class="ttname"><a href="SVFIRBuilder_8h.html">SVFIRBuilder.h</a></div></div>
153
153
  <div class="ttc" id="classSVF_1_1SVFG_html_a49a910bc4ea6e98d1584e74a018badc9"><div class="ttname"><a href="classSVF_1_1SVFG.html#a49a910bc4ea6e98d1584e74a018badc9">SVF::SVFG::getMSSA</a></div><div class="ttdeci">MemSSA * getMSSA() const</div><div class="ttdoc">Get SVFG memory SSA. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00138">SVFG.h:138</a></div></div>
154
- <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>
155
154
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">SVF::PointerAnalysis::AndersenSCD_WPA</a></div><div class="ttdoc">Selective cycle detection andersen-style WPA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00070">PointerAnalysis.h:70</a></div></div>
156
155
  <div class="ttc" id="classSVF_1_1Andersen_html"><div class="ttname"><a href="classSVF_1_1Andersen.html">SVF::Andersen</a></div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00149">Andersen.h:149</a></div></div>
157
156
  <div class="ttc" id="classSVF_1_1SVFIR_html"><div class="ttname"><a href="classSVF_1_1SVFIR.html">SVF::SVFIR</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00043">SVFIR.h:43</a></div></div>
158
157
  <div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
159
158
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85acc2e7cbdd04a614a3b6189d2f01042f3"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acc2e7cbdd04a614a3b6189d2f01042f3">SVF::PointerAnalysis::TypeCPP_WPA</a></div><div class="ttdoc">Type-based analysis for C++. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00085">PointerAnalysis.h:85</a></div></div>
159
+ <div class="ttc" id="classSVF_1_1MRGenerator_html_ac14c99ee6064fc9cf30120a83c78e702"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">SVF::MRGenerator::getModRefInfo</a></div><div class="ttdeci">ModRefInfo getModRefInfo(const CallICFGNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00719">MemRegion.cpp:719</a></div></div>
160
160
  <div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
161
161
  <div class="ttc" id="AndersenSFR_8h_html"><div class="ttname"><a href="AndersenSFR_8h.html">AndersenSFR.h</a></div></div>
162
162
  <div class="ttc" id="classSVF_1_1WPAPass_html_a394dcd976c1ef08d9cadcba8f5d07c75"><div class="ttname"><a href="classSVF_1_1WPAPass.html#a394dcd976c1ef08d9cadcba8f5d07c75">SVF::WPAPass::runOnModule</a></div><div class="ttdeci">virtual void runOnModule(SVFModule *svfModule)</div><div class="ttdoc">Run pointer analysis on SVFModule. </div><div class="ttdef"><b>Definition:</b> <a href="WPAPass_8cpp_source.html#l00075">WPAPass.cpp:75</a></div></div>