svf-lib 1.0.2319 → 1.0.2321

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 (320) hide show
  1. package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/WorkList.h +0 -0
  2. package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/Modules/FindZ3.cmake +93 -0
  3. package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFConfig.cmake +106 -0
  4. package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFConfigVersion.cmake +43 -0
  5. package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFTargets-release.cmake +101 -0
  6. package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFTargets.cmake +180 -0
  7. package/SVF-linux-aarch64/Release-build/lib/libSvfCore.so.3.1 +0 -0
  8. package/SVF-linux-aarch64/Release-build/lib/libSvfLLVM.so.3.1 +0 -0
  9. package/SVF-linux-aarch64/Release-build/lib/pkgconfig/SVF.pc +12 -0
  10. package/SVF-osx/Release-build/bin/ae +0 -0
  11. package/SVF-osx/Release-build/bin/cfl +0 -0
  12. package/SVF-osx/Release-build/bin/dvf +0 -0
  13. package/SVF-osx/Release-build/bin/llvm2svf +0 -0
  14. package/SVF-osx/Release-build/bin/mta +0 -0
  15. package/SVF-osx/Release-build/bin/saber +0 -0
  16. package/SVF-osx/Release-build/bin/svf-ex +0 -0
  17. package/SVF-osx/Release-build/bin/wpa +0 -0
  18. package/SVF-osx/Release-build/include/SVF/AE/Core/AbstractState.h +425 -0
  19. package/SVF-osx/Release-build/include/SVF/AE/Core/AbstractValue.h +157 -0
  20. package/SVF-osx/Release-build/include/SVF/AE/Core/AddressValue.h +225 -0
  21. package/SVF-osx/Release-build/include/SVF/AE/Core/ICFGWTO.h +135 -0
  22. package/SVF-osx/Release-build/include/SVF/AE/Core/IntervalValue.h +1055 -0
  23. package/SVF-osx/Release-build/include/SVF/AE/Core/NumericValue.h +1292 -0
  24. package/SVF-osx/Release-build/include/SVF/AE/Core/RelExeState.h +226 -0
  25. package/SVF-osx/Release-build/include/SVF/AE/Core/RelationSolver.h +91 -0
  26. package/SVF-osx/Release-build/include/SVF/AE/Svfexe/AEDetector.h +439 -0
  27. package/SVF-osx/Release-build/include/SVF/AE/Svfexe/AbsExtAPI.h +138 -0
  28. package/SVF-osx/Release-build/include/SVF/AE/Svfexe/AbstractInterpretation.h +384 -0
  29. package/SVF-osx/Release-build/include/SVF/CFL/CFGNormalizer.h +84 -0
  30. package/SVF-osx/Release-build/include/SVF/CFL/CFGrammar.h +468 -0
  31. package/SVF-osx/Release-build/include/SVF/CFL/CFLAlias.h +168 -0
  32. package/SVF-osx/Release-build/include/SVF/CFL/CFLBase.h +118 -0
  33. package/SVF-osx/Release-build/include/SVF/CFL/CFLGramGraphChecker.h +74 -0
  34. package/SVF-osx/Release-build/include/SVF/CFL/CFLGraphBuilder.h +168 -0
  35. package/SVF-osx/Release-build/include/SVF/CFL/CFLSVFGBuilder.h +58 -0
  36. package/SVF-osx/Release-build/include/SVF/CFL/CFLSolver.h +374 -0
  37. package/SVF-osx/Release-build/include/SVF/CFL/CFLStat.h +67 -0
  38. package/SVF-osx/Release-build/include/SVF/CFL/CFLVF.h +68 -0
  39. package/SVF-osx/Release-build/include/SVF/CFL/GrammarBuilder.h +100 -0
  40. package/SVF-osx/Release-build/include/SVF/DDA/ContextDDA.h +230 -0
  41. package/SVF-osx/Release-build/include/SVF/DDA/DDAClient.h +163 -0
  42. package/SVF-osx/Release-build/include/SVF/DDA/DDAPass.h +102 -0
  43. package/SVF-osx/Release-build/include/SVF/DDA/DDAStat.h +121 -0
  44. package/SVF-osx/Release-build/include/SVF/DDA/DDAVFSolver.h +794 -0
  45. package/SVF-osx/Release-build/include/SVF/DDA/FlowDDA.h +178 -0
  46. package/SVF-osx/Release-build/include/SVF/FastCluster/fastcluster.h +80 -0
  47. package/SVF-osx/Release-build/include/SVF/Graphs/BasicBlockG.h +318 -0
  48. package/SVF-osx/Release-build/include/SVF/Graphs/CDG.h +482 -0
  49. package/SVF-osx/Release-build/include/SVF/Graphs/CFLGraph.h +232 -0
  50. package/SVF-osx/Release-build/include/SVF/Graphs/CHG.h +368 -0
  51. package/SVF-osx/Release-build/include/SVF/Graphs/CallGraph.h +497 -0
  52. package/SVF-osx/Release-build/include/SVF/Graphs/ConsG.h +402 -0
  53. package/SVF-osx/Release-build/include/SVF/Graphs/ConsGEdge.h +355 -0
  54. package/SVF-osx/Release-build/include/SVF/Graphs/ConsGNode.h +418 -0
  55. package/SVF-osx/Release-build/include/SVF/Graphs/DOTGraphTraits.h +188 -0
  56. package/SVF-osx/Release-build/include/SVF/Graphs/GenericGraph.h +628 -0
  57. package/SVF-osx/Release-build/include/SVF/Graphs/GraphPrinter.h +111 -0
  58. package/SVF-osx/Release-build/include/SVF/Graphs/GraphTraits.h +150 -0
  59. package/SVF-osx/Release-build/include/SVF/Graphs/GraphWriter.h +380 -0
  60. package/SVF-osx/Release-build/include/SVF/Graphs/ICFG.h +331 -0
  61. package/SVF-osx/Release-build/include/SVF/Graphs/ICFGEdge.h +281 -0
  62. package/SVF-osx/Release-build/include/SVF/Graphs/ICFGNode.h +669 -0
  63. package/SVF-osx/Release-build/include/SVF/Graphs/ICFGStat.h +164 -0
  64. package/SVF-osx/Release-build/include/SVF/Graphs/IRGraph.h +398 -0
  65. package/SVF-osx/Release-build/include/SVF/Graphs/SCC.h +375 -0
  66. package/SVF-osx/Release-build/include/SVF/Graphs/SVFG.h +491 -0
  67. package/SVF-osx/Release-build/include/SVF/Graphs/SVFGEdge.h +237 -0
  68. package/SVF-osx/Release-build/include/SVF/Graphs/SVFGNode.h +501 -0
  69. package/SVF-osx/Release-build/include/SVF/Graphs/SVFGOPT.h +372 -0
  70. package/SVF-osx/Release-build/include/SVF/Graphs/SVFGStat.h +273 -0
  71. package/SVF-osx/Release-build/include/SVF/Graphs/ThreadCallGraph.h +399 -0
  72. package/SVF-osx/Release-build/include/SVF/Graphs/VFG.h +726 -0
  73. package/SVF-osx/Release-build/include/SVF/Graphs/VFGEdge.h +295 -0
  74. package/SVF-osx/Release-build/include/SVF/Graphs/VFGNode.h +1266 -0
  75. package/SVF-osx/Release-build/include/SVF/Graphs/WTO.h +872 -0
  76. package/SVF-osx/Release-build/include/SVF/MSSA/MSSAMuChi.h +722 -0
  77. package/SVF-osx/Release-build/include/SVF/MSSA/MemPartition.h +169 -0
  78. package/SVF-osx/Release-build/include/SVF/MSSA/MemRegion.h +489 -0
  79. package/SVF-osx/Release-build/include/SVF/MSSA/MemSSA.h +452 -0
  80. package/SVF-osx/Release-build/include/SVF/MSSA/SVFGBuilder.h +104 -0
  81. package/SVF-osx/Release-build/include/SVF/MTA/LockAnalysis.h +533 -0
  82. package/SVF-osx/Release-build/include/SVF/MTA/MHP.h +546 -0
  83. package/SVF-osx/Release-build/include/SVF/MTA/MTA.h +97 -0
  84. package/SVF-osx/Release-build/include/SVF/MTA/MTAStat.h +73 -0
  85. package/SVF-osx/Release-build/include/SVF/MTA/TCT.h +620 -0
  86. package/SVF-osx/Release-build/include/SVF/MemoryModel/AbstractPointsToDS.h +316 -0
  87. package/SVF-osx/Release-build/include/SVF/MemoryModel/AccessPath.h +194 -0
  88. package/SVF-osx/Release-build/include/SVF/MemoryModel/ConditionalPT.h +878 -0
  89. package/SVF-osx/Release-build/include/SVF/MemoryModel/MutablePointsToDS.h +1025 -0
  90. package/SVF-osx/Release-build/include/SVF/MemoryModel/PersistentPointsToCache.h +463 -0
  91. package/SVF-osx/Release-build/include/SVF/MemoryModel/PersistentPointsToDS.h +955 -0
  92. package/SVF-osx/Release-build/include/SVF/MemoryModel/PointerAnalysis.h +428 -0
  93. package/SVF-osx/Release-build/include/SVF/MemoryModel/PointerAnalysisImpl.h +602 -0
  94. package/SVF-osx/Release-build/include/SVF/MemoryModel/PointsTo.h +255 -0
  95. package/SVF-osx/Release-build/include/SVF/MemoryModel/SVFLoop.h +167 -0
  96. package/SVF-osx/Release-build/include/SVF/SABER/DoubleFreeChecker.h +76 -0
  97. package/SVF-osx/Release-build/include/SVF/SABER/FileChecker.h +80 -0
  98. package/SVF-osx/Release-build/include/SVF/SABER/LeakChecker.h +122 -0
  99. package/SVF-osx/Release-build/include/SVF/SABER/ProgSlice.h +327 -0
  100. package/SVF-osx/Release-build/include/SVF/SABER/SaberCheckerAPI.h +151 -0
  101. package/SVF-osx/Release-build/include/SVF/SABER/SaberCondAllocator.h +317 -0
  102. package/SVF-osx/Release-build/include/SVF/SABER/SaberSVFGBuilder.h +114 -0
  103. package/SVF-osx/Release-build/include/SVF/SABER/SrcSnkDDA.h +327 -0
  104. package/SVF-osx/Release-build/include/SVF/SABER/SrcSnkSolver.h +186 -0
  105. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/BasicTypes.h +280 -0
  106. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/BreakConstantExpr.h +93 -0
  107. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/CHGBuilder.h +78 -0
  108. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/CppUtil.h +184 -0
  109. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/DCHG.h +474 -0
  110. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/GEPTypeBridgeIterator.h +183 -0
  111. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/ICFGBuilder.h +160 -0
  112. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/LLVMLoopAnalysis.h +60 -0
  113. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/LLVMModule.h +527 -0
  114. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/LLVMUtil.h +433 -0
  115. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/ObjTypeInference.h +129 -0
  116. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/SVFIRBuilder.h +523 -0
  117. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/SymbolTableBuilder.h +132 -0
  118. package/SVF-osx/Release-build/include/SVF/SVFIR/ObjTypeInfo.h +224 -0
  119. package/SVF-osx/Release-build/include/SVF/SVFIR/PAGBuilderFromFile.h +80 -0
  120. package/SVF-osx/Release-build/include/SVF/SVFIR/SVFIR.h +856 -0
  121. package/SVF-osx/Release-build/include/SVF/SVFIR/SVFStatements.h +1330 -0
  122. package/SVF-osx/Release-build/include/SVF/SVFIR/SVFType.h +606 -0
  123. package/SVF-osx/Release-build/include/SVF/SVFIR/SVFValue.h +338 -0
  124. package/SVF-osx/Release-build/include/SVF/SVFIR/SVFVariables.h +2212 -0
  125. package/SVF-osx/Release-build/include/SVF/Util/Annotator.h +180 -0
  126. package/SVF-osx/Release-build/include/SVF/Util/BitVector.h +55 -0
  127. package/SVF-osx/Release-build/include/SVF/Util/CDGBuilder.h +107 -0
  128. package/SVF-osx/Release-build/include/SVF/Util/CallGraphBuilder.h +61 -0
  129. package/SVF-osx/Release-build/include/SVF/Util/Casting.h +426 -0
  130. package/SVF-osx/Release-build/include/SVF/Util/CommandLine.h +530 -0
  131. package/SVF-osx/Release-build/include/SVF/Util/CoreBitVector.h +214 -0
  132. package/SVF-osx/Release-build/include/SVF/Util/CxtStmt.h +502 -0
  133. package/SVF-osx/Release-build/include/SVF/Util/DPItem.h +618 -0
  134. package/SVF-osx/Release-build/include/SVF/Util/ExtAPI.h +117 -0
  135. package/SVF-osx/Release-build/include/SVF/Util/GeneralType.h +127 -0
  136. package/SVF-osx/Release-build/include/SVF/Util/GraphReachSolver.h +186 -0
  137. package/SVF-osx/Release-build/include/SVF/Util/NodeIDAllocator.h +203 -0
  138. package/SVF-osx/Release-build/include/SVF/Util/Options.h +273 -0
  139. package/SVF-osx/Release-build/include/SVF/Util/PTAStat.h +83 -0
  140. package/SVF-osx/Release-build/include/SVF/Util/SVFBugReport.h +427 -0
  141. package/SVF-osx/Release-build/include/SVF/Util/SVFLoopAndDomInfo.h +169 -0
  142. package/SVF-osx/Release-build/include/SVF/Util/SVFStat.h +103 -0
  143. package/SVF-osx/Release-build/include/SVF/Util/SVFUtil.h +478 -0
  144. package/SVF-osx/Release-build/include/SVF/Util/SparseBitVector.h +1252 -0
  145. package/SVF-osx/Release-build/include/SVF/Util/ThreadAPI.h +188 -0
  146. package/SVF-osx/Release-build/include/SVF/Util/WorkList.h +317 -0
  147. package/SVF-osx/Release-build/include/SVF/Util/Z3Expr.h +325 -0
  148. package/SVF-osx/Release-build/include/SVF/Util/cJSON.h +300 -0
  149. package/SVF-osx/Release-build/include/SVF/Util/config.h +46 -0
  150. package/SVF-osx/Release-build/include/SVF/Util/iterator.h +407 -0
  151. package/SVF-osx/Release-build/include/SVF/Util/iterator_range.h +76 -0
  152. package/SVF-osx/Release-build/include/SVF/WPA/Andersen.h +434 -0
  153. package/SVF-osx/Release-build/include/SVF/WPA/AndersenPWC.h +160 -0
  154. package/SVF-osx/Release-build/include/SVF/WPA/CSC.h +95 -0
  155. package/SVF-osx/Release-build/include/SVF/WPA/FlowSensitive.h +322 -0
  156. package/SVF-osx/Release-build/include/SVF/WPA/Steensgaard.h +131 -0
  157. package/SVF-osx/Release-build/include/SVF/WPA/TypeAnalysis.h +90 -0
  158. package/SVF-osx/Release-build/include/SVF/WPA/VersionedFlowSensitive.h +295 -0
  159. package/SVF-osx/Release-build/include/SVF/WPA/WPAFSSolver.h +246 -0
  160. package/SVF-osx/Release-build/include/SVF/WPA/WPAPass.h +115 -0
  161. package/SVF-osx/Release-build/include/SVF/WPA/WPASolver.h +205 -0
  162. package/SVF-osx/Release-build/include/SVF/WPA/WPAStat.h +222 -0
  163. package/SVF-osx/Release-build/include/SVF/extapi.bc +2384 -0
  164. package/SVF-osx/Release-build/lib/cmake/SVF/Modules/FindZ3.cmake +93 -0
  165. package/SVF-osx/Release-build/lib/cmake/SVF/SVFConfig.cmake +106 -0
  166. package/SVF-osx/Release-build/lib/cmake/SVF/SVFConfigVersion.cmake +43 -0
  167. package/SVF-osx/Release-build/lib/cmake/SVF/SVFTargets-release.cmake +101 -0
  168. package/SVF-osx/Release-build/lib/cmake/SVF/SVFTargets.cmake +180 -0
  169. package/SVF-osx/Release-build/lib/libSvfCore.3.1.dylib +0 -0
  170. package/SVF-osx/Release-build/lib/libSvfLLVM.3.1.dylib +0 -0
  171. package/SVF-osx/Release-build/lib/pkgconfig/SVF.pc +12 -0
  172. package/package.json +1 -1
  173. package/SVF-linux-aarch64/Release-build/include/CFL/grammar/PAGGrammar.txt +0 -15
  174. package/SVF-linux-aarch64/Release-build/include/CFL/grammar/PEGGrammar.txt +0 -11
  175. package/SVF-linux-aarch64/Release-build/include/CFL/grammar/VFGGrammar.txt +0 -7
  176. package/SVF-linux-aarch64/Release-build/include/FastCluster/LICENSE.TXT +0 -13
  177. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/AbstractState.h +0 -0
  178. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/AbstractValue.h +0 -0
  179. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/AddressValue.h +0 -0
  180. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/ICFGWTO.h +0 -0
  181. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/IntervalValue.h +0 -0
  182. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/NumericValue.h +0 -0
  183. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/RelExeState.h +0 -0
  184. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/RelationSolver.h +0 -0
  185. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Svfexe/AEDetector.h +0 -0
  186. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Svfexe/AbsExtAPI.h +0 -0
  187. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Svfexe/AbstractInterpretation.h +0 -0
  188. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFGNormalizer.h +0 -0
  189. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFGrammar.h +0 -0
  190. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLAlias.h +0 -0
  191. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLBase.h +0 -0
  192. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLGramGraphChecker.h +0 -0
  193. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLGraphBuilder.h +0 -0
  194. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLSVFGBuilder.h +0 -0
  195. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLSolver.h +0 -0
  196. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLStat.h +0 -0
  197. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLVF.h +0 -0
  198. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/GrammarBuilder.h +0 -0
  199. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/ContextDDA.h +0 -0
  200. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAClient.h +0 -0
  201. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAPass.h +0 -0
  202. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAStat.h +0 -0
  203. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAVFSolver.h +0 -0
  204. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/FlowDDA.h +0 -0
  205. /package/SVF-linux-aarch64/Release-build/include/{FastCluster → SVF/FastCluster}/fastcluster.h +0 -0
  206. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/BasicBlockG.h +0 -0
  207. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CDG.h +0 -0
  208. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CFLGraph.h +0 -0
  209. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CHG.h +0 -0
  210. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CallGraph.h +0 -0
  211. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ConsG.h +0 -0
  212. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ConsGEdge.h +0 -0
  213. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ConsGNode.h +0 -0
  214. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/DOTGraphTraits.h +0 -0
  215. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GenericGraph.h +0 -0
  216. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GraphPrinter.h +0 -0
  217. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GraphTraits.h +0 -0
  218. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GraphWriter.h +0 -0
  219. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFG.h +0 -0
  220. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFGEdge.h +0 -0
  221. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFGNode.h +0 -0
  222. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFGStat.h +0 -0
  223. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/IRGraph.h +0 -0
  224. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SCC.h +0 -0
  225. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFG.h +0 -0
  226. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGEdge.h +0 -0
  227. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGNode.h +0 -0
  228. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGOPT.h +0 -0
  229. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGStat.h +0 -0
  230. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ThreadCallGraph.h +0 -0
  231. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/VFG.h +0 -0
  232. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/VFGEdge.h +0 -0
  233. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/VFGNode.h +0 -0
  234. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/WTO.h +0 -0
  235. /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MSSAMuChi.h +0 -0
  236. /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MemPartition.h +0 -0
  237. /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MemRegion.h +0 -0
  238. /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MemSSA.h +0 -0
  239. /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/SVFGBuilder.h +0 -0
  240. /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/LockAnalysis.h +0 -0
  241. /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/MHP.h +0 -0
  242. /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/MTA.h +0 -0
  243. /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/MTAStat.h +0 -0
  244. /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/TCT.h +0 -0
  245. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/AbstractPointsToDS.h +0 -0
  246. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/AccessPath.h +0 -0
  247. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/ConditionalPT.h +0 -0
  248. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/MutablePointsToDS.h +0 -0
  249. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PersistentPointsToCache.h +0 -0
  250. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PersistentPointsToDS.h +0 -0
  251. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PointerAnalysis.h +0 -0
  252. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PointerAnalysisImpl.h +0 -0
  253. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PointsTo.h +0 -0
  254. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/SVFLoop.h +0 -0
  255. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/DoubleFreeChecker.h +0 -0
  256. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/FileChecker.h +0 -0
  257. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/LeakChecker.h +0 -0
  258. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/ProgSlice.h +0 -0
  259. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SaberCheckerAPI.h +0 -0
  260. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SaberCondAllocator.h +0 -0
  261. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SaberSVFGBuilder.h +0 -0
  262. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SrcSnkDDA.h +0 -0
  263. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SrcSnkSolver.h +0 -0
  264. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/BasicTypes.h +0 -0
  265. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/BreakConstantExpr.h +0 -0
  266. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/CHGBuilder.h +0 -0
  267. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/CppUtil.h +0 -0
  268. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/DCHG.h +0 -0
  269. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/GEPTypeBridgeIterator.h +0 -0
  270. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/ICFGBuilder.h +0 -0
  271. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/LLVMLoopAnalysis.h +0 -0
  272. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/LLVMModule.h +0 -0
  273. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/LLVMUtil.h +0 -0
  274. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/ObjTypeInference.h +0 -0
  275. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/SVFIRBuilder.h +0 -0
  276. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/SymbolTableBuilder.h +0 -0
  277. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/ObjTypeInfo.h +0 -0
  278. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/PAGBuilderFromFile.h +0 -0
  279. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFIR.h +0 -0
  280. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFStatements.h +0 -0
  281. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFType.h +0 -0
  282. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFValue.h +0 -0
  283. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFVariables.h +0 -0
  284. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Annotator.h +0 -0
  285. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/BitVector.h +0 -0
  286. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CDGBuilder.h +0 -0
  287. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CallGraphBuilder.h +0 -0
  288. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Casting.h +0 -0
  289. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CommandLine.h +0 -0
  290. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CoreBitVector.h +0 -0
  291. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CxtStmt.h +0 -0
  292. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/DPItem.h +0 -0
  293. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/ExtAPI.h +0 -0
  294. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/GeneralType.h +0 -0
  295. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/GraphReachSolver.h +0 -0
  296. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/NodeIDAllocator.h +0 -0
  297. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Options.h +0 -0
  298. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/PTAStat.h +0 -0
  299. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFBugReport.h +0 -0
  300. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFLoopAndDomInfo.h +0 -0
  301. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFStat.h +0 -0
  302. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFUtil.h +0 -0
  303. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SparseBitVector.h +0 -0
  304. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/ThreadAPI.h +0 -0
  305. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Z3Expr.h +0 -0
  306. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/cJSON.h +0 -0
  307. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/iterator.h +0 -0
  308. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/iterator_range.h +0 -0
  309. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/Andersen.h +0 -0
  310. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/AndersenPWC.h +0 -0
  311. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/CSC.h +0 -0
  312. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/FlowSensitive.h +0 -0
  313. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/Steensgaard.h +0 -0
  314. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/TypeAnalysis.h +0 -0
  315. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/VersionedFlowSensitive.h +0 -0
  316. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPAFSSolver.h +0 -0
  317. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPAPass.h +0 -0
  318. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPASolver.h +0 -0
  319. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPAStat.h +0 -0
  320. /package/SVF-linux-aarch64/Release-build/{lib → include/SVF}/extapi.bc +0 -0
