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,214 @@
|
|
|
1
|
+
//===- CoreBitVector.h -- Dynamically sized bit vector data structure ------------//
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* CoreBitVector.h
|
|
5
|
+
*
|
|
6
|
+
* Contiguous bit vector which resizes as required by common operations.
|
|
7
|
+
*
|
|
8
|
+
* Created on: Jan 31, 2021
|
|
9
|
+
* Author: Mohamad Barbar
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
#ifndef COREBITVECTOR_H_
|
|
13
|
+
#define COREBITVECTOR_H_
|
|
14
|
+
|
|
15
|
+
#include <assert.h>
|
|
16
|
+
#include <vector>
|
|
17
|
+
|
|
18
|
+
#include "SVFIR/SVFType.h"
|
|
19
|
+
|
|
20
|
+
namespace SVF
|
|
21
|
+
{
|
|
22
|
+
|
|
23
|
+
/// A contiguous bit vector that only contains what it needs according
|
|
24
|
+
/// to the operations carried. For example, when two bit vectors are unioned,
|
|
25
|
+
/// their sizes may be increased to fit all the bits from the other set.
|
|
26
|
+
/// This implementation never shrinks. Since points-to sets (generally) grow
|
|
27
|
+
/// monotonically, does not have too big an impact on points-to analysis and
|
|
28
|
+
/// so it isn't implemented.
|
|
29
|
+
/// Abbreviated CBV.
|
|
30
|
+
class CoreBitVector
|
|
31
|
+
{
|
|
32
|
+
public:
|
|
33
|
+
typedef unsigned long long Word;
|
|
34
|
+
static const size_t WordSize;
|
|
35
|
+
|
|
36
|
+
class CoreBitVectorIterator;
|
|
37
|
+
typedef CoreBitVectorIterator const_iterator;
|
|
38
|
+
typedef const_iterator iterator;
|
|
39
|
+
|
|
40
|
+
public:
|
|
41
|
+
/// Construct empty CBV.
|
|
42
|
+
CoreBitVector(void);
|
|
43
|
+
|
|
44
|
+
/// Construct empty CBV with space reserved for n Words.
|
|
45
|
+
CoreBitVector(size_t n);
|
|
46
|
+
|
|
47
|
+
/// Copy constructor.
|
|
48
|
+
CoreBitVector(const CoreBitVector &cbv);
|
|
49
|
+
|
|
50
|
+
/// Move constructor.
|
|
51
|
+
CoreBitVector(CoreBitVector &&cbv);
|
|
52
|
+
|
|
53
|
+
/// Copy assignment.
|
|
54
|
+
CoreBitVector &operator=(const CoreBitVector &rhs);
|
|
55
|
+
|
|
56
|
+
/// Move assignment.
|
|
57
|
+
CoreBitVector &operator=(CoreBitVector &&rhs);
|
|
58
|
+
|
|
59
|
+
/// Returns true if no bits are set.
|
|
60
|
+
bool empty(void) const;
|
|
61
|
+
|
|
62
|
+
/// Returns number of bits set.
|
|
63
|
+
u32_t count(void) const;
|
|
64
|
+
|
|
65
|
+
/// Empty the CBV.
|
|
66
|
+
void clear(void);
|
|
67
|
+
|
|
68
|
+
/// Returns true if bit is set in this CBV.
|
|
69
|
+
bool test(u32_t bit) const;
|
|
70
|
+
|
|
71
|
+
/// Check if bit is set. If it is, returns false.
|
|
72
|
+
/// Otherwise, sets bit and returns true.
|
|
73
|
+
bool test_and_set(u32_t bit);
|
|
74
|
+
|
|
75
|
+
/// Sets bit in the CBV.
|
|
76
|
+
void set(u32_t bit);
|
|
77
|
+
|
|
78
|
+
/// Resets bit in the CBV.
|
|
79
|
+
void reset(u32_t bit);
|
|
80
|
+
|
|
81
|
+
/// Returns true if this CBV is a superset of rhs.
|
|
82
|
+
bool contains(const CoreBitVector &rhs) const;
|
|
83
|
+
|
|
84
|
+
/// Returns true if this CBV and rhs share any set bits.
|
|
85
|
+
bool intersects(const CoreBitVector &rhs) const;
|
|
86
|
+
|
|
87
|
+
/// Returns true if this CBV and rhs have the same bits set.
|
|
88
|
+
bool operator==(const CoreBitVector &rhs) const;
|
|
89
|
+
|
|
90
|
+
/// Returns true if either this CBV or rhs has a bit set unique to the other.
|
|
91
|
+
bool operator!=(const CoreBitVector &rhs) const;
|
|
92
|
+
|
|
93
|
+
/// Put union of this CBV and rhs into this CBV.
|
|
94
|
+
/// Returns true if CBV changed.
|
|
95
|
+
bool operator|=(const CoreBitVector &rhs);
|
|
96
|
+
|
|
97
|
+
/// Put intersection of this CBV and rhs into this CBV.
|
|
98
|
+
/// Returns true if CBV changed.
|
|
99
|
+
bool operator&=(const CoreBitVector &rhs);
|
|
100
|
+
|
|
101
|
+
/// Remove set bits in rhs from this CBV.
|
|
102
|
+
/// Returns true if CBV changed.
|
|
103
|
+
bool operator-=(const CoreBitVector &rhs);
|
|
104
|
+
|
|
105
|
+
/// Put intersection of this CBV with complement of rhs into this CBV.
|
|
106
|
+
/// Returns true if this CBV changed.
|
|
107
|
+
bool intersectWithComplement(const CoreBitVector &rhs);
|
|
108
|
+
|
|
109
|
+
/// Put intersection of lhs with complement of rhs into this CBV.
|
|
110
|
+
void intersectWithComplement(const CoreBitVector &lhs, const CoreBitVector &rhs);
|
|
111
|
+
|
|
112
|
+
/// Hash for this CBV.
|
|
113
|
+
size_t hash(void) const;
|
|
114
|
+
|
|
115
|
+
const_iterator begin(void) const;
|
|
116
|
+
const_iterator end(void) const;
|
|
117
|
+
|
|
118
|
+
private:
|
|
119
|
+
/// Add enough words (prepend) to be able to include bit.
|
|
120
|
+
void extendBackward(u32_t bit);
|
|
121
|
+
|
|
122
|
+
/// Add enough words (append) to be able to include bit.
|
|
123
|
+
void extendForward(u32_t bit);
|
|
124
|
+
|
|
125
|
+
/// Add enough words (append xor prepend) to be able to include bit.
|
|
126
|
+
void extendTo(u32_t bit);
|
|
127
|
+
|
|
128
|
+
/// Returns the index into words which would hold bit.
|
|
129
|
+
size_t indexForBit(u32_t bit) const;
|
|
130
|
+
|
|
131
|
+
/// Returns true if bit can fit in this CBV without resizing.
|
|
132
|
+
bool canHold(u32_t bit) const;
|
|
133
|
+
|
|
134
|
+
/// Returns the last bit that this CBV can hold.
|
|
135
|
+
u32_t finalBit(void) const;
|
|
136
|
+
|
|
137
|
+
/// Returns the first bit position that both this CBV and rhs *can* hold.
|
|
138
|
+
u32_t firstCommonBit(const CoreBitVector &rhs) const;
|
|
139
|
+
|
|
140
|
+
/// Returns the next index in the words array at or after start which contains
|
|
141
|
+
/// set bits. This index and start are indices into the words array not
|
|
142
|
+
/// accounting for the offset. Returns a value greater than or equal to
|
|
143
|
+
/// words.size() when there are no more set bits.
|
|
144
|
+
size_t nextSetIndex(const size_t start) const;
|
|
145
|
+
|
|
146
|
+
public:
|
|
147
|
+
class CoreBitVectorIterator
|
|
148
|
+
{
|
|
149
|
+
public:
|
|
150
|
+
using iterator_category = std::forward_iterator_tag;
|
|
151
|
+
using value_type = u32_t;
|
|
152
|
+
using difference_type = std::ptrdiff_t;
|
|
153
|
+
using pointer = u32_t *;
|
|
154
|
+
using reference = u32_t &;
|
|
155
|
+
|
|
156
|
+
CoreBitVectorIterator(void) = delete;
|
|
157
|
+
|
|
158
|
+
/// Returns an iterator to the beginning of cbv if end is false, and to
|
|
159
|
+
/// the end of cbv if end is true.
|
|
160
|
+
CoreBitVectorIterator(const CoreBitVector *cbv, bool end=false);
|
|
161
|
+
|
|
162
|
+
CoreBitVectorIterator(const CoreBitVectorIterator &cbv) = default;
|
|
163
|
+
CoreBitVectorIterator(CoreBitVectorIterator &&cbv) = default;
|
|
164
|
+
|
|
165
|
+
CoreBitVectorIterator &operator=(const CoreBitVectorIterator &cbv) = default;
|
|
166
|
+
CoreBitVectorIterator &operator=(CoreBitVectorIterator &&cbv) = default;
|
|
167
|
+
|
|
168
|
+
/// Pre-increment: ++it.
|
|
169
|
+
const CoreBitVectorIterator &operator++(void);
|
|
170
|
+
|
|
171
|
+
/// Post-increment: it++.
|
|
172
|
+
const CoreBitVectorIterator operator++(int);
|
|
173
|
+
|
|
174
|
+
/// Dereference: *it.
|
|
175
|
+
u32_t operator*(void) const;
|
|
176
|
+
|
|
177
|
+
/// Equality: *this == rhs.
|
|
178
|
+
bool operator==(const CoreBitVectorIterator &rhs) const;
|
|
179
|
+
|
|
180
|
+
/// Inequality: *this != rhs.
|
|
181
|
+
bool operator!=(const CoreBitVectorIterator &rhs) const;
|
|
182
|
+
|
|
183
|
+
private:
|
|
184
|
+
bool atEnd(void) const;
|
|
185
|
+
|
|
186
|
+
private:
|
|
187
|
+
/// CoreBitVector we are iterating over.
|
|
188
|
+
const CoreBitVector *cbv;
|
|
189
|
+
/// Word in words we are looking at.
|
|
190
|
+
std::vector<Word>::const_iterator wordIt;
|
|
191
|
+
/// Current bit in wordIt we are looking at
|
|
192
|
+
/// (index into *wordIt).
|
|
193
|
+
u32_t bit;
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
private:
|
|
197
|
+
/// The first bit of the first word.
|
|
198
|
+
u32_t offset;
|
|
199
|
+
/// Our actual bit vector.
|
|
200
|
+
std::vector<Word> words;
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
template <>
|
|
204
|
+
struct Hash<CoreBitVector>
|
|
205
|
+
{
|
|
206
|
+
size_t operator()(const CoreBitVector &cbv) const
|
|
207
|
+
{
|
|
208
|
+
return cbv.hash();
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
} // End namespace SVF
|
|
213
|
+
|
|
214
|
+
#endif // COREBITVECTOR_H_
|
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
//===- CxtStmt.h -- Context- and Thread-Sensitive Statement-------------------//
|
|
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
|
+
* CxtStmt.h
|
|
25
|
+
*
|
|
26
|
+
* Created on: Jan 21, 2014
|
|
27
|
+
* Author: Yulei Sui
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef INCLUDE_UTIL_CXTSTMT_H_
|
|
31
|
+
#define INCLUDE_UTIL_CXTSTMT_H_
|
|
32
|
+
|
|
33
|
+
#include "SVFIR/SVFValue.h"
|
|
34
|
+
|
|
35
|
+
namespace SVF
|
|
36
|
+
{
|
|
37
|
+
|
|
38
|
+
class ICFGNode;
|
|
39
|
+
/*!
|
|
40
|
+
* Context-sensitive thread statement <c,s>
|
|
41
|
+
*/
|
|
42
|
+
class CxtStmt
|
|
43
|
+
{
|
|
44
|
+
public:
|
|
45
|
+
/// Constructor
|
|
46
|
+
CxtStmt(const CallStrCxt& c, const ICFGNode* f) :cxt(c), inst(f)
|
|
47
|
+
{
|
|
48
|
+
}
|
|
49
|
+
/// Copy constructor
|
|
50
|
+
CxtStmt(const CxtStmt& ctm) : cxt(ctm.getContext()),inst(ctm.getStmt())
|
|
51
|
+
{
|
|
52
|
+
}
|
|
53
|
+
/// Destructor
|
|
54
|
+
virtual ~CxtStmt()
|
|
55
|
+
{
|
|
56
|
+
}
|
|
57
|
+
/// Return current context
|
|
58
|
+
inline const CallStrCxt& getContext() const
|
|
59
|
+
{
|
|
60
|
+
return cxt;
|
|
61
|
+
}
|
|
62
|
+
/// Return current statement
|
|
63
|
+
inline const ICFGNode* getStmt() const
|
|
64
|
+
{
|
|
65
|
+
return inst;
|
|
66
|
+
}
|
|
67
|
+
/// Enable compare operator to avoid duplicated item insertion in map or set
|
|
68
|
+
/// to be noted that two vectors can also overload operator()
|
|
69
|
+
inline bool operator< (const CxtStmt& rhs) const
|
|
70
|
+
{
|
|
71
|
+
if(inst!=rhs.getStmt())
|
|
72
|
+
return inst < rhs.getStmt();
|
|
73
|
+
else
|
|
74
|
+
return cxt < rhs.getContext();
|
|
75
|
+
}
|
|
76
|
+
/// Overloading operator=
|
|
77
|
+
inline CxtStmt& operator= (const CxtStmt& rhs)
|
|
78
|
+
{
|
|
79
|
+
if(*this!=rhs)
|
|
80
|
+
{
|
|
81
|
+
inst = rhs.getStmt();
|
|
82
|
+
cxt = rhs.getContext();
|
|
83
|
+
}
|
|
84
|
+
return *this;
|
|
85
|
+
}
|
|
86
|
+
/// Overloading operator==
|
|
87
|
+
inline bool operator== (const CxtStmt& rhs) const
|
|
88
|
+
{
|
|
89
|
+
return (inst == rhs.getStmt() && cxt == rhs.getContext());
|
|
90
|
+
}
|
|
91
|
+
/// Overloading operator==
|
|
92
|
+
inline bool operator!= (const CxtStmt& rhs) const
|
|
93
|
+
{
|
|
94
|
+
return !(*this==rhs);
|
|
95
|
+
}
|
|
96
|
+
/// Return context in string format
|
|
97
|
+
inline std::string cxtToStr() const
|
|
98
|
+
{
|
|
99
|
+
std::string str;
|
|
100
|
+
std::stringstream rawstr(str);
|
|
101
|
+
rawstr << "[:";
|
|
102
|
+
for(CallStrCxt::const_iterator it = cxt.begin(), eit = cxt.end(); it!=eit; ++it)
|
|
103
|
+
{
|
|
104
|
+
rawstr << *it << " ";
|
|
105
|
+
}
|
|
106
|
+
rawstr << " ]";
|
|
107
|
+
return rawstr.str();
|
|
108
|
+
}
|
|
109
|
+
/// Dump CxtStmt
|
|
110
|
+
inline void dump() const
|
|
111
|
+
{
|
|
112
|
+
SVFUtil::outs() << "[ Current Stmt: " << inst->toString() << "\t Contexts: " << cxtToStr() << " ]\n";
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
protected:
|
|
116
|
+
CallStrCxt cxt;
|
|
117
|
+
const ICFGNode* inst;
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
/*!
|
|
122
|
+
* Context-sensitive thread statement <t,c,s>
|
|
123
|
+
*/
|
|
124
|
+
class CxtThreadStmt : public CxtStmt
|
|
125
|
+
{
|
|
126
|
+
public:
|
|
127
|
+
/// Constructor
|
|
128
|
+
CxtThreadStmt(NodeID t, const CallStrCxt& c, const ICFGNode* f) :CxtStmt(c,f), tid(t)
|
|
129
|
+
{
|
|
130
|
+
}
|
|
131
|
+
/// Copy constructor
|
|
132
|
+
CxtThreadStmt(const CxtThreadStmt& ctm) :CxtStmt(ctm), tid(ctm.getTid())
|
|
133
|
+
{
|
|
134
|
+
}
|
|
135
|
+
/// Destructor
|
|
136
|
+
virtual ~CxtThreadStmt()
|
|
137
|
+
{
|
|
138
|
+
}
|
|
139
|
+
/// Return current context
|
|
140
|
+
inline NodeID getTid() const
|
|
141
|
+
{
|
|
142
|
+
return tid;
|
|
143
|
+
}
|
|
144
|
+
/// Enable compare operator to avoid duplicated item insertion in map or set
|
|
145
|
+
/// to be noted that two vectors can also overload operator()
|
|
146
|
+
inline bool operator< (const CxtThreadStmt& rhs) const
|
|
147
|
+
{
|
|
148
|
+
if (tid != rhs.getTid())
|
|
149
|
+
return tid < rhs.getTid();
|
|
150
|
+
else if(inst!=rhs.getStmt())
|
|
151
|
+
return inst < rhs.getStmt();
|
|
152
|
+
else
|
|
153
|
+
return cxt < rhs.getContext();
|
|
154
|
+
}
|
|
155
|
+
/// Overloading operator=
|
|
156
|
+
inline CxtThreadStmt& operator= (const CxtThreadStmt& rhs)
|
|
157
|
+
{
|
|
158
|
+
if(*this!=rhs)
|
|
159
|
+
{
|
|
160
|
+
CxtStmt::operator=(rhs);
|
|
161
|
+
tid = rhs.getTid();
|
|
162
|
+
}
|
|
163
|
+
return *this;
|
|
164
|
+
}
|
|
165
|
+
/// Overloading operator==
|
|
166
|
+
inline bool operator== (const CxtThreadStmt& rhs) const
|
|
167
|
+
{
|
|
168
|
+
return (tid == rhs.getTid() && inst == rhs.getStmt() && cxt == rhs.getContext());
|
|
169
|
+
}
|
|
170
|
+
/// Overloading operator==
|
|
171
|
+
inline bool operator!= (const CxtThreadStmt& rhs) const
|
|
172
|
+
{
|
|
173
|
+
return !(*this==rhs);
|
|
174
|
+
}
|
|
175
|
+
/// Dump CxtThreadStmt
|
|
176
|
+
inline void dump() const
|
|
177
|
+
{
|
|
178
|
+
SVFUtil::outs() << "[ Current Thread id: " << tid << " Stmt: " << inst->toString() << "\t Contexts: " << cxtToStr() << " ]\n";
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
private:
|
|
182
|
+
NodeID tid;
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
/*!
|
|
187
|
+
* Context-sensitive thread <c,t>
|
|
188
|
+
*/
|
|
189
|
+
class CxtThread
|
|
190
|
+
{
|
|
191
|
+
public:
|
|
192
|
+
/// Constructor
|
|
193
|
+
CxtThread(const CallStrCxt& c, const ICFGNode* fork) : cxt(c), forksite(fork), inloop(false), incycle(false)
|
|
194
|
+
{
|
|
195
|
+
}
|
|
196
|
+
/// Copy constructor
|
|
197
|
+
CxtThread(const CxtThread& ct) :
|
|
198
|
+
cxt(ct.getContext()), forksite(ct.getThread()), inloop(ct.isInloop()), incycle(ct.isIncycle())
|
|
199
|
+
{
|
|
200
|
+
}
|
|
201
|
+
/// Destructor
|
|
202
|
+
virtual ~CxtThread()
|
|
203
|
+
{
|
|
204
|
+
}
|
|
205
|
+
/// Return context of the thread
|
|
206
|
+
inline const CallStrCxt& getContext() const
|
|
207
|
+
{
|
|
208
|
+
return cxt;
|
|
209
|
+
}
|
|
210
|
+
/// Return forksite
|
|
211
|
+
inline const ICFGNode* getThread() const
|
|
212
|
+
{
|
|
213
|
+
return forksite;
|
|
214
|
+
}
|
|
215
|
+
/// Enable compare operator to avoid duplicated item insertion in map or set
|
|
216
|
+
/// to be noted that two vectors can also overload operator()
|
|
217
|
+
inline bool operator< (const CxtThread& rhs) const
|
|
218
|
+
{
|
|
219
|
+
if (forksite != rhs.getThread())
|
|
220
|
+
return forksite < rhs.getThread();
|
|
221
|
+
else
|
|
222
|
+
return cxt < rhs.getContext();
|
|
223
|
+
}
|
|
224
|
+
/// Overloading operator=
|
|
225
|
+
inline CxtThread& operator= (const CxtThread& rhs)
|
|
226
|
+
{
|
|
227
|
+
if(*this!=rhs)
|
|
228
|
+
{
|
|
229
|
+
forksite = rhs.getThread();
|
|
230
|
+
cxt = rhs.getContext();
|
|
231
|
+
}
|
|
232
|
+
return *this;
|
|
233
|
+
}
|
|
234
|
+
/// Overloading operator==
|
|
235
|
+
inline bool operator== (const CxtThread& rhs) const
|
|
236
|
+
{
|
|
237
|
+
return (forksite == rhs.getThread() && cxt == rhs.getContext());
|
|
238
|
+
}
|
|
239
|
+
/// Overloading operator==
|
|
240
|
+
inline bool operator!= (const CxtThread& rhs) const
|
|
241
|
+
{
|
|
242
|
+
return !(*this==rhs);
|
|
243
|
+
}
|
|
244
|
+
/// Return context in string format
|
|
245
|
+
inline std::string cxtToStr() const
|
|
246
|
+
{
|
|
247
|
+
std::string str;
|
|
248
|
+
std::stringstream rawstr(str);
|
|
249
|
+
rawstr << "[:";
|
|
250
|
+
for(CallStrCxt::const_iterator it = cxt.begin(), eit = cxt.end(); it!=eit; ++it)
|
|
251
|
+
{
|
|
252
|
+
rawstr << *it << " ";
|
|
253
|
+
}
|
|
254
|
+
rawstr << " ]";
|
|
255
|
+
return rawstr.str();
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/// inloop, incycle attributes
|
|
259
|
+
//@{
|
|
260
|
+
inline void setInloop(bool in)
|
|
261
|
+
{
|
|
262
|
+
inloop = in;
|
|
263
|
+
}
|
|
264
|
+
inline bool isInloop() const
|
|
265
|
+
{
|
|
266
|
+
return inloop;
|
|
267
|
+
}
|
|
268
|
+
inline void setIncycle(bool in)
|
|
269
|
+
{
|
|
270
|
+
incycle = in;
|
|
271
|
+
}
|
|
272
|
+
inline bool isIncycle() const
|
|
273
|
+
{
|
|
274
|
+
return incycle;
|
|
275
|
+
}
|
|
276
|
+
//@}
|
|
277
|
+
|
|
278
|
+
/// Dump CxtThread
|
|
279
|
+
inline void dump() const
|
|
280
|
+
{
|
|
281
|
+
std::string loop = inloop?", inloop":"";
|
|
282
|
+
std::string cycle = incycle?", incycle":"";
|
|
283
|
+
|
|
284
|
+
if(forksite)
|
|
285
|
+
{
|
|
286
|
+
SVFUtil::outs() << "[ Thread: "
|
|
287
|
+
<< forksite->toString() << "\t Contexts: " << cxtToStr()
|
|
288
|
+
<< loop << cycle <<" ]\n";
|
|
289
|
+
}
|
|
290
|
+
else
|
|
291
|
+
{
|
|
292
|
+
SVFUtil::outs() << "[ Thread: " << "main " << "\t Contexts: " << cxtToStr()
|
|
293
|
+
<< loop << cycle <<" ]\n";
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
protected:
|
|
297
|
+
CallStrCxt cxt;
|
|
298
|
+
const ICFGNode* forksite;
|
|
299
|
+
bool inloop;
|
|
300
|
+
bool incycle;
|
|
301
|
+
};
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
/*!
|
|
305
|
+
* Context-sensitive procedure <c,m>
|
|
306
|
+
* c represent current context
|
|
307
|
+
* m represent current procedure
|
|
308
|
+
*/
|
|
309
|
+
class CxtProc
|
|
310
|
+
{
|
|
311
|
+
public:
|
|
312
|
+
/// Constructor
|
|
313
|
+
CxtProc(const CallStrCxt& c, const FunObjVar* f) :
|
|
314
|
+
cxt(c), fun(f)
|
|
315
|
+
{
|
|
316
|
+
}
|
|
317
|
+
/// Copy constructor
|
|
318
|
+
CxtProc(const CxtProc& ctm) :
|
|
319
|
+
cxt(ctm.getContext()), fun(ctm.getProc())
|
|
320
|
+
{
|
|
321
|
+
}
|
|
322
|
+
/// Destructor
|
|
323
|
+
virtual ~CxtProc()
|
|
324
|
+
{
|
|
325
|
+
}
|
|
326
|
+
/// Return current procedure
|
|
327
|
+
inline const FunObjVar* getProc() const
|
|
328
|
+
{
|
|
329
|
+
return fun;
|
|
330
|
+
}
|
|
331
|
+
/// Return current context
|
|
332
|
+
inline const CallStrCxt& getContext() const
|
|
333
|
+
{
|
|
334
|
+
return cxt;
|
|
335
|
+
}
|
|
336
|
+
/// Enable compare operator to avoid duplicated item insertion in map or set
|
|
337
|
+
/// to be noted that two vectors can also overload operator()
|
|
338
|
+
inline bool operator<(const CxtProc& rhs) const
|
|
339
|
+
{
|
|
340
|
+
if (fun != rhs.getProc())
|
|
341
|
+
return fun < rhs.getProc();
|
|
342
|
+
else
|
|
343
|
+
return cxt < rhs.getContext();
|
|
344
|
+
}
|
|
345
|
+
/// Overloading operator=
|
|
346
|
+
inline CxtProc& operator=(const CxtProc& rhs)
|
|
347
|
+
{
|
|
348
|
+
if (*this != rhs)
|
|
349
|
+
{
|
|
350
|
+
fun = rhs.getProc();
|
|
351
|
+
cxt = rhs.getContext();
|
|
352
|
+
}
|
|
353
|
+
return *this;
|
|
354
|
+
}
|
|
355
|
+
/// Overloading operator==
|
|
356
|
+
inline bool operator==(const CxtProc& rhs) const
|
|
357
|
+
{
|
|
358
|
+
return (fun == rhs.getProc() && cxt == rhs.getContext());
|
|
359
|
+
}
|
|
360
|
+
/// Overloading operator==
|
|
361
|
+
inline bool operator!=(const CxtProc& rhs) const
|
|
362
|
+
{
|
|
363
|
+
return !(*this == rhs);
|
|
364
|
+
}
|
|
365
|
+
/// Return context in string format
|
|
366
|
+
inline std::string cxtToStr() const
|
|
367
|
+
{
|
|
368
|
+
std::string str;
|
|
369
|
+
std::stringstream rawstr(str);
|
|
370
|
+
rawstr << "[:";
|
|
371
|
+
for (CallStrCxt::const_iterator it = cxt.begin(), eit = cxt.end(); it != eit; ++it)
|
|
372
|
+
{
|
|
373
|
+
rawstr << *it << " ";
|
|
374
|
+
}
|
|
375
|
+
rawstr << " ]";
|
|
376
|
+
return rawstr.str();
|
|
377
|
+
}
|
|
378
|
+
/// Dump CxtProc
|
|
379
|
+
inline void dump() const
|
|
380
|
+
{
|
|
381
|
+
SVFUtil::outs() << "[ Proc: " << fun->getName() << "\t Contexts: " << cxtToStr() << " ]\n";
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
protected:
|
|
385
|
+
CallStrCxt cxt;
|
|
386
|
+
const FunObjVar* fun;
|
|
387
|
+
};
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
/*!
|
|
391
|
+
* Context-sensitive procedure <t,c,m>
|
|
392
|
+
* t represent current thread during traversing
|
|
393
|
+
* c represent current context
|
|
394
|
+
* m represent current procedure
|
|
395
|
+
*/
|
|
396
|
+
class CxtThreadProc : public CxtProc
|
|
397
|
+
{
|
|
398
|
+
public:
|
|
399
|
+
/// Constructor
|
|
400
|
+
CxtThreadProc(NodeID t, const CallStrCxt& c, const FunObjVar* f) :CxtProc(c,f),tid(t)
|
|
401
|
+
{
|
|
402
|
+
}
|
|
403
|
+
/// Copy constructor
|
|
404
|
+
CxtThreadProc(const CxtThreadProc& ctm) : CxtProc(ctm.getContext(),ctm.getProc()), tid(ctm.getTid())
|
|
405
|
+
{
|
|
406
|
+
}
|
|
407
|
+
/// Destructor
|
|
408
|
+
virtual ~CxtThreadProc()
|
|
409
|
+
{
|
|
410
|
+
}
|
|
411
|
+
/// Return current thread id
|
|
412
|
+
inline NodeID getTid() const
|
|
413
|
+
{
|
|
414
|
+
return tid;
|
|
415
|
+
}
|
|
416
|
+
/// Enable compare operator to avoid duplicated item insertion in map or set
|
|
417
|
+
/// to be noted that two vectors can also overload operator()
|
|
418
|
+
inline bool operator< (const CxtThreadProc& rhs) const
|
|
419
|
+
{
|
|
420
|
+
if (tid != rhs.getTid())
|
|
421
|
+
return tid < rhs.getTid();
|
|
422
|
+
else if(fun!=rhs.getProc())
|
|
423
|
+
return fun < rhs.getProc();
|
|
424
|
+
else
|
|
425
|
+
return cxt < rhs.getContext();
|
|
426
|
+
}
|
|
427
|
+
/// Overloading operator=
|
|
428
|
+
inline CxtThreadProc& operator= (const CxtThreadProc& rhs)
|
|
429
|
+
{
|
|
430
|
+
if(*this!=rhs)
|
|
431
|
+
{
|
|
432
|
+
tid = rhs.getTid();
|
|
433
|
+
fun = rhs.getProc();
|
|
434
|
+
cxt = rhs.getContext();
|
|
435
|
+
}
|
|
436
|
+
return *this;
|
|
437
|
+
}
|
|
438
|
+
/// Overloading operator==
|
|
439
|
+
inline bool operator== (const CxtThreadProc& rhs) const
|
|
440
|
+
{
|
|
441
|
+
return (tid == rhs.getTid() && fun == rhs.getProc() && cxt == rhs.getContext());
|
|
442
|
+
}
|
|
443
|
+
/// Overloading operator==
|
|
444
|
+
inline bool operator!= (const CxtThreadProc& rhs) const
|
|
445
|
+
{
|
|
446
|
+
return !(*this==rhs);
|
|
447
|
+
}
|
|
448
|
+
/// Dump CxtThreadProc
|
|
449
|
+
inline void dump() const
|
|
450
|
+
{
|
|
451
|
+
SVFUtil::outs() << "[ Current Thread id: " << tid << " Proc: " << fun->getName() << "\t Contexts: " << cxtToStr() << " ]\n";
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
private:
|
|
455
|
+
NodeID tid;
|
|
456
|
+
};
|
|
457
|
+
|
|
458
|
+
} // End namespace SVF
|
|
459
|
+
// Specialise has for class defined in this header file
|
|
460
|
+
template <> struct std::hash<SVF::CxtThread>
|
|
461
|
+
{
|
|
462
|
+
size_t operator()(const SVF::CxtThread& cs) const
|
|
463
|
+
{
|
|
464
|
+
std::hash<SVF::CallStrCxt> h;
|
|
465
|
+
return h(cs.getContext());
|
|
466
|
+
}
|
|
467
|
+
};
|
|
468
|
+
template <> struct std::hash<SVF::CxtThreadProc>
|
|
469
|
+
{
|
|
470
|
+
size_t operator()(const SVF::CxtThreadProc& ctp) const
|
|
471
|
+
{
|
|
472
|
+
std::hash<SVF::NodeID> h;
|
|
473
|
+
return h(ctp.getTid());
|
|
474
|
+
}
|
|
475
|
+
};
|
|
476
|
+
template <> struct std::hash<SVF::CxtThreadStmt>
|
|
477
|
+
{
|
|
478
|
+
size_t operator()(const SVF::CxtThreadStmt& cts) const
|
|
479
|
+
{
|
|
480
|
+
std::hash<SVF::NodeID> h;
|
|
481
|
+
return h(cts.getTid());
|
|
482
|
+
}
|
|
483
|
+
};
|
|
484
|
+
template <> struct std::hash<SVF::CxtStmt>
|
|
485
|
+
{
|
|
486
|
+
size_t operator()(const SVF::CxtStmt& cs) const
|
|
487
|
+
{
|
|
488
|
+
std::hash<SVF::ICFGNode*> h;
|
|
489
|
+
SVF::ICFGNode* inst = const_cast<SVF::ICFGNode*> (cs.getStmt());
|
|
490
|
+
return h(inst);
|
|
491
|
+
}
|
|
492
|
+
};
|
|
493
|
+
template <> struct std::hash<SVF::CxtProc>
|
|
494
|
+
{
|
|
495
|
+
size_t operator()(const SVF::CxtProc& cs) const
|
|
496
|
+
{
|
|
497
|
+
std::hash<SVF::FunObjVar*> h;
|
|
498
|
+
SVF::FunObjVar* fun = const_cast<SVF::FunObjVar*> (cs.getProc());
|
|
499
|
+
return h(fun);
|
|
500
|
+
}
|
|
501
|
+
};
|
|
502
|
+
#endif /* INCLUDE_UTIL_CXTSTMT_H_ */
|