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.
- package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/WorkList.h +0 -0
- package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/Modules/FindZ3.cmake +93 -0
- package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFConfig.cmake +106 -0
- package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFConfigVersion.cmake +43 -0
- package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFTargets-release.cmake +101 -0
- package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFTargets.cmake +180 -0
- package/SVF-linux-aarch64/Release-build/lib/libSvfCore.so.3.1 +0 -0
- package/SVF-linux-aarch64/Release-build/lib/libSvfLLVM.so.3.1 +0 -0
- package/SVF-linux-aarch64/Release-build/lib/pkgconfig/SVF.pc +12 -0
- package/SVF-osx/Release-build/bin/ae +0 -0
- package/SVF-osx/Release-build/bin/cfl +0 -0
- package/SVF-osx/Release-build/bin/dvf +0 -0
- package/SVF-osx/Release-build/bin/llvm2svf +0 -0
- package/SVF-osx/Release-build/bin/mta +0 -0
- package/SVF-osx/Release-build/bin/saber +0 -0
- package/SVF-osx/Release-build/bin/svf-ex +0 -0
- package/SVF-osx/Release-build/bin/wpa +0 -0
- package/SVF-osx/Release-build/include/SVF/AE/Core/AbstractState.h +425 -0
- package/SVF-osx/Release-build/include/SVF/AE/Core/AbstractValue.h +157 -0
- package/SVF-osx/Release-build/include/SVF/AE/Core/AddressValue.h +225 -0
- package/SVF-osx/Release-build/include/SVF/AE/Core/ICFGWTO.h +135 -0
- package/SVF-osx/Release-build/include/SVF/AE/Core/IntervalValue.h +1055 -0
- package/SVF-osx/Release-build/include/SVF/AE/Core/NumericValue.h +1292 -0
- package/SVF-osx/Release-build/include/SVF/AE/Core/RelExeState.h +226 -0
- package/SVF-osx/Release-build/include/SVF/AE/Core/RelationSolver.h +91 -0
- package/SVF-osx/Release-build/include/SVF/AE/Svfexe/AEDetector.h +439 -0
- package/SVF-osx/Release-build/include/SVF/AE/Svfexe/AbsExtAPI.h +138 -0
- package/SVF-osx/Release-build/include/SVF/AE/Svfexe/AbstractInterpretation.h +384 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFGNormalizer.h +84 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFGrammar.h +468 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFLAlias.h +168 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFLBase.h +118 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFLGramGraphChecker.h +74 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFLGraphBuilder.h +168 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFLSVFGBuilder.h +58 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFLSolver.h +374 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFLStat.h +67 -0
- package/SVF-osx/Release-build/include/SVF/CFL/CFLVF.h +68 -0
- package/SVF-osx/Release-build/include/SVF/CFL/GrammarBuilder.h +100 -0
- package/SVF-osx/Release-build/include/SVF/DDA/ContextDDA.h +230 -0
- package/SVF-osx/Release-build/include/SVF/DDA/DDAClient.h +163 -0
- package/SVF-osx/Release-build/include/SVF/DDA/DDAPass.h +102 -0
- package/SVF-osx/Release-build/include/SVF/DDA/DDAStat.h +121 -0
- package/SVF-osx/Release-build/include/SVF/DDA/DDAVFSolver.h +794 -0
- package/SVF-osx/Release-build/include/SVF/DDA/FlowDDA.h +178 -0
- package/SVF-osx/Release-build/include/SVF/FastCluster/fastcluster.h +80 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/BasicBlockG.h +318 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/CDG.h +482 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/CFLGraph.h +232 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/CHG.h +368 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/CallGraph.h +497 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/ConsG.h +402 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/ConsGEdge.h +355 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/ConsGNode.h +418 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/DOTGraphTraits.h +188 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/GenericGraph.h +628 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/GraphPrinter.h +111 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/GraphTraits.h +150 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/GraphWriter.h +380 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/ICFG.h +331 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/ICFGEdge.h +281 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/ICFGNode.h +669 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/ICFGStat.h +164 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/IRGraph.h +398 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/SCC.h +375 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/SVFG.h +491 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/SVFGEdge.h +237 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/SVFGNode.h +501 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/SVFGOPT.h +372 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/SVFGStat.h +273 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/ThreadCallGraph.h +399 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/VFG.h +726 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/VFGEdge.h +295 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/VFGNode.h +1266 -0
- package/SVF-osx/Release-build/include/SVF/Graphs/WTO.h +872 -0
- package/SVF-osx/Release-build/include/SVF/MSSA/MSSAMuChi.h +722 -0
- package/SVF-osx/Release-build/include/SVF/MSSA/MemPartition.h +169 -0
- package/SVF-osx/Release-build/include/SVF/MSSA/MemRegion.h +489 -0
- package/SVF-osx/Release-build/include/SVF/MSSA/MemSSA.h +452 -0
- package/SVF-osx/Release-build/include/SVF/MSSA/SVFGBuilder.h +104 -0
- package/SVF-osx/Release-build/include/SVF/MTA/LockAnalysis.h +533 -0
- package/SVF-osx/Release-build/include/SVF/MTA/MHP.h +546 -0
- package/SVF-osx/Release-build/include/SVF/MTA/MTA.h +97 -0
- package/SVF-osx/Release-build/include/SVF/MTA/MTAStat.h +73 -0
- package/SVF-osx/Release-build/include/SVF/MTA/TCT.h +620 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/AbstractPointsToDS.h +316 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/AccessPath.h +194 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/ConditionalPT.h +878 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/MutablePointsToDS.h +1025 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/PersistentPointsToCache.h +463 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/PersistentPointsToDS.h +955 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/PointerAnalysis.h +428 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/PointerAnalysisImpl.h +602 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/PointsTo.h +255 -0
- package/SVF-osx/Release-build/include/SVF/MemoryModel/SVFLoop.h +167 -0
- package/SVF-osx/Release-build/include/SVF/SABER/DoubleFreeChecker.h +76 -0
- package/SVF-osx/Release-build/include/SVF/SABER/FileChecker.h +80 -0
- package/SVF-osx/Release-build/include/SVF/SABER/LeakChecker.h +122 -0
- package/SVF-osx/Release-build/include/SVF/SABER/ProgSlice.h +327 -0
- package/SVF-osx/Release-build/include/SVF/SABER/SaberCheckerAPI.h +151 -0
- package/SVF-osx/Release-build/include/SVF/SABER/SaberCondAllocator.h +317 -0
- package/SVF-osx/Release-build/include/SVF/SABER/SaberSVFGBuilder.h +114 -0
- package/SVF-osx/Release-build/include/SVF/SABER/SrcSnkDDA.h +327 -0
- package/SVF-osx/Release-build/include/SVF/SABER/SrcSnkSolver.h +186 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/BasicTypes.h +280 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/BreakConstantExpr.h +93 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/CHGBuilder.h +78 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/CppUtil.h +184 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/DCHG.h +474 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/GEPTypeBridgeIterator.h +183 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/ICFGBuilder.h +160 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/LLVMLoopAnalysis.h +60 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/LLVMModule.h +527 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/LLVMUtil.h +433 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/ObjTypeInference.h +129 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/SVFIRBuilder.h +523 -0
- package/SVF-osx/Release-build/include/SVF/SVF-LLVM/SymbolTableBuilder.h +132 -0
- package/SVF-osx/Release-build/include/SVF/SVFIR/ObjTypeInfo.h +224 -0
- package/SVF-osx/Release-build/include/SVF/SVFIR/PAGBuilderFromFile.h +80 -0
- package/SVF-osx/Release-build/include/SVF/SVFIR/SVFIR.h +856 -0
- package/SVF-osx/Release-build/include/SVF/SVFIR/SVFStatements.h +1330 -0
- package/SVF-osx/Release-build/include/SVF/SVFIR/SVFType.h +606 -0
- package/SVF-osx/Release-build/include/SVF/SVFIR/SVFValue.h +338 -0
- package/SVF-osx/Release-build/include/SVF/SVFIR/SVFVariables.h +2212 -0
- package/SVF-osx/Release-build/include/SVF/Util/Annotator.h +180 -0
- package/SVF-osx/Release-build/include/SVF/Util/BitVector.h +55 -0
- package/SVF-osx/Release-build/include/SVF/Util/CDGBuilder.h +107 -0
- package/SVF-osx/Release-build/include/SVF/Util/CallGraphBuilder.h +61 -0
- package/SVF-osx/Release-build/include/SVF/Util/Casting.h +426 -0
- package/SVF-osx/Release-build/include/SVF/Util/CommandLine.h +530 -0
- package/SVF-osx/Release-build/include/SVF/Util/CoreBitVector.h +214 -0
- package/SVF-osx/Release-build/include/SVF/Util/CxtStmt.h +502 -0
- package/SVF-osx/Release-build/include/SVF/Util/DPItem.h +618 -0
- package/SVF-osx/Release-build/include/SVF/Util/ExtAPI.h +117 -0
- package/SVF-osx/Release-build/include/SVF/Util/GeneralType.h +127 -0
- package/SVF-osx/Release-build/include/SVF/Util/GraphReachSolver.h +186 -0
- package/SVF-osx/Release-build/include/SVF/Util/NodeIDAllocator.h +203 -0
- package/SVF-osx/Release-build/include/SVF/Util/Options.h +273 -0
- package/SVF-osx/Release-build/include/SVF/Util/PTAStat.h +83 -0
- package/SVF-osx/Release-build/include/SVF/Util/SVFBugReport.h +427 -0
- package/SVF-osx/Release-build/include/SVF/Util/SVFLoopAndDomInfo.h +169 -0
- package/SVF-osx/Release-build/include/SVF/Util/SVFStat.h +103 -0
- package/SVF-osx/Release-build/include/SVF/Util/SVFUtil.h +478 -0
- package/SVF-osx/Release-build/include/SVF/Util/SparseBitVector.h +1252 -0
- package/SVF-osx/Release-build/include/SVF/Util/ThreadAPI.h +188 -0
- package/SVF-osx/Release-build/include/SVF/Util/WorkList.h +317 -0
- package/SVF-osx/Release-build/include/SVF/Util/Z3Expr.h +325 -0
- package/SVF-osx/Release-build/include/SVF/Util/cJSON.h +300 -0
- package/SVF-osx/Release-build/include/SVF/Util/config.h +46 -0
- package/SVF-osx/Release-build/include/SVF/Util/iterator.h +407 -0
- package/SVF-osx/Release-build/include/SVF/Util/iterator_range.h +76 -0
- package/SVF-osx/Release-build/include/SVF/WPA/Andersen.h +434 -0
- package/SVF-osx/Release-build/include/SVF/WPA/AndersenPWC.h +160 -0
- package/SVF-osx/Release-build/include/SVF/WPA/CSC.h +95 -0
- package/SVF-osx/Release-build/include/SVF/WPA/FlowSensitive.h +322 -0
- package/SVF-osx/Release-build/include/SVF/WPA/Steensgaard.h +131 -0
- package/SVF-osx/Release-build/include/SVF/WPA/TypeAnalysis.h +90 -0
- package/SVF-osx/Release-build/include/SVF/WPA/VersionedFlowSensitive.h +295 -0
- package/SVF-osx/Release-build/include/SVF/WPA/WPAFSSolver.h +246 -0
- package/SVF-osx/Release-build/include/SVF/WPA/WPAPass.h +115 -0
- package/SVF-osx/Release-build/include/SVF/WPA/WPASolver.h +205 -0
- package/SVF-osx/Release-build/include/SVF/WPA/WPAStat.h +222 -0
- package/SVF-osx/Release-build/include/SVF/extapi.bc +2384 -0
- package/SVF-osx/Release-build/lib/cmake/SVF/Modules/FindZ3.cmake +93 -0
- package/SVF-osx/Release-build/lib/cmake/SVF/SVFConfig.cmake +106 -0
- package/SVF-osx/Release-build/lib/cmake/SVF/SVFConfigVersion.cmake +43 -0
- package/SVF-osx/Release-build/lib/cmake/SVF/SVFTargets-release.cmake +101 -0
- package/SVF-osx/Release-build/lib/cmake/SVF/SVFTargets.cmake +180 -0
- package/SVF-osx/Release-build/lib/libSvfCore.3.1.dylib +0 -0
- package/SVF-osx/Release-build/lib/libSvfLLVM.3.1.dylib +0 -0
- package/SVF-osx/Release-build/lib/pkgconfig/SVF.pc +12 -0
- package/package.json +1 -1
- package/SVF-linux-aarch64/Release-build/include/CFL/grammar/PAGGrammar.txt +0 -15
- package/SVF-linux-aarch64/Release-build/include/CFL/grammar/PEGGrammar.txt +0 -11
- package/SVF-linux-aarch64/Release-build/include/CFL/grammar/VFGGrammar.txt +0 -7
- package/SVF-linux-aarch64/Release-build/include/FastCluster/LICENSE.TXT +0 -13
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/AbstractState.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/AbstractValue.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/AddressValue.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/ICFGWTO.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/IntervalValue.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/NumericValue.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/RelExeState.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/RelationSolver.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Svfexe/AEDetector.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Svfexe/AbsExtAPI.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Svfexe/AbstractInterpretation.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFGNormalizer.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFGrammar.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLAlias.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLBase.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLGramGraphChecker.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLGraphBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLSVFGBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLSolver.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLStat.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLVF.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/GrammarBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/ContextDDA.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAClient.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAPass.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAStat.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAVFSolver.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/FlowDDA.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{FastCluster → SVF/FastCluster}/fastcluster.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/BasicBlockG.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CDG.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CFLGraph.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CHG.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CallGraph.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ConsG.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ConsGEdge.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ConsGNode.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/DOTGraphTraits.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GenericGraph.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GraphPrinter.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GraphTraits.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GraphWriter.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFG.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFGEdge.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFGNode.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFGStat.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/IRGraph.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SCC.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFG.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGEdge.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGNode.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGOPT.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGStat.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ThreadCallGraph.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/VFG.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/VFGEdge.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/VFGNode.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/WTO.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MSSAMuChi.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MemPartition.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MemRegion.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MemSSA.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/SVFGBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/LockAnalysis.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/MHP.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/MTA.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/MTAStat.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/TCT.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/AbstractPointsToDS.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/AccessPath.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/ConditionalPT.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/MutablePointsToDS.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PersistentPointsToCache.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PersistentPointsToDS.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PointerAnalysis.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PointerAnalysisImpl.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PointsTo.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/SVFLoop.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/DoubleFreeChecker.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/FileChecker.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/LeakChecker.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/ProgSlice.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SaberCheckerAPI.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SaberCondAllocator.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SaberSVFGBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SrcSnkDDA.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SrcSnkSolver.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/BasicTypes.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/BreakConstantExpr.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/CHGBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/CppUtil.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/DCHG.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/GEPTypeBridgeIterator.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/ICFGBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/LLVMLoopAnalysis.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/LLVMModule.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/LLVMUtil.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/ObjTypeInference.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/SVFIRBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/SymbolTableBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/ObjTypeInfo.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/PAGBuilderFromFile.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFIR.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFStatements.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFType.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFValue.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFVariables.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Annotator.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/BitVector.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CDGBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CallGraphBuilder.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Casting.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CommandLine.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CoreBitVector.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CxtStmt.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/DPItem.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/ExtAPI.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/GeneralType.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/GraphReachSolver.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/NodeIDAllocator.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Options.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/PTAStat.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFBugReport.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFLoopAndDomInfo.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFStat.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFUtil.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SparseBitVector.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/ThreadAPI.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Z3Expr.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/cJSON.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/iterator.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/iterator_range.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/Andersen.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/AndersenPWC.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/CSC.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/FlowSensitive.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/Steensgaard.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/TypeAnalysis.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/VersionedFlowSensitive.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPAFSSolver.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPAPass.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPASolver.h +0 -0
- /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPAStat.h +0 -0
- /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_ */
|