@@ -0,0 +1,628 @@
1
+ //===- CenericGraph.h -- Generic graph ---------------------------------------//
2
+ //
3
+ // SVF: Static Value-Flow Analysis
4
+ //
5
+ // Copyright (C) <2013-2017> <Yulei Sui>
6
+ //
7
+
8
+ // This program is free software: you can redistribute it and/or modify
9
+ // it under the terms of the GNU Affero General Public License as published by
10
+ // the Free Software Foundation, either version 3 of the License, or
11
+ // (at your option) any later version.
12
+
13
+ // This program is distributed in the hope that it will be useful,
14
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ // GNU Affero General Public License for more details.
17
+
18
+ // You should have received a copy of the GNU Affero General Public License
19
+ // along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ //
21
+ //===----------------------------------------------------------------------===//
22
+
23
+ /*
24
+ * GenericGraph.h
25
+ *
26
+ * Created on: Mar 19, 2014
27
+ * Author: Yulei Sui
28
+ */
29
+
30
+ #ifndef GENERICGRAPH_H_
31
+ #define GENERICGRAPH_H_
32
+
33
+ #include "SVFIR/SVFType.h"
34
+ #include "Util/iterator.h"
35
+ #include "Graphs/GraphTraits.h"
36
+ #include "SVFIR/SVFValue.h"
37
+
38
+ namespace SVF
39
+ {
40
+ /// Forward declaration of some friend classes
41
+ ///@{
42
+ template <typename, typename> class GenericGraphWriter;
43
+ template <typename, typename> class GenericGraphReader;
44
+ ///@}
45
+
46
+ /*!
47
+ * Generic edge on the graph as base class
48
+ */
49
+ template<class NodeTy>
50
+ class GenericEdge
51
+ {
52
+ friend class SVFIRWriter;
53
+ friend class SVFIRReader;
54
+
55
+ public:
56
+ /// Node type
57
+ typedef NodeTy NodeType;
58
+ /// Edge Flag
59
+ /// Edge format as follows (from lowest bit):
60
+ /// (1) 0-7 bits encode an edge kind (allow maximum 16 kinds)
61
+ /// (2) 8-63 bits encode a callsite instruction
62
+ typedef u64_t GEdgeFlag;
63
+ typedef s64_t GEdgeKind;
64
+ private:
65
+ NodeTy* src; ///< source node
66
+ NodeTy* dst; ///< destination node
67
+ GEdgeFlag edgeFlag; ///< edge kind
68
+
69
+ public:
70
+ /// Constructor
71
+ GenericEdge(NodeTy* s, NodeTy* d, GEdgeFlag k) : src(s), dst(d), edgeFlag(k)
72
+ {
73
+ }
74
+
75
+ /// Destructor
76
+ virtual ~GenericEdge()
77
+ {
78
+ }
79
+
80
+ /// get methods of the components
81
+ //@{
82
+ inline NodeID getSrcID() const
83
+ {
84
+ return src->getId();
85
+ }
86
+ inline NodeID getDstID() const
87
+ {
88
+ return dst->getId();
89
+ }
90
+ inline GEdgeKind getEdgeKind() const
91
+ {
92
+ return (EdgeKindMask & edgeFlag);
93
+ }
94
+ inline GEdgeKind getEdgeKindWithoutMask() const
95
+ {
96
+ return edgeFlag;
97
+ }
98
+ NodeType* getSrcNode() const
99
+ {
100
+ return src;
101
+ }
102
+ NodeType* getDstNode() const
103
+ {
104
+ return dst;
105
+ }
106
+ //@}
107
+
108
+ /// Add the hash function for std::set (we also can overload operator< to implement this)
109
+ // and duplicated elements in the set are not inserted (binary tree comparison)
110
+ //@{
111
+ typedef struct equalGEdge
112
+ {
113
+ bool operator()(const GenericEdge<NodeType>* lhs, const GenericEdge<NodeType>* rhs) const
114
+ {
115
+ if (lhs->edgeFlag != rhs->edgeFlag)
116
+ return lhs->edgeFlag < rhs->edgeFlag;
117
+ else if (lhs->getSrcID() != rhs->getSrcID())
118
+ return lhs->getSrcID() < rhs->getSrcID();
119
+ else
120
+ return lhs->getDstID() < rhs->getDstID();
121
+ }
122
+ } equalGEdge;
123
+
124
+ virtual inline bool operator==(const GenericEdge<NodeType>* rhs) const
125
+ {
126
+ return (rhs->edgeFlag == this->edgeFlag &&
127
+ rhs->getSrcID() == this->getSrcID() &&
128
+ rhs->getDstID() == this->getDstID());
129
+ }
130
+ //@}
131
+
132
+ protected:
133
+ static constexpr unsigned char EdgeKindMaskBits = 8; ///< We use the lower 8 bits to denote edge kind
134
+ static constexpr u64_t EdgeKindMask = (~0ULL) >> (64 - EdgeKindMaskBits);
135
+ };
136
+
137
+
138
+
139
+ /*!
140
+ * Generic node on the graph as base class
141
+ */
142
+ template<class NodeTy,class EdgeTy>
143
+ class GenericNode: public SVFValue
144
+ {
145
+ friend class SVFIRWriter;
146
+ friend class SVFIRReader;
147
+
148
+ public:
149
+ typedef NodeTy NodeType;
150
+ typedef EdgeTy EdgeType;
151
+ /// Edge kind
152
+ typedef OrderedSet<EdgeType*, typename EdgeType::equalGEdge> GEdgeSetTy;
153
+ /// Edge iterator
154
+ ///@{
155
+ typedef typename GEdgeSetTy::iterator iterator;
156
+ typedef typename GEdgeSetTy::const_iterator const_iterator;
157
+ ///@}
158
+
159
+ private:
160
+
161
+ GEdgeSetTy InEdges; ///< all incoming edge of this node
162
+ GEdgeSetTy OutEdges; ///< all outgoing edge of this node
163
+
164
+ public:
165
+ /// Constructor
166
+ GenericNode(NodeID i, GNodeK k, const SVFType* svfType = nullptr): SVFValue(i, k, svfType)
167
+ {
168
+
169
+ }
170
+
171
+ /// Destructor
172
+ virtual ~GenericNode()
173
+ {
174
+ for (auto * edge : OutEdges)
175
+ delete edge;
176
+ }
177
+
178
+ /// Get incoming/outgoing edge set
179
+ ///@{
180
+ inline const GEdgeSetTy& getOutEdges() const
181
+ {
182
+ return OutEdges;
183
+ }
184
+ inline const GEdgeSetTy& getInEdges() const
185
+ {
186
+ return InEdges;
187
+ }
188
+ ///@}
189
+
190
+ /// Has incoming/outgoing edge set
191
+ //@{
192
+ inline bool hasIncomingEdge() const
193
+ {
194
+ return (InEdges.empty() == false);
195
+ }
196
+ inline bool hasOutgoingEdge() const
197
+ {
198
+ return (OutEdges.empty() == false);
199
+ }
200
+ //@}
201
+
202
+ /// iterators
203
+ //@{
204
+ inline iterator OutEdgeBegin()
205
+ {
206
+ return OutEdges.begin();
207
+ }
208
+ inline iterator OutEdgeEnd()
209
+ {
210
+ return OutEdges.end();
211
+ }
212
+ inline iterator InEdgeBegin()
213
+ {
214
+ return InEdges.begin();
215
+ }
216
+ inline iterator InEdgeEnd()
217
+ {
218
+ return InEdges.end();
219
+ }
220
+ inline const_iterator OutEdgeBegin() const
221
+ {
222
+ return OutEdges.begin();
223
+ }
224
+ inline const_iterator OutEdgeEnd() const
225
+ {
226
+ return OutEdges.end();
227
+ }
228
+ inline const_iterator InEdgeBegin() const
229
+ {
230
+ return InEdges.begin();
231
+ }
232
+ inline const_iterator InEdgeEnd() const
233
+ {
234
+ return InEdges.end();
235
+ }
236
+ //@}
237
+
238
+ /// Iterators used for SCC detection, overwrite it in child class if necessary
239
+ //@{
240
+ virtual inline iterator directOutEdgeBegin()
241
+ {
242
+ return OutEdges.begin();
243
+ }
244
+ virtual inline iterator directOutEdgeEnd()
245
+ {
246
+ return OutEdges.end();
247
+ }
248
+ virtual inline iterator directInEdgeBegin()
249
+ {
250
+ return InEdges.begin();
251
+ }
252
+ virtual inline iterator directInEdgeEnd()
253
+ {
254
+ return InEdges.end();
255
+ }
256
+
257
+ virtual inline const_iterator directOutEdgeBegin() const
258
+ {
259
+ return OutEdges.begin();
260
+ }
261
+ virtual inline const_iterator directOutEdgeEnd() const
262
+ {
263
+ return OutEdges.end();
264
+ }
265
+ virtual inline const_iterator directInEdgeBegin() const
266
+ {
267
+ return InEdges.begin();
268
+ }
269
+ virtual inline const_iterator directInEdgeEnd() const
270
+ {
271
+ return InEdges.end();
272
+ }
273
+ //@}
274
+
275
+ /// Add incoming and outgoing edges
276
+ //@{
277
+ inline bool addIncomingEdge(EdgeType* inEdge)
278
+ {
279
+ return InEdges.insert(inEdge).second;
280
+ }
281
+ inline bool addOutgoingEdge(EdgeType* outEdge)
282
+ {
283
+ return OutEdges.insert(outEdge).second;
284
+ }
285
+ //@}
286
+
287
+ /// Remove incoming and outgoing edges
288
+ ///@{
289
+ inline u32_t removeIncomingEdge(EdgeType* edge)
290
+ {
291
+ iterator it = InEdges.find(edge);
292
+ assert(it != InEdges.end() && "can not find in edge in SVFG node");
293
+ InEdges.erase(it);
294
+ return 1;
295
+ }
296
+ inline u32_t removeOutgoingEdge(EdgeType* edge)
297
+ {
298
+ iterator it = OutEdges.find(edge);
299
+ assert(it != OutEdges.end() && "can not find out edge in SVFG node");
300
+ OutEdges.erase(it);
301
+ return 1;
302
+ }
303
+ ///@}
304
+
305
+ /// Find incoming and outgoing edges
306
+ //@{
307
+ inline EdgeType* hasIncomingEdge(EdgeType* edge) const
308
+ {
309
+ const_iterator it = InEdges.find(edge);
310
+ if (it != InEdges.end())
311
+ return *it;
312
+ else
313
+ return nullptr;
314
+ }
315
+ inline EdgeType* hasOutgoingEdge(EdgeType* edge) const
316
+ {
317
+ const_iterator it = OutEdges.find(edge);
318
+ if (it != OutEdges.end())
319
+ return *it;
320
+ else
321
+ return nullptr;
322
+ }
323
+ //@}
324
+
325
+ static inline bool classof(const GenericNode<NodeTy, EdgeTy>*)
326
+ {
327
+ return true;
328
+ }
329
+
330
+ static inline bool classof(const SVFValue*)
331
+ {
332
+ return true;
333
+ }
334
+ };
335
+
336
+ /*
337
+ * Generic graph for program representation
338
+ * It is base class and needs to be instantiated
339
+ */
340
+ template<class NodeTy, class EdgeTy>
341
+ class GenericGraph
342
+ {
343
+ friend class SVFIRWriter;
344
+ friend class SVFIRReader;
345
+ friend class GenericGraphWriter<NodeTy, EdgeTy>;
346
+ friend class GenericGraphReader<NodeTy, EdgeTy>;
347
+
348
+ public:
349
+ typedef NodeTy NodeType;
350
+ typedef EdgeTy EdgeType;
351
+ /// NodeID to GenericNode map
352
+ typedef OrderedMap<NodeID, NodeType*> IDToNodeMapTy;
353
+
354
+ /// Node Iterators
355
+ //@{
356
+ typedef typename IDToNodeMapTy::iterator iterator;
357
+ typedef typename IDToNodeMapTy::const_iterator const_iterator;
358
+ //@}
359
+
360
+ /// Constructor
361
+ GenericGraph() : edgeNum(0), nodeNum(0) {}
362
+
363
+ /// Destructor
364
+ virtual ~GenericGraph()
365
+ {
366
+ destroy();
367
+ }
368
+
369
+ /// Release memory
370
+ void destroy()
371
+ {
372
+ for (auto &entry : IDToNodeMap)
373
+ delete entry.second;
374
+ }
375
+ /// Iterators
376
+ //@{
377
+ inline iterator begin()
378
+ {
379
+ return IDToNodeMap.begin();
380
+ }
381
+ inline iterator end()
382
+ {
383
+ return IDToNodeMap.end();
384
+ }
385
+ inline const_iterator begin() const
386
+ {
387
+ return IDToNodeMap.begin();
388
+ }
389
+ inline const_iterator end() const
390
+ {
391
+ return IDToNodeMap.end();
392
+ }
393
+ //}@
394
+
395
+ /// Add a Node
396
+ inline void addGNode(NodeID id, NodeType* node)
397
+ {
398
+ IDToNodeMap[id] = node;
399
+ nodeNum++;
400
+ }
401
+
402
+ /// Get a node
403
+ inline NodeType* getGNode(NodeID id) const
404
+ {
405
+ const_iterator it = IDToNodeMap.find(id);
406
+ assert(it != IDToNodeMap.end() && "Node not found!");
407
+ return it->second;
408
+ }
409
+
410
+ /// Has a node
411
+ inline bool hasGNode(NodeID id) const
412
+ {
413
+ const_iterator it = IDToNodeMap.find(id);
414
+ return it != IDToNodeMap.end();
415
+ }
416
+
417
+ /// Delete a node
418
+ inline void removeGNode(NodeType* node)
419
+ {
420
+ assert(node->hasIncomingEdge() == false
421
+ && node->hasOutgoingEdge() == false
422
+ && "node which have edges can't be deleted");
423
+ iterator it = IDToNodeMap.find(node->getId());
424
+ assert(it != IDToNodeMap.end() && "can not find the node");
425
+ IDToNodeMap.erase(it);
426
+ delete node;
427
+ }
428
+
429
+ /// Get total number of node/edge
430
+ inline u32_t getTotalNodeNum() const
431
+ {
432
+ return nodeNum;
433
+ }
434
+ inline u32_t getTotalEdgeNum() const
435
+ {
436
+ return edgeNum;
437
+ }
438
+ /// Increase number of node/edge
439
+ inline void incNodeNum()
440
+ {
441
+ nodeNum++;
442
+ }
443
+ inline void incEdgeNum()
444
+ {
445
+ edgeNum++;
446
+ }
447
+
448
+ protected:
449
+ IDToNodeMapTy IDToNodeMap; ///< node map
450
+
451
+ public:
452
+ u32_t edgeNum; ///< total num of node
453
+ u32_t nodeNum; ///< total num of edge
454
+ };
455
+
456
+ } // End namespace SVF
457
+
458
+ /* !
459
+ * GenericGraphTraits specializations for generic graph algorithms.
460
+ * Provide graph traits for traversing from a node using standard graph traversals.
461
+ */
462
+ namespace SVF
463
+ {
464
+
465
+ // mapped_iter - This is a simple iterator adapter that causes a function to
466
+ // be applied whenever operator* is invoked on the iterator.
467
+
468
+ template <typename ItTy, typename FuncTy,
469
+ typename FuncReturnTy =
470
+ decltype(std::declval<FuncTy>()(*std::declval<ItTy>()))>
471
+ class mapped_iter
472
+ : public iter_adaptor_base<
473
+ mapped_iter<ItTy, FuncTy>, ItTy,
474
+ typename std::iterator_traits<ItTy>::iterator_category,
475
+ typename std::remove_reference<FuncReturnTy>::type>
476
+ {
477
+ public:
478
+ mapped_iter(ItTy U, FuncTy F)
479
+ : mapped_iter::iter_adaptor_base(std::move(U)), F(std::move(F)) {}
480
+
481
+ ItTy getCurrent()
482
+ {
483
+ return this->I;
484
+ }
485
+
486
+ FuncReturnTy operator*() const
487
+ {
488
+ return F(*this->I);
489
+ }
490
+
491
+ private:
492
+ FuncTy F;
493
+ };
494
+
495
+ // map_iter - Provide a convenient way to create mapped_iters, just like
496
+ // make_pair is useful for creating pairs...
497
+ template <class ItTy, class FuncTy>
498
+ inline mapped_iter<ItTy, FuncTy> map_iter(ItTy I, FuncTy F)
499
+ {
500
+ return mapped_iter<ItTy, FuncTy>(std::move(I), std::move(F));
501
+ }
502
+
503
+ /*!
504
+ * GenericGraphTraits for nodes
505
+ */
506
+ template<class NodeTy,class EdgeTy> struct GenericGraphTraits<SVF::GenericNode<NodeTy,EdgeTy>* >
507
+ {
508
+ typedef NodeTy NodeType;
509
+ typedef EdgeTy EdgeType;
510
+
511
+ static inline NodeType* edge_dest(const EdgeType* E)
512
+ {
513
+ return E->getDstNode();
514
+ }
515
+
516
+ // nodes_iterator/begin/end - Allow iteration over all nodes in the graph
517
+ typedef mapped_iter<typename SVF::GenericNode<NodeTy,EdgeTy>::iterator, decltype(&edge_dest)> ChildIteratorType;
518
+
519
+ static NodeType* getEntryNode(NodeType* pagN)
520
+ {
521
+ return pagN;
522
+ }
523
+
524
+ static inline ChildIteratorType child_begin(const NodeType* N)
525
+ {
526
+ return map_iter(N->OutEdgeBegin(), &edge_dest);
527
+ }
528
+ static inline ChildIteratorType child_end(const NodeType* N)
529
+ {
530
+ return map_iter(N->OutEdgeEnd(), &edge_dest);
531
+ }
532
+ static inline ChildIteratorType direct_child_begin(const NodeType *N)
533
+ {
534
+ return map_iter(N->directOutEdgeBegin(), &edge_dest);
535
+ }
536
+ static inline ChildIteratorType direct_child_end(const NodeType *N)
537
+ {
538
+ return map_iter(N->directOutEdgeEnd(), &edge_dest);
539
+ }
540
+ };
541
+
542
+ /*!
543
+ * Inverse GenericGraphTraits for node which is used for inverse traversal.
544
+ */
545
+ template<class NodeTy,class EdgeTy>
546
+ struct GenericGraphTraits<Inverse<SVF::GenericNode<NodeTy,EdgeTy>* > >
547
+ {
548
+ typedef NodeTy NodeType;
549
+ typedef EdgeTy EdgeType;
550
+
551
+ static inline NodeType* edge_dest(const EdgeType* E)
552
+ {
553
+ return E->getSrcNode();
554
+ }
555
+
556
+ // nodes_iterator/begin/end - Allow iteration over all nodes in the graph
557
+ typedef mapped_iter<typename SVF::GenericNode<NodeTy,EdgeTy>::iterator, decltype(&edge_dest)> ChildIteratorType;
558
+
559
+ static inline NodeType* getEntryNode(Inverse<NodeType* > G)
560
+ {
561
+ return G.Graph;
562
+ }
563
+
564
+ static inline ChildIteratorType child_begin(const NodeType* N)
565
+ {
566
+ return map_iter(N->InEdgeBegin(), &edge_dest);
567
+ }
568
+ static inline ChildIteratorType child_end(const NodeType* N)
569
+ {
570
+ return map_iter(N->InEdgeEnd(), &edge_dest);
571
+ }
572
+
573
+ static inline unsigned getNodeID(const NodeType* N)
574
+ {
575
+ return N->getId();
576
+ }
577
+ };
578
+
579
+ /*!
580
+ * GraphTraints
581
+ */
582
+ template<class NodeTy,class EdgeTy> struct GenericGraphTraits<SVF::GenericGraph<NodeTy,EdgeTy>* > : public GenericGraphTraits<SVF::GenericNode<NodeTy,EdgeTy>* >
583
+ {
584
+ typedef SVF::GenericGraph<NodeTy,EdgeTy> GenericGraphTy;
585
+ typedef NodeTy NodeType;
586
+ typedef EdgeTy EdgeType;
587
+
588
+ static NodeType* getEntryNode(GenericGraphTy* pag)
589
+ {
590
+ return nullptr; // return null here, maybe later we could create a dummy node
591
+ }
592
+
593
+ typedef std::pair<SVF::NodeID, NodeType*> PairTy;
594
+ static inline NodeType* deref_val(PairTy P)
595
+ {
596
+ return P.second;
597
+ }
598
+
599
+ // nodes_iterator/begin/end - Allow iteration over all nodes in the graph
600
+ typedef mapped_iter<typename GenericGraphTy::iterator, decltype(&deref_val)> nodes_iterator;
601
+
602
+ static nodes_iterator nodes_begin(GenericGraphTy *G)
603
+ {
604
+ return map_iter(G->begin(), &deref_val);
605
+ }
606
+ static nodes_iterator nodes_end(GenericGraphTy *G)
607
+ {
608
+ return map_iter(G->end(), &deref_val);
609
+ }
610
+
611
+ static unsigned graphSize(GenericGraphTy* G)
612
+ {
613
+ return G->getTotalNodeNum();
614
+ }
615
+
616
+ static inline unsigned getNodeID(NodeType* N)
617
+ {
618
+ return N->getId();
619
+ }
620
+ static NodeType* getNode(GenericGraphTy *G, SVF::NodeID id)
621
+ {
622
+ return G->getGNode(id);
623
+ }
624
+ };
625
+
626
+ } // End namespace llvm
627
+
628
+ #endif /* GENERICGRAPH_H_ */