svf-lib 1.0.1374 → 1.0.1376
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/Release-build/{lib/libSvf.a → svf-llvm/libSvfLLVM.a} +0 -0
- package/SVF-linux/{include → svf/include}/AbstractExecution/AbstractValue.h +0 -0
- package/SVF-linux/{include → svf/include}/AbstractExecution/AddressValue.h +0 -0
- package/SVF-linux/{include → svf/include}/AbstractExecution/ExeState.h +0 -0
- package/SVF-linux/{include → svf/include}/AbstractExecution/IntervalExeState.h +0 -0
- package/SVF-linux/{include → svf/include}/AbstractExecution/IntervalValue.h +0 -0
- package/SVF-linux/{include → svf/include}/AbstractExecution/NumericLiteral.h +0 -0
- package/SVF-linux/{include → svf/include}/AbstractExecution/RelExeState.h +0 -0
- package/SVF-linux/{include → svf/include}/AbstractExecution/RelationSolver.h +0 -0
- package/SVF-linux/{include → svf/include}/AbstractExecution/SVFIR2ItvExeState.h +0 -0
- package/SVF-linux/{include → svf/include}/AbstractExecution/WTO.h +0 -0
- package/SVF-linux/{include → svf/include}/CFL/CFGNormalizer.h +0 -0
- package/SVF-linux/{include → svf/include}/CFL/CFLAlias.h +0 -0
- package/SVF-linux/{include → svf/include}/CFL/CFLBase.h +0 -0
- package/SVF-linux/{include → svf/include}/CFL/CFLData.h +0 -0
- package/SVF-linux/{include → svf/include}/CFL/CFLDataBuilder.h +0 -0
- package/SVF-linux/{include → svf/include}/CFL/CFLGramGraphChecker.h +0 -0
- package/SVF-linux/{include → svf/include}/CFL/CFLGrammar.h +0 -0
- package/SVF-linux/{include → svf/include}/CFL/CFLGrammar.txt +0 -0
- package/SVF-linux/{include → svf/include}/CFL/CFLGrammarDev.txt +0 -0
- package/SVF-linux/{include → svf/include}/CFL/CFLGraphBuilder.h +0 -0
- package/SVF-linux/{include → svf/include}/CFL/CFLSolver.h +0 -0
- package/SVF-linux/{include → svf/include}/CFL/CFLStat.h +0 -0
- package/SVF-linux/{include → svf/include}/CFL/CFLVF.h +0 -0
- package/SVF-linux/{include → svf/include}/CFL/GrammarBuilder.h +0 -0
- package/SVF-linux/{include → svf/include}/CFL/PEGGrammar.txt +0 -0
- package/SVF-linux/{include → svf/include}/CFL/VFG.txt +0 -0
- package/SVF-linux/{include → svf/include}/CUDD/cudd.h +0 -0
- package/SVF-linux/{include → svf/include}/CUDD/cuddInt.h +0 -0
- package/SVF-linux/{include → svf/include}/CUDD/epd.h +0 -0
- package/SVF-linux/{include → svf/include}/CUDD/mtr.h +0 -0
- package/SVF-linux/{include → svf/include}/CUDD/mtrInt.h +0 -0
- package/SVF-linux/{include → svf/include}/CUDD/st.h +0 -0
- package/SVF-linux/{include → svf/include}/CUDD/util.h +0 -0
- package/SVF-linux/{include → svf/include}/DDA/ContextDDA.h +0 -0
- package/SVF-linux/{include → svf/include}/DDA/DDAClient.h +0 -0
- package/SVF-linux/{include → svf/include}/DDA/DDAPass.h +0 -0
- package/SVF-linux/{include → svf/include}/DDA/DDAStat.h +0 -0
- package/SVF-linux/{include → svf/include}/DDA/DDAVFSolver.h +0 -0
- package/SVF-linux/{include → svf/include}/DDA/FlowDDA.h +0 -0
- package/SVF-linux/{include → svf/include}/FastCluster/LICENSE.TXT +0 -0
- package/SVF-linux/{include → svf/include}/FastCluster/fastcluster.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/CFLGraph.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/CHG.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/ConsG.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/ConsGEdge.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/ConsGNode.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/DOTGraphTraits.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/ExternalPAG.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/GenericGraph.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/GraphPrinter.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/GraphTraits.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/GraphWriter.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/ICFG.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/ICFGEdge.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/ICFGNode.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/ICFGStat.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/IRGraph.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/OfflineConsG.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/PAG.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/PAGEdge.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/PAGNode.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/PTACallGraph.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/SVFG.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/SVFGEdge.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/SVFGNode.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/SVFGOPT.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/SVFGStat.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/ThreadCallGraph.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/VFG.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/VFGEdge.h +0 -0
- package/SVF-linux/{include → svf/include}/Graphs/VFGNode.h +0 -0
- package/SVF-linux/{include → svf/include}/MSSA/MSSAMuChi.h +0 -0
- package/SVF-linux/{include → svf/include}/MSSA/MemPartition.h +0 -0
- package/SVF-linux/{include → svf/include}/MSSA/MemRegion.h +0 -0
- package/SVF-linux/{include → svf/include}/MSSA/MemSSA.h +0 -0
- package/SVF-linux/{include → svf/include}/MSSA/SVFGBuilder.h +0 -0
- package/SVF-linux/{include → svf/include}/MTA/FSMPTA.h +0 -0
- package/SVF-linux/{include → svf/include}/MTA/LockAnalysis.h +0 -0
- package/SVF-linux/{include → svf/include}/MTA/LockResultValidator.h +0 -0
- package/SVF-linux/{include → svf/include}/MTA/MHP.h +0 -0
- package/SVF-linux/{include → svf/include}/MTA/MTA.h +0 -0
- package/SVF-linux/{include → svf/include}/MTA/MTAAnnotator.h +0 -0
- package/SVF-linux/{include → svf/include}/MTA/MTAResultValidator.h +0 -0
- package/SVF-linux/{include → svf/include}/MTA/MTAStat.h +0 -0
- package/SVF-linux/{include → svf/include}/MTA/PCG.h +0 -0
- package/SVF-linux/{include → svf/include}/MTA/TCT.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/AbstractPointsToDS.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/ConditionalPT.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/LocationSet.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/MemModel.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/MutablePointsToDS.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/PAGBuilderFromFile.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/PTAStat.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/PTAType.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/PersistentPointsToCache.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/PersistentPointsToDS.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/PointerAnalysis.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/PointerAnalysisImpl.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/PointsTo.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/PointsToDFDS.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/PointsToDS.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/SVFIR.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/SVFLoop.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/SVFStatements.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/SVFSymbols.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/SVFVariables.h +0 -0
- package/SVF-linux/{include → svf/include}/MemoryModel/SymbolTableInfo.h +0 -0
- package/SVF-linux/{include → svf/include}/SABER/DoubleFreeChecker.h +0 -0
- package/SVF-linux/{include → svf/include}/SABER/FileChecker.h +0 -0
- package/SVF-linux/{include → svf/include}/SABER/LeakChecker.h +0 -0
- package/SVF-linux/{include → svf/include}/SABER/PathCondAllocator.h +0 -0
- package/SVF-linux/{include → svf/include}/SABER/ProgSlice.h +0 -0
- package/SVF-linux/{include → svf/include}/SABER/SaberAnnotator.h +0 -0
- package/SVF-linux/{include → svf/include}/SABER/SaberCheckerAPI.h +0 -0
- package/SVF-linux/{include → svf/include}/SABER/SaberCondAllocator.h +0 -0
- package/SVF-linux/{include → svf/include}/SABER/SaberSVFGBuilder.h +0 -0
- package/SVF-linux/{include → svf/include}/SABER/SrcSnkDDA.h +0 -0
- package/SVF-linux/{include → svf/include}/SABER/SrcSnkSolver.h +0 -0
- package/SVF-linux/{include → svf/include}/SVFIR/PAGBuilderFromFile.h +0 -0
- package/SVF-linux/{include → svf/include}/SVFIR/SVFIR.h +0 -0
- package/SVF-linux/{include → svf/include}/SVFIR/SVFModule.h +0 -0
- package/SVF-linux/{include → svf/include}/SVFIR/SVFStatements.h +0 -0
- package/SVF-linux/{include → svf/include}/SVFIR/SVFType.h +0 -0
- package/SVF-linux/{include → svf/include}/SVFIR/SVFValue.h +0 -0
- package/SVF-linux/{include → svf/include}/SVFIR/SVFVariables.h +0 -0
- package/SVF-linux/{include → svf/include}/SVFIR/SymbolTableInfo.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/Annotator.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/BDDExpr.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/BasicTypes.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/BitVector.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/CFLSolver.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/CallGraphBuilder.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/Casting.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/CommandLine.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/Conditions.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/CoreBitVector.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/CppUtil.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/CxtStmt.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/DPItem.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/ExeState.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/ExtAPI.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/ExtAPI.json +0 -0
- package/SVF-linux/{include → svf/include}/Util/GraphReachSolver.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/IRAnnotator.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/NodeIDAllocator.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/Options.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/PTAStat.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/PathCondAllocator.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/PathDPItem.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/SCC.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/SVFBasicTypes.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/SVFInstruction.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/SVFModule.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/SVFStat.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/SVFUtil.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/SparseBitVector.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/SymState.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/ThreadAPI.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/TypeBasedHeapCloning.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/WorkList.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/Z3Expr.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/cJSON.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/config.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/iterator.h +0 -0
- package/SVF-linux/{include → svf/include}/Util/iterator_range.h +0 -0
- package/SVF-linux/{include → svf/include}/WPA/Andersen.h +0 -0
- package/SVF-linux/{include → svf/include}/WPA/AndersenPWC.h +0 -0
- package/SVF-linux/{include → svf/include}/WPA/AndersenSFR.h +0 -0
- package/SVF-linux/{include → svf/include}/WPA/CSC.h +0 -0
- package/SVF-linux/{include → svf/include}/WPA/FlowSensitive.h +0 -0
- package/SVF-linux/{include → svf/include}/WPA/FlowSensitiveTBHC.h +0 -0
- package/SVF-linux/{include → svf/include}/WPA/Steensgaard.h +0 -0
- package/SVF-linux/{include → svf/include}/WPA/TypeAnalysis.h +0 -0
- package/SVF-linux/{include → svf/include}/WPA/TypeBasedHeapCloning.h +0 -0
- package/SVF-linux/{include → svf/include}/WPA/VersionedFlowSensitive.h +0 -0
- package/SVF-linux/{include → svf/include}/WPA/WPAFSSolver.h +0 -0
- package/SVF-linux/{include → svf/include}/WPA/WPAPass.h +0 -0
- package/SVF-linux/{include → svf/include}/WPA/WPASolver.h +0 -0
- package/SVF-linux/{include → svf/include}/WPA/WPAStat.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/AbstractExecution/AbstractValue.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/AbstractExecution/AddressValue.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/AbstractExecution/ExeState.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/AbstractExecution/IntervalExeState.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/AbstractExecution/IntervalValue.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/AbstractExecution/NumericLiteral.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/AbstractExecution/RelExeState.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/AbstractExecution/RelationSolver.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/AbstractExecution/SVFIR2ItvExeState.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/AbstractExecution/WTO.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/CFL/CFGNormalizer.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/CFL/CFLAlias.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/CFL/CFLBase.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/CFL/CFLData.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/CFL/CFLDataBuilder.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/CFL/CFLGramGraphChecker.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/CFL/CFLGrammar.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/CFL/CFLGrammar.txt +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/CFL/CFLGraphBuilder.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/CFL/CFLSolver.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/CFL/CFLStat.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/CFL/CFLVF.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/CFL/GrammarBuilder.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/CFL/PEGGrammar.txt +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/CFL/VFG.txt +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/DDA/ContextDDA.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/DDA/DDAClient.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/DDA/DDAPass.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/DDA/DDAStat.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/DDA/DDAVFSolver.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/DDA/FlowDDA.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/FastCluster/LICENSE.TXT +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/FastCluster/fastcluster.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/CFLGraph.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/CHG.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/ConsG.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/ConsGEdge.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/ConsGNode.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/DOTGraphTraits.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/GenericGraph.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/GraphPrinter.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/GraphTraits.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/GraphWriter.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/ICFG.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/ICFGEdge.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/ICFGNode.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/ICFGStat.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/IRGraph.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/PTACallGraph.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/SVFG.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/SVFGEdge.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/SVFGNode.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/SVFGOPT.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/SVFGStat.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/ThreadCallGraph.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/VFG.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/VFGEdge.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Graphs/VFGNode.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MSSA/MSSAMuChi.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MSSA/MemPartition.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MSSA/MemRegion.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MSSA/MemSSA.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MSSA/SVFGBuilder.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MTA/FSMPTA.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MTA/LockAnalysis.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MTA/MHP.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MTA/MTA.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MTA/MTAResultValidator.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MTA/MTAStat.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MTA/PCG.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MTA/TCT.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MemoryModel/AbstractPointsToDS.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MemoryModel/ConditionalPT.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MemoryModel/LocationSet.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MemoryModel/MutablePointsToDS.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MemoryModel/PersistentPointsToCache.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MemoryModel/PersistentPointsToDS.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MemoryModel/PointerAnalysis.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MemoryModel/PointerAnalysisImpl.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MemoryModel/PointsTo.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/MemoryModel/SVFLoop.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SABER/DoubleFreeChecker.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SABER/FileChecker.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SABER/LeakChecker.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SABER/ProgSlice.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SABER/SaberCheckerAPI.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SABER/SaberCondAllocator.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SABER/SaberSVFGBuilder.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SABER/SrcSnkDDA.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SABER/SrcSnkSolver.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SVFIR/PAGBuilderFromFile.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SVFIR/SVFIR.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SVFIR/SVFModule.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SVFIR/SVFStatements.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SVFIR/SVFType.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SVFIR/SVFValue.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SVFIR/SVFVariables.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/SVFIR/SymbolTableInfo.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/Annotator.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/BitVector.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/CallGraphBuilder.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/Casting.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/CommandLine.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/CoreBitVector.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/CppUtil.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/CxtStmt.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/DPItem.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/ExtAPI.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/ExtAPI.json +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/GraphReachSolver.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/NodeIDAllocator.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/Options.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/PTAStat.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/SCC.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/SVFStat.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/SVFUtil.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/SparseBitVector.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/ThreadAPI.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/WorkList.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/Z3Expr.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/cJSON.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/iterator.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/Util/iterator_range.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/WPA/Andersen.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/WPA/AndersenPWC.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/WPA/CSC.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/WPA/FlowSensitive.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/WPA/Steensgaard.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/WPA/TypeAnalysis.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/WPA/VersionedFlowSensitive.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/WPA/WPAFSSolver.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/WPA/WPAPass.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/WPA/WPASolver.h +0 -0
- package/{SVF-osx → SVF-linux/svf/include}/include/WPA/WPAStat.h +0 -0
- package/SVF-linux/{include → svf-llvm/include}/SVF-LLVM/BasicTypes.h +0 -0
- package/SVF-linux/{include → svf-llvm/include}/SVF-LLVM/BreakConstantExpr.h +0 -0
- package/SVF-linux/{include → svf-llvm/include}/SVF-LLVM/CHGBuilder.h +0 -0
- package/SVF-linux/{include → svf-llvm/include}/SVF-LLVM/CPPUtil.h +0 -0
- package/SVF-linux/{include → svf-llvm/include}/SVF-LLVM/DCHG.h +0 -0
- package/SVF-linux/{include → svf-llvm/include}/SVF-LLVM/GEPTypeBridgeIterator.h +0 -0
- package/SVF-linux/{include → svf-llvm/include}/SVF-LLVM/ICFGBuilder.h +0 -0
- package/SVF-linux/{include → svf-llvm/include}/SVF-LLVM/IRAnnotator.h +0 -0
- package/SVF-linux/{include → svf-llvm/include}/SVF-LLVM/LLVMLoopAnalysis.h +0 -0
- package/SVF-linux/{include → svf-llvm/include}/SVF-LLVM/LLVMModule.h +0 -0
- package/SVF-linux/{include → svf-llvm/include}/SVF-LLVM/LLVMUtil.h +0 -0
- package/{SVF-osx/include → SVF-linux/svf-llvm/include/SVF-LLVM}/SVF-LLVM/BasicTypes.h +0 -0
- package/{SVF-osx/include → SVF-linux/svf-llvm/include/SVF-LLVM}/SVF-LLVM/BreakConstantExpr.h +0 -0
- package/{SVF-osx/include → SVF-linux/svf-llvm/include/SVF-LLVM}/SVF-LLVM/CHGBuilder.h +0 -0
- package/{SVF-osx/include → SVF-linux/svf-llvm/include/SVF-LLVM}/SVF-LLVM/DCHG.h +0 -0
- package/{SVF-osx/include → SVF-linux/svf-llvm/include/SVF-LLVM}/SVF-LLVM/GEPTypeBridgeIterator.h +0 -0
- package/{SVF-osx/include → SVF-linux/svf-llvm/include/SVF-LLVM}/SVF-LLVM/ICFGBuilder.h +0 -0
- package/{SVF-osx/include → SVF-linux/svf-llvm/include/SVF-LLVM}/SVF-LLVM/LLVMLoopAnalysis.h +0 -0
- package/{SVF-osx/include → SVF-linux/svf-llvm/include/SVF-LLVM}/SVF-LLVM/LLVMModule.h +0 -0
- package/{SVF-osx/include → SVF-linux/svf-llvm/include/SVF-LLVM}/SVF-LLVM/LLVMUtil.h +0 -0
- package/SVF-linux/{include → svf-llvm/include/SVF-LLVM}/SVF-LLVM/SVFIRBuilder.h +0 -0
- package/SVF-linux/{include → svf-llvm/include/SVF-LLVM}/SVF-LLVM/SymbolTableBuilder.h +0 -0
- package/{SVF-osx → SVF-linux/svf-llvm}/include/SVF-LLVM/SVFIRBuilder.h +0 -0
- package/{SVF-osx → SVF-linux/svf-llvm}/include/SVF-LLVM/SymbolTableBuilder.h +0 -0
- package/SVF-osx/Release-build/{lib/libSvf.a → svf-llvm/libSvfLLVM.a} +0 -0
- package/SVF-osx/svf/include/AbstractExecution/AbstractValue.h +79 -0
- package/SVF-osx/svf/include/AbstractExecution/AddressValue.h +210 -0
- package/SVF-osx/svf/include/AbstractExecution/ExeState.h +223 -0
- package/SVF-osx/svf/include/AbstractExecution/IntervalExeState.h +425 -0
- package/SVF-osx/svf/include/AbstractExecution/IntervalValue.h +868 -0
- package/SVF-osx/svf/include/AbstractExecution/NumericLiteral.h +406 -0
- package/SVF-osx/svf/include/AbstractExecution/RelExeState.h +225 -0
- package/SVF-osx/svf/include/AbstractExecution/RelationSolver.h +68 -0
- package/SVF-osx/svf/include/AbstractExecution/SVFIR2ItvExeState.h +186 -0
- package/SVF-osx/svf/include/AbstractExecution/WTO.h +845 -0
- package/SVF-osx/svf/include/CFL/CFGNormalizer.h +84 -0
- package/SVF-osx/svf/include/CFL/CFLAlias.h +176 -0
- package/SVF-osx/svf/include/CFL/CFLBase.h +115 -0
- package/SVF-osx/svf/include/CFL/CFLData.h +316 -0
- package/SVF-osx/svf/include/CFL/CFLDataBuilder.h +91 -0
- package/SVF-osx/svf/include/CFL/CFLGramGraphChecker.h +74 -0
- package/SVF-osx/svf/include/CFL/CFLGrammar.h +468 -0
- package/SVF-osx/svf/include/CFL/CFLGrammar.txt +15 -0
- package/SVF-osx/{include → svf/include}/CFL/CFLGrammarDev.txt +0 -0
- package/SVF-osx/svf/include/CFL/CFLGraphBuilder.h +193 -0
- package/SVF-osx/svf/include/CFL/CFLSolver.h +136 -0
- package/SVF-osx/svf/include/CFL/CFLStat.h +67 -0
- package/SVF-osx/svf/include/CFL/CFLVF.h +65 -0
- package/SVF-osx/svf/include/CFL/GrammarBuilder.h +100 -0
- package/SVF-osx/svf/include/CFL/PEGGrammar.txt +11 -0
- package/SVF-osx/svf/include/CFL/VFG.txt +7 -0
- package/SVF-osx/{include → svf/include}/CUDD/cudd.h +0 -0
- package/SVF-osx/{include → svf/include}/CUDD/cuddInt.h +0 -0
- package/SVF-osx/{include → svf/include}/CUDD/epd.h +0 -0
- package/SVF-osx/{include → svf/include}/CUDD/mtr.h +0 -0
- package/SVF-osx/{include → svf/include}/CUDD/mtrInt.h +0 -0
- package/SVF-osx/{include → svf/include}/CUDD/st.h +0 -0
- package/SVF-osx/{include → svf/include}/CUDD/util.h +0 -0
- package/SVF-osx/svf/include/DDA/ContextDDA.h +230 -0
- package/SVF-osx/svf/include/DDA/DDAClient.h +168 -0
- package/SVF-osx/svf/include/DDA/DDAPass.h +99 -0
- package/SVF-osx/svf/include/DDA/DDAStat.h +138 -0
- package/SVF-osx/svf/include/DDA/DDAVFSolver.h +789 -0
- package/SVF-osx/svf/include/DDA/FlowDDA.h +178 -0
- package/SVF-osx/svf/include/FastCluster/LICENSE.TXT +13 -0
- package/SVF-osx/svf/include/FastCluster/fastcluster.h +80 -0
- package/SVF-osx/svf/include/Graphs/CFLGraph.h +215 -0
- package/SVF-osx/svf/include/Graphs/CHG.h +351 -0
- package/SVF-osx/svf/include/Graphs/ConsG.h +408 -0
- package/SVF-osx/svf/include/Graphs/ConsGEdge.h +353 -0
- package/SVF-osx/svf/include/Graphs/ConsGNode.h +391 -0
- package/SVF-osx/svf/include/Graphs/DOTGraphTraits.h +188 -0
- package/SVF-osx/{include → svf/include}/Graphs/ExternalPAG.h +0 -0
- package/SVF-osx/svf/include/Graphs/GenericGraph.h +620 -0
- package/SVF-osx/svf/include/Graphs/GraphPrinter.h +111 -0
- package/SVF-osx/svf/include/Graphs/GraphTraits.h +150 -0
- package/SVF-osx/svf/include/Graphs/GraphWriter.h +380 -0
- package/SVF-osx/svf/include/Graphs/ICFG.h +331 -0
- package/SVF-osx/svf/include/Graphs/ICFGEdge.h +264 -0
- package/SVF-osx/svf/include/Graphs/ICFGNode.h +523 -0
- package/SVF-osx/svf/include/Graphs/ICFGStat.h +164 -0
- package/SVF-osx/svf/include/Graphs/IRGraph.h +243 -0
- package/SVF-osx/{include → svf/include}/Graphs/OfflineConsG.h +0 -0
- package/SVF-osx/{include → svf/include}/Graphs/PAG.h +0 -0
- package/SVF-osx/{include → svf/include}/Graphs/PAGEdge.h +0 -0
- package/SVF-osx/{include → svf/include}/Graphs/PAGNode.h +0 -0
- package/SVF-osx/svf/include/Graphs/PTACallGraph.h +471 -0
- package/SVF-osx/svf/include/Graphs/SVFG.h +490 -0
- package/SVF-osx/svf/include/Graphs/SVFGEdge.h +237 -0
- package/SVF-osx/svf/include/Graphs/SVFGNode.h +513 -0
- package/SVF-osx/svf/include/Graphs/SVFGOPT.h +362 -0
- package/SVF-osx/svf/include/Graphs/SVFGStat.h +273 -0
- package/SVF-osx/svf/include/Graphs/ThreadCallGraph.h +422 -0
- package/SVF-osx/svf/include/Graphs/VFG.h +664 -0
- package/SVF-osx/svf/include/Graphs/VFGEdge.h +295 -0
- package/SVF-osx/svf/include/Graphs/VFGNode.h +1197 -0
- package/SVF-osx/svf/include/MSSA/MSSAMuChi.h +722 -0
- package/SVF-osx/svf/include/MSSA/MemPartition.h +169 -0
- package/SVF-osx/svf/include/MSSA/MemRegion.h +491 -0
- package/SVF-osx/svf/include/MSSA/MemSSA.h +452 -0
- package/SVF-osx/svf/include/MSSA/SVFGBuilder.h +98 -0
- package/SVF-osx/svf/include/MTA/FSMPTA.h +270 -0
- package/SVF-osx/svf/include/MTA/LockAnalysis.h +517 -0
- package/SVF-osx/{include → svf/include}/MTA/LockResultValidator.h +0 -0
- package/SVF-osx/svf/include/MTA/MHP.h +565 -0
- package/SVF-osx/svf/include/MTA/MTA.h +101 -0
- package/SVF-osx/{include → svf/include}/MTA/MTAAnnotator.h +0 -0
- package/SVF-osx/svf/include/MTA/MTAResultValidator.h +448 -0
- package/SVF-osx/svf/include/MTA/MTAStat.h +74 -0
- package/SVF-osx/svf/include/MTA/PCG.h +229 -0
- package/SVF-osx/svf/include/MTA/TCT.h +599 -0
- package/SVF-osx/svf/include/MemoryModel/AbstractPointsToDS.h +316 -0
- package/SVF-osx/svf/include/MemoryModel/ConditionalPT.h +878 -0
- package/SVF-osx/svf/include/MemoryModel/LocationSet.h +148 -0
- package/SVF-osx/{include → svf/include}/MemoryModel/MemModel.h +0 -0
- package/SVF-osx/svf/include/MemoryModel/MutablePointsToDS.h +1025 -0
- package/SVF-osx/{include → svf/include}/MemoryModel/PAGBuilderFromFile.h +0 -0
- package/SVF-osx/{include → svf/include}/MemoryModel/PTAStat.h +0 -0
- package/SVF-osx/{include → svf/include}/MemoryModel/PTAType.h +0 -0
- package/SVF-osx/svf/include/MemoryModel/PersistentPointsToCache.h +463 -0
- package/SVF-osx/svf/include/MemoryModel/PersistentPointsToDS.h +955 -0
- package/SVF-osx/svf/include/MemoryModel/PointerAnalysis.h +452 -0
- package/SVF-osx/svf/include/MemoryModel/PointerAnalysisImpl.h +590 -0
- package/SVF-osx/svf/include/MemoryModel/PointsTo.h +255 -0
- package/SVF-osx/{include → svf/include}/MemoryModel/PointsToDFDS.h +0 -0
- package/SVF-osx/{include → svf/include}/MemoryModel/PointsToDS.h +0 -0
- package/SVF-osx/{include → svf/include}/MemoryModel/SVFIR.h +0 -0
- package/SVF-osx/svf/include/MemoryModel/SVFLoop.h +164 -0
- package/SVF-osx/{include → svf/include}/MemoryModel/SVFStatements.h +0 -0
- package/SVF-osx/{include → svf/include}/MemoryModel/SVFSymbols.h +0 -0
- package/SVF-osx/{include → svf/include}/MemoryModel/SVFVariables.h +0 -0
- package/SVF-osx/{include → svf/include}/MemoryModel/SymbolTableInfo.h +0 -0
- package/SVF-osx/svf/include/SABER/DoubleFreeChecker.h +76 -0
- package/SVF-osx/svf/include/SABER/FileChecker.h +82 -0
- package/SVF-osx/svf/include/SABER/LeakChecker.h +124 -0
- package/SVF-osx/{include → svf/include}/SABER/PathCondAllocator.h +0 -0
- package/SVF-osx/svf/include/SABER/ProgSlice.h +313 -0
- package/SVF-osx/{include → svf/include}/SABER/SaberAnnotator.h +0 -0
- package/SVF-osx/svf/include/SABER/SaberCheckerAPI.h +166 -0
- package/SVF-osx/svf/include/SABER/SaberCondAllocator.h +310 -0
- package/SVF-osx/svf/include/SABER/SaberSVFGBuilder.h +104 -0
- package/SVF-osx/svf/include/SABER/SrcSnkDDA.h +321 -0
- package/SVF-osx/svf/include/SABER/SrcSnkSolver.h +186 -0
- package/SVF-osx/svf/include/SVFIR/PAGBuilderFromFile.h +80 -0
- package/SVF-osx/svf/include/SVFIR/SVFIR.h +659 -0
- package/SVF-osx/svf/include/SVFIR/SVFModule.h +233 -0
- package/SVF-osx/svf/include/SVFIR/SVFStatements.h +1136 -0
- package/SVF-osx/svf/include/SVFIR/SVFType.h +527 -0
- package/SVF-osx/svf/include/SVFIR/SVFValue.h +1120 -0
- package/SVF-osx/svf/include/SVFIR/SVFVariables.h +721 -0
- package/SVF-osx/svf/include/SVFIR/SymbolTableInfo.h +597 -0
- package/SVF-osx/svf/include/Util/Annotator.h +180 -0
- package/SVF-osx/{include → svf/include}/Util/BDDExpr.h +0 -0
- package/SVF-osx/{include → svf/include}/Util/BasicTypes.h +0 -0
- package/SVF-osx/svf/include/Util/BitVector.h +55 -0
- package/SVF-osx/{include → svf/include}/Util/CFLSolver.h +0 -0
- package/SVF-osx/svf/include/Util/CallGraphBuilder.h +74 -0
- package/SVF-osx/svf/include/Util/Casting.h +426 -0
- package/SVF-osx/svf/include/Util/CommandLine.h +530 -0
- package/SVF-osx/{include → svf/include}/Util/Conditions.h +0 -0
- package/SVF-osx/svf/include/Util/CoreBitVector.h +214 -0
- package/SVF-osx/svf/include/Util/CppUtil.h +81 -0
- package/SVF-osx/svf/include/Util/CxtStmt.h +501 -0
- package/SVF-osx/svf/include/Util/DPItem.h +618 -0
- package/SVF-osx/{include → svf/include}/Util/ExeState.h +0 -0
- package/SVF-osx/svf/include/Util/ExtAPI.h +339 -0
- package/SVF-osx/svf/include/Util/ExtAPI.json +5707 -0
- package/SVF-osx/svf/include/Util/GraphReachSolver.h +186 -0
- package/SVF-osx/{include → svf/include}/Util/IRAnnotator.h +0 -0
- package/SVF-osx/svf/include/Util/NodeIDAllocator.h +194 -0
- package/SVF-osx/svf/include/Util/Options.h +266 -0
- package/SVF-osx/svf/include/Util/PTAStat.h +65 -0
- package/SVF-osx/{include → svf/include}/Util/PathCondAllocator.h +0 -0
- package/SVF-osx/{include → svf/include}/Util/PathDPItem.h +0 -0
- package/SVF-osx/svf/include/Util/SCC.h +354 -0
- package/SVF-osx/{include → svf/include}/Util/SVFBasicTypes.h +0 -0
- package/SVF-osx/{include → svf/include}/Util/SVFInstruction.h +0 -0
- package/SVF-osx/{include → svf/include}/Util/SVFModule.h +0 -0
- package/SVF-osx/svf/include/Util/SVFStat.h +100 -0
- package/SVF-osx/svf/include/Util/SVFUtil.h +660 -0
- package/SVF-osx/svf/include/Util/SparseBitVector.h +1202 -0
- package/SVF-osx/{include → svf/include}/Util/SymState.h +0 -0
- package/SVF-osx/svf/include/Util/ThreadAPI.h +330 -0
- package/SVF-osx/{include → svf/include}/Util/TypeBasedHeapCloning.h +0 -0
- package/SVF-osx/svf/include/Util/WorkList.h +317 -0
- package/SVF-osx/svf/include/Util/Z3Expr.h +318 -0
- package/SVF-osx/svf/include/Util/cJSON.h +300 -0
- package/SVF-osx/{include → svf/include}/Util/config.h +0 -0
- package/SVF-osx/svf/include/Util/iterator.h +407 -0
- package/SVF-osx/svf/include/Util/iterator_range.h +76 -0
- package/SVF-osx/svf/include/WPA/Andersen.h +416 -0
- package/SVF-osx/svf/include/WPA/AndersenPWC.h +160 -0
- package/SVF-osx/{include → svf/include}/WPA/AndersenSFR.h +0 -0
- package/SVF-osx/svf/include/WPA/CSC.h +95 -0
- package/SVF-osx/svf/include/WPA/FlowSensitive.h +317 -0
- package/SVF-osx/{include → svf/include}/WPA/FlowSensitiveTBHC.h +0 -0
- package/SVF-osx/svf/include/WPA/Steensgaard.h +126 -0
- package/SVF-osx/svf/include/WPA/TypeAnalysis.h +83 -0
- package/SVF-osx/{include → svf/include}/WPA/TypeBasedHeapCloning.h +0 -0
- package/SVF-osx/svf/include/WPA/VersionedFlowSensitive.h +287 -0
- package/SVF-osx/svf/include/WPA/WPAFSSolver.h +254 -0
- package/SVF-osx/svf/include/WPA/WPAPass.h +119 -0
- package/SVF-osx/svf/include/WPA/WPASolver.h +205 -0
- package/SVF-osx/svf/include/WPA/WPAStat.h +222 -0
- package/SVF-osx/svf/include/include/AbstractExecution/AbstractValue.h +79 -0
- package/SVF-osx/svf/include/include/AbstractExecution/AddressValue.h +210 -0
- package/SVF-osx/svf/include/include/AbstractExecution/ExeState.h +223 -0
- package/SVF-osx/svf/include/include/AbstractExecution/IntervalExeState.h +425 -0
- package/SVF-osx/svf/include/include/AbstractExecution/IntervalValue.h +868 -0
- package/SVF-osx/svf/include/include/AbstractExecution/NumericLiteral.h +406 -0
- package/SVF-osx/svf/include/include/AbstractExecution/RelExeState.h +225 -0
- package/SVF-osx/svf/include/include/AbstractExecution/RelationSolver.h +68 -0
- package/SVF-osx/svf/include/include/AbstractExecution/SVFIR2ItvExeState.h +186 -0
- package/SVF-osx/svf/include/include/AbstractExecution/WTO.h +845 -0
- package/SVF-osx/svf/include/include/CFL/CFGNormalizer.h +84 -0
- package/SVF-osx/svf/include/include/CFL/CFLAlias.h +176 -0
- package/SVF-osx/svf/include/include/CFL/CFLBase.h +115 -0
- package/SVF-osx/svf/include/include/CFL/CFLData.h +316 -0
- package/SVF-osx/svf/include/include/CFL/CFLDataBuilder.h +91 -0
- package/SVF-osx/svf/include/include/CFL/CFLGramGraphChecker.h +74 -0
- package/SVF-osx/svf/include/include/CFL/CFLGrammar.h +468 -0
- package/SVF-osx/svf/include/include/CFL/CFLGrammar.txt +15 -0
- package/SVF-osx/svf/include/include/CFL/CFLGraphBuilder.h +193 -0
- package/SVF-osx/svf/include/include/CFL/CFLSolver.h +136 -0
- package/SVF-osx/svf/include/include/CFL/CFLStat.h +67 -0
- package/SVF-osx/svf/include/include/CFL/CFLVF.h +65 -0
- package/SVF-osx/svf/include/include/CFL/GrammarBuilder.h +100 -0
- package/SVF-osx/svf/include/include/CFL/PEGGrammar.txt +11 -0
- package/SVF-osx/svf/include/include/CFL/VFG.txt +7 -0
- package/SVF-osx/svf/include/include/DDA/ContextDDA.h +230 -0
- package/SVF-osx/svf/include/include/DDA/DDAClient.h +168 -0
- package/SVF-osx/svf/include/include/DDA/DDAPass.h +99 -0
- package/SVF-osx/svf/include/include/DDA/DDAStat.h +138 -0
- package/SVF-osx/svf/include/include/DDA/DDAVFSolver.h +789 -0
- package/SVF-osx/svf/include/include/DDA/FlowDDA.h +178 -0
- package/SVF-osx/svf/include/include/FastCluster/LICENSE.TXT +13 -0
- package/SVF-osx/svf/include/include/FastCluster/fastcluster.h +80 -0
- package/SVF-osx/svf/include/include/Graphs/CFLGraph.h +215 -0
- package/SVF-osx/svf/include/include/Graphs/CHG.h +351 -0
- package/SVF-osx/svf/include/include/Graphs/ConsG.h +408 -0
- package/SVF-osx/svf/include/include/Graphs/ConsGEdge.h +353 -0
- package/SVF-osx/svf/include/include/Graphs/ConsGNode.h +391 -0
- package/SVF-osx/svf/include/include/Graphs/DOTGraphTraits.h +188 -0
- package/SVF-osx/svf/include/include/Graphs/GenericGraph.h +620 -0
- package/SVF-osx/svf/include/include/Graphs/GraphPrinter.h +111 -0
- package/SVF-osx/svf/include/include/Graphs/GraphTraits.h +150 -0
- package/SVF-osx/svf/include/include/Graphs/GraphWriter.h +380 -0
- package/SVF-osx/svf/include/include/Graphs/ICFG.h +331 -0
- package/SVF-osx/svf/include/include/Graphs/ICFGEdge.h +264 -0
- package/SVF-osx/svf/include/include/Graphs/ICFGNode.h +523 -0
- package/SVF-osx/svf/include/include/Graphs/ICFGStat.h +164 -0
- package/SVF-osx/svf/include/include/Graphs/IRGraph.h +243 -0
- package/SVF-osx/svf/include/include/Graphs/PTACallGraph.h +471 -0
- package/SVF-osx/svf/include/include/Graphs/SVFG.h +490 -0
- package/SVF-osx/svf/include/include/Graphs/SVFGEdge.h +237 -0
- package/SVF-osx/svf/include/include/Graphs/SVFGNode.h +513 -0
- package/SVF-osx/svf/include/include/Graphs/SVFGOPT.h +362 -0
- package/SVF-osx/svf/include/include/Graphs/SVFGStat.h +273 -0
- package/SVF-osx/svf/include/include/Graphs/ThreadCallGraph.h +422 -0
- package/SVF-osx/svf/include/include/Graphs/VFG.h +664 -0
- package/SVF-osx/svf/include/include/Graphs/VFGEdge.h +295 -0
- package/SVF-osx/svf/include/include/Graphs/VFGNode.h +1197 -0
- package/SVF-osx/svf/include/include/MSSA/MSSAMuChi.h +722 -0
- package/SVF-osx/svf/include/include/MSSA/MemPartition.h +169 -0
- package/SVF-osx/svf/include/include/MSSA/MemRegion.h +491 -0
- package/SVF-osx/svf/include/include/MSSA/MemSSA.h +452 -0
- package/SVF-osx/svf/include/include/MSSA/SVFGBuilder.h +98 -0
- package/SVF-osx/svf/include/include/MTA/FSMPTA.h +270 -0
- package/SVF-osx/svf/include/include/MTA/LockAnalysis.h +517 -0
- package/SVF-osx/svf/include/include/MTA/MHP.h +565 -0
- package/SVF-osx/svf/include/include/MTA/MTA.h +101 -0
- package/SVF-osx/svf/include/include/MTA/MTAResultValidator.h +448 -0
- package/SVF-osx/svf/include/include/MTA/MTAStat.h +74 -0
- package/SVF-osx/svf/include/include/MTA/PCG.h +229 -0
- package/SVF-osx/svf/include/include/MTA/TCT.h +599 -0
- package/SVF-osx/svf/include/include/MemoryModel/AbstractPointsToDS.h +316 -0
- package/SVF-osx/svf/include/include/MemoryModel/ConditionalPT.h +878 -0
- package/SVF-osx/svf/include/include/MemoryModel/LocationSet.h +148 -0
- package/SVF-osx/svf/include/include/MemoryModel/MutablePointsToDS.h +1025 -0
- package/SVF-osx/svf/include/include/MemoryModel/PersistentPointsToCache.h +463 -0
- package/SVF-osx/svf/include/include/MemoryModel/PersistentPointsToDS.h +955 -0
- package/SVF-osx/svf/include/include/MemoryModel/PointerAnalysis.h +452 -0
- package/SVF-osx/svf/include/include/MemoryModel/PointerAnalysisImpl.h +590 -0
- package/SVF-osx/svf/include/include/MemoryModel/PointsTo.h +255 -0
- package/SVF-osx/svf/include/include/MemoryModel/SVFLoop.h +164 -0
- package/SVF-osx/svf/include/include/SABER/DoubleFreeChecker.h +76 -0
- package/SVF-osx/svf/include/include/SABER/FileChecker.h +82 -0
- package/SVF-osx/svf/include/include/SABER/LeakChecker.h +124 -0
- package/SVF-osx/svf/include/include/SABER/ProgSlice.h +313 -0
- package/SVF-osx/svf/include/include/SABER/SaberCheckerAPI.h +166 -0
- package/SVF-osx/svf/include/include/SABER/SaberCondAllocator.h +310 -0
- package/SVF-osx/svf/include/include/SABER/SaberSVFGBuilder.h +104 -0
- package/SVF-osx/svf/include/include/SABER/SrcSnkDDA.h +321 -0
- package/SVF-osx/svf/include/include/SABER/SrcSnkSolver.h +186 -0
- package/SVF-osx/svf/include/include/SVFIR/PAGBuilderFromFile.h +80 -0
- package/SVF-osx/svf/include/include/SVFIR/SVFIR.h +659 -0
- package/SVF-osx/svf/include/include/SVFIR/SVFModule.h +233 -0
- package/SVF-osx/svf/include/include/SVFIR/SVFStatements.h +1136 -0
- package/SVF-osx/svf/include/include/SVFIR/SVFType.h +527 -0
- package/SVF-osx/svf/include/include/SVFIR/SVFValue.h +1120 -0
- package/SVF-osx/svf/include/include/SVFIR/SVFVariables.h +721 -0
- package/SVF-osx/svf/include/include/SVFIR/SymbolTableInfo.h +597 -0
- package/SVF-osx/svf/include/include/Util/Annotator.h +180 -0
- package/SVF-osx/svf/include/include/Util/BitVector.h +55 -0
- package/SVF-osx/svf/include/include/Util/CallGraphBuilder.h +74 -0
- package/SVF-osx/svf/include/include/Util/Casting.h +426 -0
- package/SVF-osx/svf/include/include/Util/CommandLine.h +530 -0
- package/SVF-osx/svf/include/include/Util/CoreBitVector.h +214 -0
- package/SVF-osx/svf/include/include/Util/CppUtil.h +81 -0
- package/SVF-osx/svf/include/include/Util/CxtStmt.h +501 -0
- package/SVF-osx/svf/include/include/Util/DPItem.h +618 -0
- package/SVF-osx/svf/include/include/Util/ExtAPI.h +339 -0
- package/SVF-osx/svf/include/include/Util/ExtAPI.json +5707 -0
- package/SVF-osx/svf/include/include/Util/GraphReachSolver.h +186 -0
- package/SVF-osx/svf/include/include/Util/NodeIDAllocator.h +194 -0
- package/SVF-osx/svf/include/include/Util/Options.h +266 -0
- package/SVF-osx/svf/include/include/Util/PTAStat.h +65 -0
- package/SVF-osx/svf/include/include/Util/SCC.h +354 -0
- package/SVF-osx/svf/include/include/Util/SVFStat.h +100 -0
- package/SVF-osx/svf/include/include/Util/SVFUtil.h +660 -0
- package/SVF-osx/svf/include/include/Util/SparseBitVector.h +1202 -0
- package/SVF-osx/svf/include/include/Util/ThreadAPI.h +330 -0
- package/SVF-osx/svf/include/include/Util/WorkList.h +317 -0
- package/SVF-osx/svf/include/include/Util/Z3Expr.h +318 -0
- package/SVF-osx/svf/include/include/Util/cJSON.h +300 -0
- package/SVF-osx/svf/include/include/Util/iterator.h +407 -0
- package/SVF-osx/svf/include/include/Util/iterator_range.h +76 -0
- package/SVF-osx/svf/include/include/WPA/Andersen.h +416 -0
- package/SVF-osx/svf/include/include/WPA/AndersenPWC.h +160 -0
- package/SVF-osx/svf/include/include/WPA/CSC.h +95 -0
- package/SVF-osx/svf/include/include/WPA/FlowSensitive.h +317 -0
- package/SVF-osx/svf/include/include/WPA/Steensgaard.h +126 -0
- package/SVF-osx/svf/include/include/WPA/TypeAnalysis.h +83 -0
- package/SVF-osx/svf/include/include/WPA/VersionedFlowSensitive.h +287 -0
- package/SVF-osx/svf/include/include/WPA/WPAFSSolver.h +254 -0
- package/SVF-osx/svf/include/include/WPA/WPAPass.h +119 -0
- package/SVF-osx/svf/include/include/WPA/WPASolver.h +205 -0
- package/SVF-osx/svf/include/include/WPA/WPAStat.h +222 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/BasicTypes.h +250 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/BreakConstantExpr.h +94 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/CHGBuilder.h +73 -0
- package/SVF-osx/{include → svf-llvm/include}/SVF-LLVM/CPPUtil.h +0 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/DCHG.h +484 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/GEPTypeBridgeIterator.h +183 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/ICFGBuilder.h +106 -0
- package/SVF-osx/{include → svf-llvm/include}/SVF-LLVM/IRAnnotator.h +0 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/LLVMLoopAnalysis.h +61 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/LLVMModule.h +360 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/LLVMUtil.h +466 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/BasicTypes.h +250 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/BreakConstantExpr.h +94 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/CHGBuilder.h +73 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/DCHG.h +484 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/GEPTypeBridgeIterator.h +183 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/ICFGBuilder.h +106 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/LLVMLoopAnalysis.h +61 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/LLVMModule.h +360 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/LLVMUtil.h +466 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/SVFIRBuilder.h +417 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVF-LLVM/SymbolTableBuilder.h +110 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SVFIRBuilder.h +417 -0
- package/SVF-osx/svf-llvm/include/SVF-LLVM/SymbolTableBuilder.h +110 -0
- package/package.json +1 -1
- package/SVF-linux/Release-build/lib/CUDD/libCudd.a +0 -0
- package/SVF-osx/Release-build/lib/CUDD/libCudd.a +0 -0
|
@@ -0,0 +1,845 @@
|
|
|
1
|
+
//===- WTO.h -- Weakest Topological Order Analysis-------------------------//
|
|
2
|
+
//
|
|
3
|
+
// SVF: Static Value-Flow Analysis
|
|
4
|
+
//
|
|
5
|
+
// Copyright (C) <2013-2022> <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 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 General Public License for more details.
|
|
17
|
+
|
|
18
|
+
// You should have received a copy of the GNU General Public License
|
|
19
|
+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
//
|
|
21
|
+
//===----------------------------------------------------------------------===//
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* WTO.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Jul 3, 2022
|
|
27
|
+
* Author: Xiao Cheng, Jiawei Wang
|
|
28
|
+
*
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
#ifndef WTO_H_
|
|
32
|
+
#define WTO_H_
|
|
33
|
+
|
|
34
|
+
#include <memory>
|
|
35
|
+
#include <sstream>
|
|
36
|
+
#include <unordered_map>
|
|
37
|
+
#include <utility>
|
|
38
|
+
#include <vector>
|
|
39
|
+
|
|
40
|
+
#include "SVFIR/SVFType.h"
|
|
41
|
+
#include "SVFIR/SVFValue.h"
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
namespace SVF
|
|
45
|
+
{
|
|
46
|
+
|
|
47
|
+
class Wto;
|
|
48
|
+
|
|
49
|
+
class WtoVertex;
|
|
50
|
+
|
|
51
|
+
class WtoCycle;
|
|
52
|
+
|
|
53
|
+
/// \brief Weak topological order visitor
|
|
54
|
+
class WtoComponentVisitor
|
|
55
|
+
{
|
|
56
|
+
public:
|
|
57
|
+
typedef WtoVertex WtoVertexT;
|
|
58
|
+
typedef WtoCycle WtoCycleT;
|
|
59
|
+
|
|
60
|
+
public:
|
|
61
|
+
/// \brief Default constructor
|
|
62
|
+
WtoComponentVisitor() = default;
|
|
63
|
+
|
|
64
|
+
/// \brief Copy constructor
|
|
65
|
+
WtoComponentVisitor(const WtoComponentVisitor &) noexcept = default;
|
|
66
|
+
|
|
67
|
+
/// \brief Move constructor
|
|
68
|
+
WtoComponentVisitor(WtoComponentVisitor &&) noexcept = default;
|
|
69
|
+
|
|
70
|
+
/// \brief Copy assignment operator
|
|
71
|
+
WtoComponentVisitor &operator=(const WtoComponentVisitor &) noexcept = default;
|
|
72
|
+
|
|
73
|
+
/// \brief Move assignment operator
|
|
74
|
+
WtoComponentVisitor &operator=(WtoComponentVisitor &&) noexcept = default;
|
|
75
|
+
|
|
76
|
+
/// \brief Visit the given vertex
|
|
77
|
+
virtual void visit(const WtoVertexT &) = 0;
|
|
78
|
+
|
|
79
|
+
/// \brief Visit the given cycle
|
|
80
|
+
virtual void visit(const WtoCycleT &) = 0;
|
|
81
|
+
|
|
82
|
+
/// \brief Destructor
|
|
83
|
+
virtual ~WtoComponentVisitor() = default;
|
|
84
|
+
|
|
85
|
+
}; // end class WtoComponentVisitor
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
/// \brief Represents the nesting of a node
|
|
92
|
+
///
|
|
93
|
+
/// The nesting of a node is the list of cycles containing the node, from
|
|
94
|
+
/// the outermost to the innermost.
|
|
95
|
+
class WtoNesting
|
|
96
|
+
{
|
|
97
|
+
public:
|
|
98
|
+
private:
|
|
99
|
+
typedef std::vector<const SVFBasicBlock*> NodeRefList;
|
|
100
|
+
|
|
101
|
+
public:
|
|
102
|
+
typedef typename NodeRefList::const_iterator Iterator;
|
|
103
|
+
|
|
104
|
+
private:
|
|
105
|
+
NodeRefList _nodes;
|
|
106
|
+
|
|
107
|
+
public:
|
|
108
|
+
/// \brief Constructor
|
|
109
|
+
WtoNesting() = default;
|
|
110
|
+
|
|
111
|
+
/// \brief Copy constructor
|
|
112
|
+
WtoNesting(const WtoNesting &) = default;
|
|
113
|
+
|
|
114
|
+
/// \brief Move constructor
|
|
115
|
+
WtoNesting(WtoNesting &&) = default;
|
|
116
|
+
|
|
117
|
+
/// \brief Copy assignment operator
|
|
118
|
+
WtoNesting &operator=(const WtoNesting &) = default;
|
|
119
|
+
|
|
120
|
+
/// \brief Move assignment operator
|
|
121
|
+
WtoNesting &operator=(WtoNesting &&) = default;
|
|
122
|
+
|
|
123
|
+
/// \brief Destructor
|
|
124
|
+
~WtoNesting() = default;
|
|
125
|
+
|
|
126
|
+
/// \brief Add a cycle head in the nesting
|
|
127
|
+
void add(const SVFBasicBlock *head)
|
|
128
|
+
{
|
|
129
|
+
_nodes.push_back(head);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/// \brief Begin iterator over the head of cycles
|
|
133
|
+
Iterator begin() const
|
|
134
|
+
{
|
|
135
|
+
return _nodes.cbegin();
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/// \brief End iterator over the head of cycles
|
|
139
|
+
Iterator end() const
|
|
140
|
+
{
|
|
141
|
+
return _nodes.cend();
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/// \brief Return the common prefix of the given nestings
|
|
145
|
+
WtoNesting operator^(const WtoNesting &other) const
|
|
146
|
+
{
|
|
147
|
+
WtoNesting res;
|
|
148
|
+
for (auto this_it = begin(), other_it = other.begin();
|
|
149
|
+
this_it != end() && other_it != other.end();
|
|
150
|
+
++this_it, ++other_it)
|
|
151
|
+
{
|
|
152
|
+
if (*this_it == *other_it)
|
|
153
|
+
{
|
|
154
|
+
res.add(*this_it);
|
|
155
|
+
}
|
|
156
|
+
else
|
|
157
|
+
{
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return res;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
private:
|
|
165
|
+
/// \brief Compare the given nestings
|
|
166
|
+
int compare(const WtoNesting &other) const
|
|
167
|
+
{
|
|
168
|
+
if (this == &other)
|
|
169
|
+
{
|
|
170
|
+
return 0; // equals
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
auto this_it = begin();
|
|
174
|
+
auto other_it = other.begin();
|
|
175
|
+
while (this_it != end())
|
|
176
|
+
{
|
|
177
|
+
if (other_it == other.end())
|
|
178
|
+
{
|
|
179
|
+
return 1; // `this` is nested within `other`
|
|
180
|
+
}
|
|
181
|
+
else if (*this_it == *other_it)
|
|
182
|
+
{
|
|
183
|
+
++this_it;
|
|
184
|
+
++other_it;
|
|
185
|
+
}
|
|
186
|
+
else
|
|
187
|
+
{
|
|
188
|
+
return 2; // not comparable
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (other_it == other.end())
|
|
192
|
+
{
|
|
193
|
+
return 0; // equals
|
|
194
|
+
}
|
|
195
|
+
else
|
|
196
|
+
{
|
|
197
|
+
return -1; // `other` is nested within `this`
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
public:
|
|
202
|
+
bool operator<(const WtoNesting &other) const
|
|
203
|
+
{
|
|
204
|
+
return compare(other) == -1;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
bool operator<=(const WtoNesting &other) const
|
|
208
|
+
{
|
|
209
|
+
return compare(other) <= 0;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
bool operator==(const WtoNesting &other) const
|
|
213
|
+
{
|
|
214
|
+
return compare(other) == 0;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
bool operator>=(const WtoNesting &other) const
|
|
218
|
+
{
|
|
219
|
+
return operator<=(other);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
bool operator>(const WtoNesting &other) const
|
|
223
|
+
{
|
|
224
|
+
return compare(other) == 1;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/// \brief Dump the nesting, for debugging purpose
|
|
228
|
+
std::string toString() const
|
|
229
|
+
{
|
|
230
|
+
std::string str;
|
|
231
|
+
std::stringstream rawstr(str);
|
|
232
|
+
rawstr << "[";
|
|
233
|
+
for (auto it = begin(), et = end(); it != et;)
|
|
234
|
+
{
|
|
235
|
+
rawstr << (*it)->getName().data();
|
|
236
|
+
++it;
|
|
237
|
+
if (it != et)
|
|
238
|
+
{
|
|
239
|
+
rawstr << ", ";
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
rawstr << "]";
|
|
243
|
+
return rawstr.str();
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/// Overloading operator << for dumping ICFG node ID
|
|
247
|
+
//@{
|
|
248
|
+
friend std::ostream &operator<<(std::ostream &o, const WtoNesting &wto)
|
|
249
|
+
{
|
|
250
|
+
o << wto.toString();
|
|
251
|
+
return o;
|
|
252
|
+
}
|
|
253
|
+
//@}
|
|
254
|
+
|
|
255
|
+
}; // end class WtoNesting
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
/// \brief Base class for components of a weak topological order
|
|
259
|
+
///
|
|
260
|
+
/// This is either a vertex or a cycle.
|
|
261
|
+
class WtoComponent
|
|
262
|
+
{
|
|
263
|
+
public:
|
|
264
|
+
/// Types of SVFIR statements
|
|
265
|
+
/// Gep represents (base + offset) for field sensitivity
|
|
266
|
+
/// ThreadFork/ThreadJoin is to model parameter passings between thread spawners and spawnees.
|
|
267
|
+
enum WtoCT
|
|
268
|
+
{
|
|
269
|
+
Node, Cycle
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
/// \brief Default constructor
|
|
273
|
+
WtoComponent(WtoCT k) : type(k) {};
|
|
274
|
+
|
|
275
|
+
/// \brief Copy constructor
|
|
276
|
+
WtoComponent(const WtoComponent &) noexcept = default;
|
|
277
|
+
|
|
278
|
+
/// \brief Move constructor
|
|
279
|
+
WtoComponent(WtoComponent &&) noexcept = default;
|
|
280
|
+
|
|
281
|
+
/// \brief Copy assignment operator
|
|
282
|
+
WtoComponent &operator=(const WtoComponent &) noexcept = default;
|
|
283
|
+
|
|
284
|
+
/// \brief Move assignment operator
|
|
285
|
+
WtoComponent &operator=(WtoComponent &&) noexcept = default;
|
|
286
|
+
|
|
287
|
+
/// \brief Accept the given visitor
|
|
288
|
+
virtual void accept(WtoComponentVisitor *) const = 0;
|
|
289
|
+
|
|
290
|
+
/// \brief Destructor
|
|
291
|
+
virtual ~WtoComponent() = default;
|
|
292
|
+
|
|
293
|
+
inline WtoCT getKind() const
|
|
294
|
+
{
|
|
295
|
+
return type;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
virtual std::string toString() const = 0;
|
|
299
|
+
|
|
300
|
+
/// Overloading operator << for dumping ICFG node ID
|
|
301
|
+
//@{
|
|
302
|
+
friend std::ostream &operator<<(std::ostream &o, const WtoComponent &wto)
|
|
303
|
+
{
|
|
304
|
+
o << wto.toString();
|
|
305
|
+
return o;
|
|
306
|
+
}
|
|
307
|
+
//@}
|
|
308
|
+
|
|
309
|
+
WtoCT type;
|
|
310
|
+
WtoComponent* next{nullptr};
|
|
311
|
+
}; // end class WtoComponent
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
/// \brief Represents a vertex
|
|
315
|
+
class WtoVertex final : public WtoComponent
|
|
316
|
+
{
|
|
317
|
+
private:
|
|
318
|
+
const SVFBasicBlock *_node;
|
|
319
|
+
|
|
320
|
+
public:
|
|
321
|
+
/// \brief Constructor
|
|
322
|
+
explicit WtoVertex(const SVFBasicBlock *node) : WtoComponent(WtoComponent::Node), _node(node) {}
|
|
323
|
+
|
|
324
|
+
/// \brief Return the graph node
|
|
325
|
+
const SVFBasicBlock *node() const
|
|
326
|
+
{
|
|
327
|
+
return _node;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/// \brief Accept the given visitor
|
|
331
|
+
void accept(WtoComponentVisitor *v) const override
|
|
332
|
+
{
|
|
333
|
+
v->visit(*this);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/// \brief Dump the vertex, for debugging purpose
|
|
337
|
+
std::string toString() const override
|
|
338
|
+
{
|
|
339
|
+
return std::string(_node->getName().data());
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/// ClassOf
|
|
343
|
+
//@{
|
|
344
|
+
static inline bool classof(const WtoVertex *)
|
|
345
|
+
{
|
|
346
|
+
return true;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
static inline bool classof(const WtoComponent *c)
|
|
350
|
+
{
|
|
351
|
+
return c->getKind() == WtoComponent::Node;
|
|
352
|
+
}
|
|
353
|
+
///@}
|
|
354
|
+
|
|
355
|
+
}; // end class WtoVertex
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
/// \brief Represents a cycle
|
|
359
|
+
class WtoCycle final : public WtoComponent
|
|
360
|
+
{
|
|
361
|
+
public:
|
|
362
|
+
typedef WtoComponent WtoComponentT;
|
|
363
|
+
|
|
364
|
+
private:
|
|
365
|
+
typedef const WtoComponentT *WtoComponentPtr;
|
|
366
|
+
typedef std::list<WtoComponentPtr> WtoComponentRefList;
|
|
367
|
+
|
|
368
|
+
public:
|
|
369
|
+
/// \brief Iterator over the components
|
|
370
|
+
typedef typename WtoComponentRefList::const_iterator Iterator;
|
|
371
|
+
|
|
372
|
+
private:
|
|
373
|
+
/// \brief Head of the cycle
|
|
374
|
+
const SVFBasicBlock *_head;
|
|
375
|
+
|
|
376
|
+
/// \brief List of components
|
|
377
|
+
WtoComponentRefList _components;
|
|
378
|
+
|
|
379
|
+
public:
|
|
380
|
+
/// \brief Constructor
|
|
381
|
+
WtoCycle(const SVFBasicBlock *head, WtoComponentRefList components)
|
|
382
|
+
: WtoComponent(WtoComponent::Cycle), _head(head), _components(std::move(components)) {}
|
|
383
|
+
|
|
384
|
+
/// \brief Return the head of the cycle
|
|
385
|
+
const SVFBasicBlock *head() const
|
|
386
|
+
{
|
|
387
|
+
return _head;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/// \brief Begin iterator over the components
|
|
391
|
+
Iterator begin() const
|
|
392
|
+
{
|
|
393
|
+
return _components.cbegin();
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/// \brief End iterator over the components
|
|
397
|
+
Iterator end() const
|
|
398
|
+
{
|
|
399
|
+
return _components.cend();
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/// \brief Accept the given visitor
|
|
403
|
+
void accept(WtoComponentVisitor *v) const override
|
|
404
|
+
{
|
|
405
|
+
v->visit(*this);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/// ClassOf
|
|
409
|
+
//@{
|
|
410
|
+
static inline bool classof(const WtoCycle *)
|
|
411
|
+
{
|
|
412
|
+
return true;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
static inline bool classof(const WtoComponent *c)
|
|
416
|
+
{
|
|
417
|
+
return c->getKind() == WtoComponent::Cycle;
|
|
418
|
+
}
|
|
419
|
+
///@}
|
|
420
|
+
|
|
421
|
+
/// \brief Dump the cycle, for debugging purpose
|
|
422
|
+
std::string toString() const override
|
|
423
|
+
{
|
|
424
|
+
std::string str;
|
|
425
|
+
std::stringstream rawstr(str);
|
|
426
|
+
rawstr << "(";
|
|
427
|
+
rawstr << _head->getName().data() << ", ";
|
|
428
|
+
for (auto it = begin(), et = end(); it != et;)
|
|
429
|
+
{
|
|
430
|
+
rawstr << (*it)->toString();
|
|
431
|
+
++it;
|
|
432
|
+
if (it != et)
|
|
433
|
+
{
|
|
434
|
+
rawstr << ", ";
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
rawstr << ")";
|
|
438
|
+
return rawstr.str();
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
}; // end class WtoCycle
|
|
442
|
+
|
|
443
|
+
|
|
444
|
+
/// \brief Weak Topological Ordering
|
|
445
|
+
class Wto
|
|
446
|
+
{
|
|
447
|
+
|
|
448
|
+
public:
|
|
449
|
+
typedef WtoNesting WtoNestingT;
|
|
450
|
+
typedef WtoComponent WtoComponentT;
|
|
451
|
+
typedef WtoVertex WtoVertexT;
|
|
452
|
+
typedef WtoCycle WtoCycleT;
|
|
453
|
+
typedef Set<const SVFBasicBlock *> NodeRefList;
|
|
454
|
+
|
|
455
|
+
protected:
|
|
456
|
+
typedef const WtoComponentT *WtoComponentPtr;
|
|
457
|
+
typedef std::list<WtoComponentPtr> WtoComponentRefList;
|
|
458
|
+
typedef Set <WtoComponentPtr> WtoComponentRefSet;
|
|
459
|
+
typedef Map<const SVFBasicBlock *, const WtoCycleT *> NodeRefToWtoCycleMap;
|
|
460
|
+
typedef Map<const SVFBasicBlock *, NodeRefList> NodeRefTONodeRefListMap;
|
|
461
|
+
|
|
462
|
+
typedef u32_t Dfn;
|
|
463
|
+
typedef Map<const SVFBasicBlock *, Dfn> DfnTable;
|
|
464
|
+
typedef std::vector<const SVFBasicBlock *> Stack;
|
|
465
|
+
typedef std::shared_ptr<WtoNestingT> WtoNestingPtr;
|
|
466
|
+
typedef Map<const SVFBasicBlock *, WtoNestingPtr> NestingTable;
|
|
467
|
+
|
|
468
|
+
public:
|
|
469
|
+
/// \brief Iterator over the components
|
|
470
|
+
typedef typename WtoComponentRefList::const_iterator Iterator;
|
|
471
|
+
|
|
472
|
+
protected:
|
|
473
|
+
WtoComponentRefList _components;
|
|
474
|
+
WtoComponentRefSet _allComponents;
|
|
475
|
+
NodeRefToWtoCycleMap headRefToCycle;
|
|
476
|
+
NodeRefTONodeRefListMap headRefToTails;
|
|
477
|
+
NestingTable _nesting_table;
|
|
478
|
+
DfnTable _dfn_table;
|
|
479
|
+
Dfn _num;
|
|
480
|
+
Stack _stack;
|
|
481
|
+
|
|
482
|
+
public:
|
|
483
|
+
/// \brief Compute the weak topological order of the given graph
|
|
484
|
+
explicit Wto() : _num(0) {}
|
|
485
|
+
|
|
486
|
+
/// \brief Compute the weak topological order of the given graph
|
|
487
|
+
explicit Wto(const SVFBasicBlock *entry) : _num(0)
|
|
488
|
+
{
|
|
489
|
+
visit(entry, _components);
|
|
490
|
+
//link_components(_components);
|
|
491
|
+
_dfn_table.clear();
|
|
492
|
+
_stack.clear();
|
|
493
|
+
build_nesting();
|
|
494
|
+
build_tails();
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
/// \brief No copy constructor
|
|
498
|
+
Wto(const Wto &other) = default;
|
|
499
|
+
|
|
500
|
+
/// \brief Move constructor
|
|
501
|
+
Wto(Wto &&other) = default;
|
|
502
|
+
|
|
503
|
+
/// \brief No copy assignment operator
|
|
504
|
+
Wto &operator=(const Wto &other) = default;
|
|
505
|
+
|
|
506
|
+
/// \brief Move assignment operator
|
|
507
|
+
Wto &operator=(Wto &&other) = default;
|
|
508
|
+
|
|
509
|
+
/// \brief Destructor
|
|
510
|
+
~Wto()
|
|
511
|
+
{
|
|
512
|
+
for (const auto &component: _allComponents)
|
|
513
|
+
{
|
|
514
|
+
delete component;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
/// \brief Begin iterator over the components
|
|
519
|
+
/// \brief Begin iterator over the components
|
|
520
|
+
Iterator begin() const
|
|
521
|
+
{
|
|
522
|
+
return _components.cbegin();
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
/// \brief End iterator over the components
|
|
526
|
+
Iterator end() const
|
|
527
|
+
{
|
|
528
|
+
return _components.cend();
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
bool isHead(const SVFBasicBlock *node) const
|
|
532
|
+
{
|
|
533
|
+
return headRefToCycle.find(node) != headRefToCycle.end();
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
typename NodeRefToWtoCycleMap::const_iterator headBegin() const
|
|
537
|
+
{
|
|
538
|
+
return headRefToCycle.cbegin();
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
/// \brief End iterator over the components
|
|
542
|
+
typename NodeRefToWtoCycleMap::const_iterator headEnd() const
|
|
543
|
+
{
|
|
544
|
+
return headRefToCycle.cend();
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
const NodeRefList &getTails(const SVFBasicBlock *node) const
|
|
548
|
+
{
|
|
549
|
+
auto it = headRefToTails.find(node);
|
|
550
|
+
assert(it != headRefToTails.end() && "node not found");
|
|
551
|
+
return it->second;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
|
|
555
|
+
/// \brief Return the nesting of the given node
|
|
556
|
+
const WtoNestingT &nesting(const SVFBasicBlock *n) const
|
|
557
|
+
{
|
|
558
|
+
auto it = _nesting_table.find(n);
|
|
559
|
+
assert(it != _nesting_table.end() && "node not found");
|
|
560
|
+
return *(it->second);
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
/// \brief Return the nesting of the given node
|
|
564
|
+
inline bool in_nesting_table(const SVFBasicBlock *n) const
|
|
565
|
+
{
|
|
566
|
+
auto it = _nesting_table.find(n);
|
|
567
|
+
return it != _nesting_table.end();
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
/// \brief Accept the given visitor
|
|
571
|
+
void accept(WtoComponentVisitor* v)
|
|
572
|
+
{
|
|
573
|
+
for (const auto &c: _components)
|
|
574
|
+
{
|
|
575
|
+
c->accept(v);
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
/// \brief Dump the order, for debugging purpose
|
|
580
|
+
std::string toString() const
|
|
581
|
+
{
|
|
582
|
+
std::string str;
|
|
583
|
+
std::stringstream rawstr(str);
|
|
584
|
+
rawstr << "[";
|
|
585
|
+
for (auto it = begin(), et = end(); it != et;)
|
|
586
|
+
{
|
|
587
|
+
rawstr << (*it)->toString();
|
|
588
|
+
++it;
|
|
589
|
+
if (it != et)
|
|
590
|
+
{
|
|
591
|
+
rawstr << ", ";
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
rawstr << "]";
|
|
595
|
+
return rawstr.str();
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
/// Overloading operator << for dumping ICFG node ID
|
|
599
|
+
//@{
|
|
600
|
+
friend std::ostream &operator<<(std::ostream &o, const Wto &wto)
|
|
601
|
+
{
|
|
602
|
+
o << wto.toString();
|
|
603
|
+
return o;
|
|
604
|
+
}
|
|
605
|
+
//@}
|
|
606
|
+
|
|
607
|
+
protected:
|
|
608
|
+
/// \brief Visitor to build the nestings of each node
|
|
609
|
+
class NestingBuilder final
|
|
610
|
+
: public WtoComponentVisitor
|
|
611
|
+
{
|
|
612
|
+
private:
|
|
613
|
+
WtoNestingPtr _nesting;
|
|
614
|
+
NestingTable &_nesting_table;
|
|
615
|
+
|
|
616
|
+
public:
|
|
617
|
+
explicit NestingBuilder(NestingTable &nesting_table)
|
|
618
|
+
: _nesting(std::make_shared<WtoNestingT>()),
|
|
619
|
+
_nesting_table(nesting_table) {}
|
|
620
|
+
|
|
621
|
+
void visit(const WtoCycleT &cycle) override
|
|
622
|
+
{
|
|
623
|
+
const SVFBasicBlock *head = cycle.head();
|
|
624
|
+
WtoNestingPtr previous_nesting = _nesting;
|
|
625
|
+
_nesting_table.insert(std::make_pair(head, _nesting));
|
|
626
|
+
_nesting = std::make_shared<WtoNestingT>(*_nesting);
|
|
627
|
+
_nesting->add(head);
|
|
628
|
+
for (auto it = cycle.begin(), et = cycle.end(); it != et; ++it)
|
|
629
|
+
{
|
|
630
|
+
(*it)->accept(this);
|
|
631
|
+
}
|
|
632
|
+
_nesting = previous_nesting;
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
void visit(const WtoVertexT &vertex) override
|
|
636
|
+
{
|
|
637
|
+
_nesting_table.insert(
|
|
638
|
+
std::make_pair(vertex.node(), _nesting));
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
}; // end class NestingBuilder
|
|
642
|
+
|
|
643
|
+
/// \brief Visitor to build the tails of each head/loop
|
|
644
|
+
class TailBuilder : public WtoComponentVisitor
|
|
645
|
+
{
|
|
646
|
+
protected:
|
|
647
|
+
NodeRefList &_tails;
|
|
648
|
+
const WtoNestingT &_headNesting;
|
|
649
|
+
const SVFBasicBlock *_head;
|
|
650
|
+
NestingTable &_nesting_table;
|
|
651
|
+
|
|
652
|
+
public:
|
|
653
|
+
|
|
654
|
+
explicit TailBuilder(NestingTable &nesting_table, NodeRefList &tails, const SVFBasicBlock *head,
|
|
655
|
+
const WtoNestingT &headNesting) : _nesting_table(
|
|
656
|
+
nesting_table), _head(head), _tails(tails), _headNesting(headNesting)
|
|
657
|
+
{
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
void visit(const WtoCycleT &cycle) override
|
|
661
|
+
{
|
|
662
|
+
for (auto it = cycle.begin(), et = cycle.end(); it != et; ++it)
|
|
663
|
+
{
|
|
664
|
+
(*it)->accept(this);
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
virtual void visit(const WtoVertexT &vertex) override
|
|
669
|
+
{
|
|
670
|
+
for (const auto &next_block: vertex.node()->getSuccessors())
|
|
671
|
+
{
|
|
672
|
+
const SVFBasicBlock *succ = next_block;
|
|
673
|
+
const WtoNestingT &succNesting = nesting(succ);
|
|
674
|
+
if (succ != _head && succNesting <= _headNesting)
|
|
675
|
+
{
|
|
676
|
+
_tails.insert(vertex.node());
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
protected:
|
|
682
|
+
/// \brief Return the nesting of the given node
|
|
683
|
+
const WtoNestingT &nesting(const SVFBasicBlock *n) const
|
|
684
|
+
{
|
|
685
|
+
auto it = _nesting_table.find(n);
|
|
686
|
+
assert(it != _nesting_table.end() && "node not found");
|
|
687
|
+
return *(it->second);
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
};
|
|
691
|
+
|
|
692
|
+
protected:
|
|
693
|
+
/// \brief Return the depth-first number of the given node
|
|
694
|
+
Dfn dfn(const SVFBasicBlock *n) const
|
|
695
|
+
{
|
|
696
|
+
auto it = _dfn_table.find(n);
|
|
697
|
+
if (it != _dfn_table.end())
|
|
698
|
+
{
|
|
699
|
+
return it->second;
|
|
700
|
+
}
|
|
701
|
+
else
|
|
702
|
+
{
|
|
703
|
+
return 0;
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
/// \brief Set the depth-first number of the given node
|
|
708
|
+
void set_dfn(const SVFBasicBlock *n, const Dfn &dfn)
|
|
709
|
+
{
|
|
710
|
+
auto res = _dfn_table.insert(std::make_pair(n, dfn));
|
|
711
|
+
if (!res.second)
|
|
712
|
+
{
|
|
713
|
+
(res.first)->second = dfn;
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
/// \brief Pop a node from the stack
|
|
718
|
+
const SVFBasicBlock *pop()
|
|
719
|
+
{
|
|
720
|
+
assert(!_stack.empty() && "empty stack");
|
|
721
|
+
const SVFBasicBlock *top = _stack.back();
|
|
722
|
+
_stack.pop_back();
|
|
723
|
+
return top;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
/// \brief Push a node on the stack
|
|
727
|
+
void push(const SVFBasicBlock *n)
|
|
728
|
+
{
|
|
729
|
+
_stack.push_back(n);
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
const WtoVertexT *newVertex(const SVFBasicBlock *node)
|
|
733
|
+
{
|
|
734
|
+
const WtoVertexT *ptr = new WtoVertexT(node);
|
|
735
|
+
_allComponents.insert(ptr);
|
|
736
|
+
return ptr;
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
const WtoCycleT *newCycle(const SVFBasicBlock *node, const WtoComponentRefList &partition)
|
|
740
|
+
{
|
|
741
|
+
const WtoCycleT *ptr = new WtoCycleT(node, std::move(partition));
|
|
742
|
+
_allComponents.insert(ptr);
|
|
743
|
+
return ptr;
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
/// \brief Create the cycle component for the given vertex
|
|
747
|
+
const WtoCycleT *component(const SVFBasicBlock *vertex)
|
|
748
|
+
{
|
|
749
|
+
WtoComponentRefList partition;
|
|
750
|
+
for (auto it = vertex->getSuccessors().begin(), et = vertex->getSuccessors().end(); it != et; ++it)
|
|
751
|
+
{
|
|
752
|
+
const SVFBasicBlock *succ = *it;
|
|
753
|
+
if (dfn(succ) == 0)
|
|
754
|
+
{
|
|
755
|
+
visit(succ, partition);
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
const WtoCycleT *ptr = newCycle(vertex, partition);
|
|
759
|
+
headRefToCycle.emplace(vertex, ptr);
|
|
760
|
+
return ptr;
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
/// \brief Visit the given node
|
|
764
|
+
///
|
|
765
|
+
/// Algorithm to build a weak topological order of a graph
|
|
766
|
+
virtual Dfn visit(const SVFBasicBlock *vertex, WtoComponentRefList &partition)
|
|
767
|
+
{
|
|
768
|
+
Dfn head(0);
|
|
769
|
+
Dfn min(0);
|
|
770
|
+
bool loop;
|
|
771
|
+
|
|
772
|
+
push(vertex);
|
|
773
|
+
_num += Dfn(1);
|
|
774
|
+
head = _num;
|
|
775
|
+
set_dfn(vertex, head);
|
|
776
|
+
loop = false;
|
|
777
|
+
for (auto it = vertex->getSuccessors().begin(), et = vertex->getSuccessors().end(); it != et; ++it)
|
|
778
|
+
{
|
|
779
|
+
const SVFBasicBlock *succ = *it;
|
|
780
|
+
Dfn succ_dfn = dfn(succ);
|
|
781
|
+
if (succ_dfn == Dfn(0))
|
|
782
|
+
{
|
|
783
|
+
min = visit(succ, partition);
|
|
784
|
+
}
|
|
785
|
+
else
|
|
786
|
+
{
|
|
787
|
+
min = succ_dfn;
|
|
788
|
+
}
|
|
789
|
+
if (min <= head)
|
|
790
|
+
{
|
|
791
|
+
head = min;
|
|
792
|
+
loop = true;
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
if (head == dfn(vertex))
|
|
796
|
+
{
|
|
797
|
+
set_dfn(vertex, UINT_MAX);
|
|
798
|
+
const SVFBasicBlock *element = pop();
|
|
799
|
+
if (loop)
|
|
800
|
+
{
|
|
801
|
+
while (element != vertex)
|
|
802
|
+
{
|
|
803
|
+
set_dfn(element, 0);
|
|
804
|
+
element = pop();
|
|
805
|
+
}
|
|
806
|
+
partition.push_front(component(vertex));
|
|
807
|
+
}
|
|
808
|
+
else
|
|
809
|
+
{
|
|
810
|
+
partition.push_front(newVertex(vertex));
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
return head;
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
/// \brief Build the nesting table
|
|
817
|
+
void build_nesting()
|
|
818
|
+
{
|
|
819
|
+
NestingBuilder builder(_nesting_table);
|
|
820
|
+
for (auto it = begin(), et = end(); it != et; ++it)
|
|
821
|
+
{
|
|
822
|
+
(*it)->accept(&builder);
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
/// \brief Build the tails for each loop
|
|
827
|
+
virtual void build_tails()
|
|
828
|
+
{
|
|
829
|
+
for (const auto &head: headRefToCycle)
|
|
830
|
+
{
|
|
831
|
+
NodeRefList tails;
|
|
832
|
+
TailBuilder builder(_nesting_table, tails, head.first, nesting(head.first));
|
|
833
|
+
for (auto it = head.second->begin(), eit = head.second->end(); it != eit; ++it)
|
|
834
|
+
{
|
|
835
|
+
(*it)->accept(&builder);
|
|
836
|
+
}
|
|
837
|
+
headRefToTails.emplace(head.first, tails);
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
}; // end class Wto
|
|
842
|
+
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
#endif /* WTO_H_ */
|