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,178 @@
1
+ //===- FlowDDA.h -- Flow-sensitive demand-driven analysis -------------//
2
+ //
3
+ // SVF: Static Value-Flow Analysis
4
+ //
5
+ // Copyright (C) <2013-> <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
+ * FlowDDA.h
25
+ *
26
+ * Created on: Jun 30, 2014
27
+ * Author: Yulei Sui, Sen Ye
28
+ *
29
+ * The implementation is based on
30
+ * (1) Yulei Sui and Jingling Xue. "On-Demand Strong Update Analysis via Value-Flow Refinement".
31
+ * ACM SIGSOFT International Symposium on the Foundation of Software Engineering (FSE'16)
32
+ *
33
+ * (2) Yulei Sui and Jingling Xue. "Value-Flow-Based Demand-Driven Pointer Analysis for C and C++".
34
+ * IEEE Transactions on Software Engineering (TSE'18)
35
+ */
36
+
37
+ #ifndef FlowDDA_H_
38
+ #define FlowDDA_H_
39
+
40
+ #include "MemoryModel/PointerAnalysisImpl.h"
41
+ #include "Util/DPItem.h"
42
+ #include "DDA/DDAVFSolver.h"
43
+
44
+ namespace SVF
45
+ {
46
+
47
+ class DDAClient;
48
+ typedef StmtDPItem<SVFGNode> LocDPItem;
49
+
50
+ /*!
51
+ * Flow sensitive demand-driven analysis on value-flow graph
52
+ */
53
+ class FlowDDA : public BVDataPTAImpl, public DDAVFSolver<NodeID,PointsTo,LocDPItem>
54
+ {
55
+
56
+ public:
57
+ typedef BVDataPTAImpl::CallSiteSet CallSiteSet;
58
+ typedef BVDataPTAImpl::CallEdgeMap CallEdgeMap;
59
+ typedef BVDataPTAImpl::FunctionSet FunctionSet;
60
+ /// Constructor
61
+ FlowDDA(SVFIR* _pag, DDAClient* client): BVDataPTAImpl(_pag, PointerAnalysis::FlowS_DDA),
62
+ DDAVFSolver<NodeID,PointsTo,LocDPItem>(),
63
+ _client(client)
64
+ {
65
+ }
66
+ /// Destructor
67
+ inline virtual ~FlowDDA()
68
+ {
69
+ }
70
+ /// dummy analyze method
71
+ virtual void analyze() override {}
72
+
73
+ /// Compute points-to set for all top variable
74
+ void computeDDAPts(NodeID id) override;
75
+
76
+ /// Handle out-of-budget dpm
77
+ void handleOutOfBudgetDpm(const LocDPItem& dpm);
78
+
79
+ /// Handle condition for flow analysis (backward analysis)
80
+ virtual bool handleBKCondition(LocDPItem& dpm, const SVFGEdge* edge) override;
81
+
82
+ /// refine indirect call edge
83
+ bool testIndCallReachability(LocDPItem& dpm, const FunObjVar* callee, CallSiteID csId);
84
+
85
+ /// Initialization of the analysis
86
+ inline virtual void initialize() override
87
+ {
88
+ BVDataPTAImpl::initialize();
89
+ buildSVFG(pag);
90
+ setCallGraph(getCallGraph());
91
+ setCallGraphSCC(getCallGraphSCC());
92
+ stat = setDDAStat(new DDAStat(this));
93
+ }
94
+
95
+ /// Finalize analysis
96
+ inline virtual void finalize() override
97
+ {
98
+ BVDataPTAImpl::finalize();
99
+ }
100
+
101
+ /// we exclude concrete heap here following the conditions:
102
+ /// (1) local allocated heap and
103
+ /// (2) not escaped to the scope outside the current function
104
+ /// (3) not inside loop
105
+ /// (4) not involved in recursion
106
+ virtual bool isHeapCondMemObj(const NodeID& var, const StoreSVFGNode* store) override;
107
+
108
+ /// Override parent method
109
+ virtual inline PointsTo getConservativeCPts(const LocDPItem& dpm) override
110
+ {
111
+ return getAndersenAnalysis()->getPts(dpm.getCurNodeID());
112
+ }
113
+ /// Override parent method
114
+ virtual inline NodeID getPtrNodeID(const NodeID& var) const override
115
+ {
116
+ return var;
117
+ }
118
+ /// Handle Address SVFGNode to add proper points-to
119
+ virtual inline void handleAddr(PointsTo& pts,const LocDPItem& dpm,const AddrSVFGNode* addr) override
120
+ {
121
+ NodeID srcID = addr->getPAGSrcNodeID();
122
+ /// whether this object is set field-insensitive during pre-analysis
123
+ if (isFieldInsensitive(srcID))
124
+ srcID = getFIObjVar(srcID);
125
+
126
+ addDDAPts(pts,srcID);
127
+ DBOUT(DDDA, SVFUtil::outs() << "\t add points-to target " << srcID << " to dpm ");
128
+ DBOUT(DDDA, dpm.dump());
129
+ }
130
+ /// processGep node
131
+ virtual PointsTo processGepPts(const GepSVFGNode* gep, const PointsTo& srcPts) override;
132
+
133
+ /// Update call graph.
134
+ //@{
135
+ virtual void updateCallGraphAndSVFG(const LocDPItem& dpm,const CallICFGNode* cs,SVFGEdgeSet& svfgEdges) override
136
+ {
137
+ CallEdgeMap newEdges;
138
+ resolveIndCalls(cs, getCachedPointsTo(dpm), newEdges);
139
+ for (CallEdgeMap::const_iterator iter = newEdges.begin(),eiter = newEdges.end(); iter != eiter; iter++)
140
+ {
141
+ const CallICFGNode* newcs = iter->first;
142
+ const FunctionSet & functions = iter->second;
143
+ for (FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)
144
+ {
145
+ const FunObjVar* func = *func_iter;
146
+ getSVFG()->connectCallerAndCallee(newcs, func, svfgEdges);
147
+ }
148
+ }
149
+ }
150
+ //@}
151
+
152
+ /// Override parent class functions to get/add cached points-to directly via PAGNode ID
153
+ //@{
154
+ virtual inline const PointsTo& getCachedTLPointsTo(const LocDPItem& dpm) override
155
+ {
156
+ return getPts(dpm.getCurNodeID());
157
+ }
158
+ //@}
159
+
160
+ /// Union pts
161
+ bool unionDDAPts(LocDPItem dpm, const PointsTo& targetPts) override
162
+ {
163
+ if (isTopLevelPtrStmt(dpm.getLoc())) return unionPts(dpm.getCurNodeID(), targetPts);
164
+ else return dpmToADCPtSetMap[dpm] |= targetPts;
165
+ }
166
+
167
+ virtual const std::string PTAName() const override
168
+ {
169
+ return "FlowSensitive DDA";
170
+ }
171
+
172
+ private:
173
+ DDAClient* _client; ///< DDA client
174
+ };
175
+
176
+ } // End namespace SVF
177
+
178
+ #endif /* FlowDDA_H_ */
@@ -0,0 +1,80 @@
1
+ //
2
+ // C++ standalone version of fastcluster by Daniel Muellner
3
+ //
4
+ // Copyright: Daniel Muellner, 2011
5
+ // Christoph Dalitz, 2020
6
+ // License: BSD style license
7
+ // (see the file LICENSE for details)
8
+ //
9
+
10
+ #ifndef fastclustercpp_H
11
+ #define fastclustercpp_H
12
+
13
+ //
14
+ // Assigns cluster labels (0, ..., nclust-1) to the n points such
15
+ // that the cluster result is split into nclust clusters.
16
+ //
17
+ // Input arguments:
18
+ // n = number of observables
19
+ // merge = clustering result in R format
20
+ // nclust = number of clusters
21
+ // Output arguments:
22
+ // labels = allocated integer array of size n for result
23
+ //
24
+ void cutree_k(int n, const int* merge, int nclust, int* labels);
25
+
26
+ //
27
+ // Assigns cluster labels (0, ..., nclust-1) to the n points such
28
+ // that the hierarchical clustering is stopped at cluster distance cdist
29
+ //
30
+ // Input arguments:
31
+ // n = number of observables
32
+ // merge = clustering result in R format
33
+ // height = cluster distance at each merge step
34
+ // cdist = cutoff cluster distance
35
+ // Output arguments:
36
+ // labels = allocated integer array of size n for result
37
+ //
38
+ void cutree_cdist(int n, const int* merge, double* height, double cdist, int* labels);
39
+
40
+ //
41
+ // Hierarchical clustering with one of Daniel Muellner's fast algorithms
42
+ //
43
+ // Input arguments:
44
+ // n = number of observables
45
+ // distmat = condensed distance matrix, i.e. an n*(n-1)/2 array representing
46
+ // the upper triangle (without diagonal elements) of the distance
47
+ // matrix, e.g. for n=4:
48
+ // d00 d01 d02 d03
49
+ // d10 d11 d12 d13 -> d01 d02 d03 d12 d13 d23
50
+ // d20 d21 d22 d23
51
+ // d30 d31 d32 d33
52
+ // method = cluster metric (see enum hclust_fast_methods)
53
+ // Output arguments:
54
+ // merge = allocated (n-1)x2 matrix (2*(n-1) array) for storing result.
55
+ // Result follows R hclust convention:
56
+ // - observable indices start with one
57
+ // - merge[i][] contains the merged nodes in step i
58
+ // - merge[i][j] is negative when the node is an atom
59
+ // height = allocated (n-1) array with distances at each merge step
60
+ // Return code:
61
+ // 0 = ok
62
+ // 1 = invalid method
63
+ //
64
+ int hclust_fast(int n, double* distmat, int method, int* merge, double* height);
65
+ enum hclust_fast_methods
66
+ {
67
+ // single link with the minimum spanning tree algorithm (Rohlf, 1973)
68
+ HCLUST_METHOD_SINGLE = 0,
69
+ // complete link with the nearest-neighbor-chain algorithm (Murtagh, 1984)
70
+ HCLUST_METHOD_COMPLETE = 1,
71
+ // complete link with the nearest-neighbor-chain algorithm (Murtagh, 1984)
72
+ HCLUST_METHOD_AVERAGE = 2,
73
+ // median link with the generic algorithm (Müllner, 2011)
74
+ HCLUST_METHOD_MEDIAN = 3,
75
+ // To indicate to try all methods and pick the best.
76
+ HCLUST_METHOD_SVF_BEST = 4
77
+ };
78
+
79
+
80
+ #endif
@@ -0,0 +1,318 @@
1
+ //===- BasicBlockG.h -- BasicBlock node------------------------------------------------//
2
+ //
3
+ // SVF: Static Value-Flow Analysis
4
+ //
5
+ // Copyright (C) <2013-2025> <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
+ * ICFGNode.h
25
+ *
26
+ * Created on: 23 Jan, 2025
27
+ * Author: Jiawei, Xiao
28
+ */
29
+
30
+ #ifndef BASICBLOCKGRAPH_H_
31
+ #define BASICBLOCKGRAPH_H_
32
+ #include "GenericGraph.h"
33
+ #include <sstream>
34
+ #include <algorithm>
35
+
36
+
37
+ namespace SVF
38
+ {
39
+ class SVFBasicBlock;
40
+ class BasicBlockEdge;
41
+ class ICFGNode;
42
+ class FunObjVar;
43
+
44
+ typedef GenericEdge<SVFBasicBlock> GenericBasicBlockEdgeTy;
45
+ class BasicBlockEdge: public GenericBasicBlockEdgeTy
46
+ {
47
+ friend class SVFIRWriter;
48
+ friend class SVFIRReader;
49
+
50
+ public:
51
+ public:
52
+ /// Constructor
53
+ BasicBlockEdge(SVFBasicBlock* s, SVFBasicBlock* d) : GenericBasicBlockEdgeTy(s, d, 0)
54
+ {
55
+ }
56
+ /// Destructor
57
+ ~BasicBlockEdge() {}
58
+
59
+ /// Overloading operator << for dumping ICFG node ID
60
+ //@{
61
+ friend OutStream& operator<<(OutStream& o, const BasicBlockEdge& edge)
62
+ {
63
+ o << edge.toString();
64
+ return o;
65
+ }
66
+ //@}
67
+
68
+ virtual const std::string toString() const;
69
+ };
70
+
71
+
72
+ typedef GenericNode<SVFBasicBlock, BasicBlockEdge> GenericBasicBlockNodeTy;
73
+ class SVFBasicBlock : public GenericBasicBlockNodeTy
74
+ {
75
+ friend class LLVMModuleSet;
76
+ friend class SVFIRWriter;
77
+ friend class SVFIRReader;
78
+ friend class SVFIRBuilder;
79
+ friend class FunObjVar;
80
+ friend class ICFGBuilder;
81
+ friend class ICFG;
82
+
83
+ public:
84
+ typedef std::vector<const ICFGNode*>::const_iterator const_iterator;
85
+ std::vector<const SVFBasicBlock*> succBBs;
86
+ std::vector<const SVFBasicBlock*> predBBs;
87
+
88
+ private:
89
+ std::vector<const ICFGNode*> allICFGNodes; ///< all ICFGNodes in this BasicBlock
90
+ const FunObjVar* fun; /// Function where this BasicBlock is
91
+
92
+
93
+
94
+ protected:
95
+ ///@{ attributes to be set only through Module builders e.g., LLVMModule
96
+
97
+ inline void addICFGNode(const ICFGNode* icfgNode)
98
+ {
99
+ assert(std::find(getICFGNodeList().begin(), getICFGNodeList().end(),
100
+ icfgNode) == getICFGNodeList().end() && "duplicated icfgnode");
101
+ allICFGNodes.push_back(icfgNode);
102
+ }
103
+
104
+ /// @}
105
+
106
+ public:
107
+ /// Constructor without name
108
+ SVFBasicBlock(NodeID id, const FunObjVar* f): GenericBasicBlockNodeTy(id, BasicBlockKd), fun(f)
109
+ {
110
+
111
+ }
112
+ SVFBasicBlock() = delete;
113
+ ~SVFBasicBlock()
114
+ {
115
+
116
+ }
117
+
118
+ static inline bool classof(const SVFValue* node)
119
+ {
120
+ return node->getNodeKind() == SVFValue::BasicBlockKd;
121
+ }
122
+
123
+ static inline bool classof(const SVFBasicBlock* node)
124
+ {
125
+ return true;
126
+ }
127
+
128
+ //@{
129
+ friend OutStream &operator<<(OutStream &o, const SVFBasicBlock&node)
130
+ {
131
+ o << node.toString();
132
+ return o;
133
+ }
134
+ //@}
135
+
136
+
137
+ inline const std::vector<const ICFGNode*>& getICFGNodeList() const
138
+ {
139
+ return allICFGNodes;
140
+ }
141
+
142
+ inline const_iterator begin() const
143
+ {
144
+ return allICFGNodes.begin();
145
+ }
146
+
147
+ inline const_iterator end() const
148
+ {
149
+ return allICFGNodes.end();
150
+ }
151
+
152
+
153
+ inline void setFun(const FunObjVar* f)
154
+ {
155
+ fun = f;
156
+ }
157
+
158
+ inline void addSuccBasicBlock(const SVFBasicBlock* succ2)
159
+ {
160
+ // check if the edge already exists
161
+ for (auto edge: this->getOutEdges())
162
+ {
163
+ if (edge->getDstNode() == succ2)
164
+ return;
165
+ }
166
+
167
+ SVFBasicBlock* succ = const_cast<SVFBasicBlock*>(succ2);
168
+ BasicBlockEdge* edge = new BasicBlockEdge(this, succ);
169
+ this->addOutgoingEdge(edge);
170
+ succ->addIncomingEdge(edge);
171
+ this->succBBs.push_back(succ);
172
+ succ->predBBs.push_back(this);
173
+ }
174
+
175
+ inline void addPredBasicBlock(const SVFBasicBlock* pred2)
176
+ {
177
+ // check if the edge already exists
178
+ for (auto edge: this->getInEdges())
179
+ {
180
+ if (edge->getSrcNode() == pred2)
181
+ return;
182
+ }
183
+ SVFBasicBlock* pred = const_cast<SVFBasicBlock*>(pred2);
184
+ BasicBlockEdge* edge = new BasicBlockEdge(pred, this);
185
+ this->addIncomingEdge(edge);
186
+ pred->addOutgoingEdge(edge);
187
+ this->predBBs.push_back(pred);
188
+ pred->succBBs.push_back(this);
189
+ }
190
+
191
+ inline const FunObjVar* getParent() const
192
+ {
193
+ assert(fun && "Function is null?");
194
+ return fun;
195
+ }
196
+
197
+ inline const FunObjVar* getFunction() const
198
+ {
199
+ assert(fun && "Function is null?");
200
+ return fun;
201
+ }
202
+
203
+ inline const ICFGNode* front() const
204
+ {
205
+ assert(!allICFGNodes.empty() && "bb empty?");
206
+ return allICFGNodes.front();
207
+ }
208
+
209
+ inline const ICFGNode* back() const
210
+ {
211
+ assert(!allICFGNodes.empty() && "bb empty?");
212
+ return allICFGNodes.back();
213
+ }
214
+
215
+ inline std::vector<const SVFBasicBlock*> getSuccessors() const
216
+ {
217
+ std::vector<const SVFBasicBlock*> res;
218
+ for (auto edge : this->getOutEdges())
219
+ {
220
+ res.push_back(edge->getDstNode());
221
+ }
222
+ return res;
223
+ }
224
+
225
+ inline std::vector<const SVFBasicBlock*> getPredecessors() const
226
+ {
227
+ std::vector<const SVFBasicBlock*> res;
228
+ for (auto edge : this->getInEdges())
229
+ {
230
+ res.push_back(edge->getSrcNode());
231
+ }
232
+ return res;
233
+ }
234
+ u32_t getNumSuccessors() const
235
+ {
236
+ return this->getOutEdges().size();
237
+ }
238
+ u32_t getBBSuccessorPos(const SVFBasicBlock* Succ)
239
+ {
240
+ u32_t i = 0;
241
+ for (const SVFBasicBlock* SuccBB: succBBs)
242
+ {
243
+ if (SuccBB == Succ)
244
+ return i;
245
+ i++;
246
+ }
247
+ assert(false && "Didn't find successor edge?");
248
+ return 0;
249
+ }
250
+ u32_t getBBSuccessorPos(const SVFBasicBlock* Succ) const
251
+ {
252
+ u32_t i = 0;
253
+ for (const SVFBasicBlock* SuccBB: succBBs)
254
+ {
255
+ if (SuccBB == Succ)
256
+ return i;
257
+ i++;
258
+ }
259
+ assert(false && "Didn't find successor edge?");
260
+ return 0;
261
+
262
+ }
263
+ u32_t getBBPredecessorPos(const SVFBasicBlock* succbb)
264
+ {
265
+ u32_t pos = 0;
266
+ for (const SVFBasicBlock* PredBB : succbb->getPredecessors())
267
+ {
268
+ if(PredBB == this)
269
+ return pos;
270
+ ++pos;
271
+ }
272
+ assert(false && "Didn't find predecessor edge?");
273
+ return pos;
274
+ }
275
+ u32_t getBBPredecessorPos(const SVFBasicBlock* succbb) const
276
+ {
277
+ u32_t pos = 0;
278
+ for (const SVFBasicBlock* PredBB : succbb->getPredecessors())
279
+ {
280
+ if(PredBB == this)
281
+ return pos;
282
+ ++pos;
283
+ }
284
+ assert(false && "Didn't find predecessor edge?");
285
+ return pos;
286
+ }
287
+
288
+ const std::string toString() const;
289
+
290
+ };
291
+
292
+
293
+
294
+ typedef GenericGraph<SVFBasicBlock, BasicBlockEdge> GenericBasicBlockGraphTy;
295
+ class BasicBlockGraph: public GenericBasicBlockGraphTy
296
+ {
297
+ private:
298
+ NodeID id{0};
299
+ public:
300
+ /// Constructor
301
+ BasicBlockGraph()
302
+ {
303
+
304
+ }
305
+
306
+ SVFBasicBlock* addBasicBlock(const std::string& bbname)
307
+ {
308
+ id++;
309
+ SVFBasicBlock* bb = new SVFBasicBlock(id, nullptr);
310
+ addGNode(id, bb);
311
+ bb->setName(bbname);
312
+ return bb;
313
+ }
314
+
315
+ };
316
+ }
317
+
318
+ #endif