svf-tools 1.0.284 → 1.0.285
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-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/Andersen_8h_source.html +5 -5
- package/SVF-doxygen/html/html/BasicTypes_8h_source.html +2 -2
- package/SVF-doxygen/html/html/CHG_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +1 -1
- package/SVF-doxygen/html/html/Conditions_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +4 -4
- package/SVF-doxygen/html/html/CxtStmt_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ExternalPAG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FileChecker_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +3 -3
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/LocationSet_8h_source.html +3 -3
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +5 -5
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +5 -5
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemModel_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/MemPartition_8h_source.html +11 -11
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +103 -34
- package/SVF-doxygen/html/html/MemRegion_8h.html +3 -3
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +97 -109
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +43 -42
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +46 -47
- package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +3 -3
- package/SVF-doxygen/html/html/PAGBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/PAG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +29 -29
- package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +7 -7
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp.html +2 -2
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +19 -21
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +81 -81
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SVFGBuilder_8h.html +2 -1
- package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +20 -19
- package/SVF-doxygen/html/html/SVFGEdge_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +3 -4
- package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +21 -21
- package/SVF-doxygen/html/html/SVFG_8cpp.html +1 -0
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +46 -45
- package/SVF-doxygen/html/html/SVFG_8h_source.html +12 -13
- package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFUtil_8cpp.html +9 -8
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +34 -33
- package/SVF-doxygen/html/html/SVFUtil_8h.html +14 -2
- package/SVF-doxygen/html/html/SVFUtil_8h_source.html +43 -36
- package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +2 -2
- package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/annotated.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +58 -59
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +19 -22
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +48 -49
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +9 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +60 -61
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +2 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +63 -64
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +2 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +59 -60
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +2 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +63 -64
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +5 -8
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +67 -68
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +2 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +58 -59
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +2 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType-members.html +64 -65
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType.html +4 -7
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +135 -138
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1BranchCondManager.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallCHI.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallMU.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +115 -115
- package/SVF-doxygen/html/html/classSVF_1_1CondPointsToSet.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtThreadStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG-members.html +63 -62
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +94 -92
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1EntryCHI.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ExternalPAG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FIObjPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +65 -66
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -5
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +51 -52
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +10 -13
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +62 -63
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +35 -38
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +74 -75
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +17 -20
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepValPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG-members.html +71 -70
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +88 -86
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG-members.html +71 -70
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +126 -124
- package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1LoadMU.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LocSymTableInfo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator-members.html +76 -75
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +515 -506
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MSSACHI.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MSSADEF.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MSSAMU.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHI.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MemRegion-members.html +9 -10
- package/SVF-doxygen/html/html/classSVF_1_1MemRegion.html +38 -56
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +132 -132
- package/SVF-doxygen/html/html/classSVF_1_1MemSSADF.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1MutableDFPTData.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MutablePTData.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ObjPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilder.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PAGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1PersistentIncDFPTData.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache-members.html +28 -27
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +144 -111
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetMU.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +62 -62
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +37 -37
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +49 -49
- package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +52 -53
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +6 -9
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1StoreCHI.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +51 -52
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +3 -6
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ValPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +82 -83
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +5 -8
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +7 -7
- package/SVF-doxygen/html/html/classes.html +2 -2
- package/SVF-doxygen/html/html/functions_a.html +10 -10
- package/SVF-doxygen/html/html/functions_c.html +11 -11
- package/SVF-doxygen/html/html/functions_e.html +4 -7
- package/SVF-doxygen/html/html/functions_f.html +17 -14
- package/SVF-doxygen/html/html/functions_func.html +10 -10
- package/SVF-doxygen/html/html/functions_func_c.html +5 -5
- package/SVF-doxygen/html/html/functions_func_g.html +33 -30
- package/SVF-doxygen/html/html/functions_func_h.html +1 -1
- package/SVF-doxygen/html/html/functions_func_i.html +1 -1
- package/SVF-doxygen/html/html/functions_func_m.html +2 -2
- package/SVF-doxygen/html/html/functions_func_o.html +3 -3
- package/SVF-doxygen/html/html/functions_func_p.html +1 -1
- package/SVF-doxygen/html/html/functions_func_s.html +1 -1
- package/SVF-doxygen/html/html/functions_g.html +30 -27
- package/SVF-doxygen/html/html/functions_h.html +1 -1
- package/SVF-doxygen/html/html/functions_i.html +7 -7
- package/SVF-doxygen/html/html/functions_l.html +4 -4
- package/SVF-doxygen/html/html/functions_m.html +2 -2
- package/SVF-doxygen/html/html/functions_o.html +7 -9
- package/SVF-doxygen/html/html/functions_p.html +17 -13
- package/SVF-doxygen/html/html/functions_r.html +8 -4
- package/SVF-doxygen/html/html/functions_s.html +7 -7
- package/SVF-doxygen/html/html/functions_t.html +3 -3
- package/SVF-doxygen/html/html/functions_type_c.html +1 -1
- package/SVF-doxygen/html/html/functions_type_e.html +0 -3
- package/SVF-doxygen/html/html/functions_type_f.html +4 -1
- package/SVF-doxygen/html/html/functions_type_l.html +1 -1
- package/SVF-doxygen/html/html/functions_type_p.html +3 -3
- package/SVF-doxygen/html/html/functions_type_s.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_c.html +5 -5
- package/SVF-doxygen/html/html/functions_vars_f.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_i.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_p.html +1 -1
- package/SVF-doxygen/html/html/globals_s.html +3 -3
- package/SVF-doxygen/html/html/hierarchy.html +2 -2
- package/SVF-doxygen/html/html/menudata.js +1 -0
- package/SVF-doxygen/html/html/namespaceSVF.html +3 -3
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +250 -122
- package/SVF-doxygen/html/html/namespacemembers_c.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_e.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_func.html +23 -10
- package/SVF-doxygen/html/html/namespacemembers_m.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_p.html +4 -1
- package/SVF-doxygen/html/html/namespacemembers_type_e.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_type_p.html +1 -1
- package/SVF-doxygen/html/html/search/all_1.js +10 -10
- package/SVF-doxygen/html/html/search/all_10.js +12 -11
- package/SVF-doxygen/html/html/search/all_12.js +2 -2
- package/SVF-doxygen/html/html/search/all_13.js +7 -7
- package/SVF-doxygen/html/html/search/all_14.js +4 -4
- package/SVF-doxygen/html/html/search/all_15.js +1 -1
- package/SVF-doxygen/html/html/search/all_3.js +12 -11
- package/SVF-doxygen/html/html/search/all_5.js +2 -1
- package/SVF-doxygen/html/html/search/all_6.js +4 -3
- package/SVF-doxygen/html/html/search/all_7.js +14 -13
- package/SVF-doxygen/html/html/search/all_8.js +1 -1
- package/SVF-doxygen/html/html/search/all_9.js +4 -4
- package/SVF-doxygen/html/html/search/all_c.js +2 -2
- package/SVF-doxygen/html/html/search/all_d.js +5 -4
- package/SVF-doxygen/html/html/search/all_e.js +2 -2
- package/SVF-doxygen/html/html/search/all_f.js +3 -3
- package/SVF-doxygen/html/html/search/classes_4.js +2 -1
- package/SVF-doxygen/html/html/search/functions_0.js +10 -10
- package/SVF-doxygen/html/html/search/functions_10.js +2 -2
- package/SVF-doxygen/html/html/search/functions_2.js +6 -5
- package/SVF-doxygen/html/html/search/functions_6.js +14 -13
- package/SVF-doxygen/html/html/search/functions_7.js +1 -1
- package/SVF-doxygen/html/html/search/functions_8.js +1 -1
- package/SVF-doxygen/html/html/search/functions_b.js +3 -2
- package/SVF-doxygen/html/html/search/functions_d.js +1 -1
- package/SVF-doxygen/html/html/search/functions_e.js +2 -1
- package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_2.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_4.js +2 -1
- package/SVF-doxygen/html/html/search/typedefs_5.js +2 -1
- package/SVF-doxygen/html/html/search/typedefs_b.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_f.js +3 -3
- package/SVF-doxygen/html/html/search/variables_10.js +1 -1
- package/SVF-doxygen/html/html/search/variables_14.js +2 -2
- package/SVF-doxygen/html/html/search/variables_15.js +1 -1
- package/SVF-doxygen/html/html/search/variables_3.js +5 -5
- package/SVF-doxygen/html/html/search/variables_6.js +3 -3
- package/SVF-doxygen/html/html/search/variables_9.js +1 -1
- package/SVF-doxygen/html/html/search/variables_d.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1MemRegion_1_1equalMemRegion.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1equalNodeBS-members.html +81 -0
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1equalNodeBS.html +134 -0
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1equalPointsTo.html +3 -3
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PAG_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
- package/include/Graphs/SVFG.h +4 -4
- package/include/Graphs/SVFGOPT.h +4 -4
- package/include/MSSA/MemPartition.h +10 -10
- package/include/MSSA/MemRegion.h +40 -64
- package/include/MSSA/MemSSA.h +1 -4
- package/include/MSSA/SVFGBuilder.h +1 -0
- package/include/MemoryModel/LocationSet.h +3 -3
- package/include/MemoryModel/PersistentPointsToCache.h +19 -8
- package/include/MemoryModel/PointerAnalysisImpl.h +3 -4
- package/include/Util/SVFUtil.h +44 -1
- package/lib/Graphs/SVFG.cpp +12 -12
- package/lib/Graphs/SVFGOPT.cpp +6 -6
- package/lib/MSSA/MemPartition.cpp +31 -31
- package/lib/MSSA/MemRegion.cpp +59 -35
- package/lib/MSSA/MemSSA.cpp +5 -0
- package/lib/MemoryModel/LocationSet.cpp +2 -2
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -4
- package/lib/Util/SVFUtil.cpp +3 -2
- package/package.json +1 -1
package/include/MSSA/MemRegion.h
CHANGED
|
@@ -30,10 +30,12 @@
|
|
|
30
30
|
#ifndef MEMORYREGION_H_
|
|
31
31
|
#define MEMORYREGION_H_
|
|
32
32
|
|
|
33
|
-
#include "
|
|
33
|
+
#include "Graphs/PAG.h"
|
|
34
34
|
#include "Graphs/PTACallGraph.h"
|
|
35
|
+
#include "Util/SCC.h"
|
|
35
36
|
#include "Util/WorkList.h"
|
|
36
37
|
#include "Graphs/ICFG.h"
|
|
38
|
+
#include "MemoryModel/PointerAnalysisImpl.h"
|
|
37
39
|
|
|
38
40
|
#include <set>
|
|
39
41
|
|
|
@@ -54,11 +56,11 @@ private:
|
|
|
54
56
|
/// region ID 0 is reserved
|
|
55
57
|
static Size_t totalMRNum;
|
|
56
58
|
MRID rid;
|
|
57
|
-
const
|
|
59
|
+
const NodeBS cptsSet;
|
|
58
60
|
|
|
59
61
|
public:
|
|
60
62
|
/// Constructor
|
|
61
|
-
MemRegion(const
|
|
63
|
+
MemRegion(const NodeBS& cp) :
|
|
62
64
|
rid(++totalMRNum), cptsSet(cp)
|
|
63
65
|
{
|
|
64
66
|
}
|
|
@@ -73,7 +75,7 @@ public:
|
|
|
73
75
|
return rid;
|
|
74
76
|
}
|
|
75
77
|
/// Return points-to
|
|
76
|
-
inline const
|
|
78
|
+
inline const NodeBS &getPointsTo() const
|
|
77
79
|
{
|
|
78
80
|
return cptsSet;
|
|
79
81
|
}
|
|
@@ -87,7 +89,7 @@ public:
|
|
|
87
89
|
{
|
|
88
90
|
std::string str;
|
|
89
91
|
str += "pts{";
|
|
90
|
-
for (
|
|
92
|
+
for (NodeBS::iterator ii = cptsSet.begin(), ie = cptsSet.end();
|
|
91
93
|
ii != ie; ii++)
|
|
92
94
|
{
|
|
93
95
|
char int2str[16];
|
|
@@ -106,17 +108,9 @@ public:
|
|
|
106
108
|
{
|
|
107
109
|
bool operator()(const MemRegion* lhs, const MemRegion* rhs) const
|
|
108
110
|
{
|
|
109
|
-
return SVFUtil::
|
|
111
|
+
return SVFUtil::cmpNodeBS(lhs->getPointsTo(), rhs->getPointsTo());
|
|
110
112
|
}
|
|
111
113
|
} equalMemRegion;
|
|
112
|
-
|
|
113
|
-
typedef struct equalPointsTo
|
|
114
|
-
{
|
|
115
|
-
bool operator()(const PointsTo& lhs, const PointsTo& rhs) const
|
|
116
|
-
{
|
|
117
|
-
return SVFUtil::cmpPts(lhs, rhs);
|
|
118
|
-
}
|
|
119
|
-
} equalPointsTo;
|
|
120
114
|
//@}
|
|
121
115
|
|
|
122
116
|
/// Return memory object number inside a region
|
|
@@ -141,9 +135,10 @@ public:
|
|
|
141
135
|
///Define mem region set
|
|
142
136
|
typedef OrderedSet<const MemRegion*, MemRegion::equalMemRegion> MRSet;
|
|
143
137
|
typedef Map<const PAGEdge*, const SVFFunction*> PAGEdgeToFunMap;
|
|
144
|
-
typedef OrderedSet<
|
|
145
|
-
typedef Map<const SVFFunction*,
|
|
146
|
-
typedef
|
|
138
|
+
typedef OrderedSet<NodeBS, SVFUtil::equalNodeBS> PointsToList;
|
|
139
|
+
typedef Map<const SVFFunction*, NodeBS> FunToPointsToMap;
|
|
140
|
+
typedef Map<const SVFFunction*, PointsToList> FunToPointsTosMap;
|
|
141
|
+
typedef OrderedMap<NodeBS, NodeBS, SVFUtil::equalNodeBS> PtsToRepPtsSetMap;
|
|
147
142
|
|
|
148
143
|
/// Map a function to its region set
|
|
149
144
|
typedef Map<const SVFFunction*, MRSet> FunToMRsMap;
|
|
@@ -157,9 +152,9 @@ public:
|
|
|
157
152
|
|
|
158
153
|
/// Map loads/stores/callsites to their cpts set
|
|
159
154
|
//@{
|
|
160
|
-
typedef Map<const LoadPE*,
|
|
161
|
-
typedef Map<const StorePE*,
|
|
162
|
-
typedef Map<const CallBlockNode*,
|
|
155
|
+
typedef Map<const LoadPE*, NodeBS> LoadsToPointsToMap;
|
|
156
|
+
typedef Map<const StorePE*, NodeBS> StoresToPointsToMap;
|
|
157
|
+
typedef Map<const CallBlockNode*, NodeBS> CallSiteToPointsToMap;
|
|
163
158
|
//@}
|
|
164
159
|
|
|
165
160
|
/// Maps Mod-Ref analysis
|
|
@@ -183,14 +178,14 @@ public:
|
|
|
183
178
|
}
|
|
184
179
|
|
|
185
180
|
/// Get superset cpts set
|
|
186
|
-
inline const
|
|
181
|
+
inline const NodeBS& getRepPointsTo(const NodeBS& cpts) const
|
|
187
182
|
{
|
|
188
183
|
PtsToRepPtsSetMap::const_iterator it = cptsToRepCPtsMap.find(cpts);
|
|
189
184
|
assert(it!=cptsToRepCPtsMap.end() && "can not find superset of cpts??");
|
|
190
185
|
return it->second;
|
|
191
186
|
}
|
|
192
187
|
/// Get a memory region according to cpts
|
|
193
|
-
const MemRegion* getMR(const
|
|
188
|
+
const MemRegion* getMR(const NodeBS& cpts) const;
|
|
194
189
|
|
|
195
190
|
private:
|
|
196
191
|
|
|
@@ -219,22 +214,22 @@ private:
|
|
|
219
214
|
CallSiteToPointsToMap callsiteToModPointsToMap;
|
|
220
215
|
|
|
221
216
|
/// Map a function to all of its conditional points-to sets
|
|
222
|
-
|
|
217
|
+
FunToPointsTosMap funToPointsToMap;
|
|
223
218
|
/// Map a PAGEdge to its fun
|
|
224
219
|
PAGEdgeToFunMap pagEdgeToFunMap;
|
|
225
220
|
|
|
226
221
|
/// Map a function to its indirect uses of memory objects
|
|
227
|
-
|
|
222
|
+
FunToPointsToMap funToRefsMap;
|
|
228
223
|
/// Map a function to its indirect defs of memory objects
|
|
229
|
-
|
|
224
|
+
FunToPointsToMap funToModsMap;
|
|
230
225
|
/// Map a callsite to its indirect uses of memory objects
|
|
231
|
-
|
|
226
|
+
CallSiteToPointsToMap csToRefsMap;
|
|
232
227
|
/// Map a callsite to its indirect defs of memory objects
|
|
233
|
-
|
|
228
|
+
CallSiteToPointsToMap csToModsMap;
|
|
234
229
|
/// Map a callsite to all its object might pass into its callees
|
|
235
|
-
|
|
230
|
+
CallSiteToPointsToMap csToCallSiteArgsPtsMap;
|
|
236
231
|
/// Map a callsite to all its object might return from its callees
|
|
237
|
-
|
|
232
|
+
CallSiteToPointsToMap csToCallSiteRetPtsMap;
|
|
238
233
|
|
|
239
234
|
/// Map a pointer to its cached points-to chain;
|
|
240
235
|
NodeToPTSSMap cachedPtsChainMap;
|
|
@@ -272,12 +267,7 @@ private:
|
|
|
272
267
|
void getCallGraphSCCRevTopoOrder(WorkList& worklist);
|
|
273
268
|
|
|
274
269
|
protected:
|
|
275
|
-
MRGenerator(BVDataPTAImpl* p, bool ptrOnly)
|
|
276
|
-
pta(p), ptrOnlyMSSA(ptrOnly)
|
|
277
|
-
{
|
|
278
|
-
callGraph = pta->getPTACallGraph();
|
|
279
|
-
callGraphSCC = new SCC(callGraph);
|
|
280
|
-
}
|
|
270
|
+
MRGenerator(BVDataPTAImpl* p, bool ptrOnly);
|
|
281
271
|
|
|
282
272
|
/// A set of All memory regions
|
|
283
273
|
MRSet memRegSet;
|
|
@@ -285,7 +275,7 @@ protected:
|
|
|
285
275
|
PtsToRepPtsSetMap cptsToRepCPtsMap;
|
|
286
276
|
|
|
287
277
|
/// Generate a memory region and put in into functions which use it
|
|
288
|
-
void createMR(const SVFFunction* fun, const
|
|
278
|
+
void createMR(const SVFFunction* fun, const NodeBS& cpts);
|
|
289
279
|
|
|
290
280
|
/// Collect all global variables for later escape analysis
|
|
291
281
|
void collectGlobals();
|
|
@@ -303,15 +293,15 @@ protected:
|
|
|
303
293
|
virtual void updateAliasMRs();
|
|
304
294
|
|
|
305
295
|
/// Given a condition pts, insert into cptsToRepCPtsMap for region generation
|
|
306
|
-
virtual void sortPointsTo(const
|
|
296
|
+
virtual void sortPointsTo(const NodeBS& cpts);
|
|
307
297
|
|
|
308
298
|
/// Whether a region is aliased with a conditional points-to
|
|
309
|
-
virtual inline bool isAliasedMR(const
|
|
299
|
+
virtual inline bool isAliasedMR(const NodeBS& cpts, const MemRegion* mr)
|
|
310
300
|
{
|
|
311
301
|
return mr->getPointsTo().intersects(cpts);
|
|
312
302
|
}
|
|
313
303
|
/// Get all aliased mem regions from function fun according to cpts
|
|
314
|
-
virtual inline void getAliasMemRegions(MRSet& aliasMRs, const
|
|
304
|
+
virtual inline void getAliasMemRegions(MRSet& aliasMRs, const NodeBS& cpts, const SVFFunction* fun)
|
|
315
305
|
{
|
|
316
306
|
for(MRSet::const_iterator it = funToMRsMap[fun].begin(), eit = funToMRsMap[fun].end(); it!=eit; ++it)
|
|
317
307
|
{
|
|
@@ -321,14 +311,14 @@ protected:
|
|
|
321
311
|
}
|
|
322
312
|
|
|
323
313
|
/// Get memory regions for a load statement according to cpts.
|
|
324
|
-
virtual inline void getMRsForLoad(MRSet& aliasMRs, const
|
|
314
|
+
virtual inline void getMRsForLoad(MRSet& aliasMRs, const NodeBS& cpts, const SVFFunction*)
|
|
325
315
|
{
|
|
326
316
|
const MemRegion* mr = getMR(cpts);
|
|
327
317
|
aliasMRs.insert(mr);
|
|
328
318
|
}
|
|
329
319
|
|
|
330
320
|
/// Get memory regions for call site ref according to cpts.
|
|
331
|
-
virtual inline void getMRsForCallSiteRef(MRSet& aliasMRs, const
|
|
321
|
+
virtual inline void getMRsForCallSiteRef(MRSet& aliasMRs, const NodeBS& cpts, const SVFFunction*)
|
|
332
322
|
{
|
|
333
323
|
const MemRegion* mr = getMR(cpts);
|
|
334
324
|
aliasMRs.insert(mr);
|
|
@@ -343,24 +333,24 @@ protected:
|
|
|
343
333
|
|
|
344
334
|
/// Add cpts to store/load
|
|
345
335
|
//@{
|
|
346
|
-
inline void addCPtsToStore(
|
|
336
|
+
inline void addCPtsToStore(NodeBS& cpts, const StorePE *st, const SVFFunction* fun)
|
|
347
337
|
{
|
|
348
338
|
storesToPointsToMap[st] = cpts;
|
|
349
339
|
funToPointsToMap[fun].insert(cpts);
|
|
350
340
|
addModSideEffectOfFunction(fun,cpts);
|
|
351
341
|
}
|
|
352
|
-
inline void addCPtsToLoad(
|
|
342
|
+
inline void addCPtsToLoad(NodeBS& cpts, const LoadPE *ld, const SVFFunction* fun)
|
|
353
343
|
{
|
|
354
344
|
loadsToPointsToMap[ld] = cpts;
|
|
355
345
|
funToPointsToMap[fun].insert(cpts);
|
|
356
346
|
addRefSideEffectOfFunction(fun,cpts);
|
|
357
347
|
}
|
|
358
|
-
inline void addCPtsToCallSiteRefs(
|
|
348
|
+
inline void addCPtsToCallSiteRefs(NodeBS& cpts, const CallBlockNode* cs)
|
|
359
349
|
{
|
|
360
350
|
callsiteToRefPointsToMap[cs] |= cpts;
|
|
361
351
|
funToPointsToMap[cs->getCaller()].insert(cpts);
|
|
362
352
|
}
|
|
363
|
-
inline void addCPtsToCallSiteMods(
|
|
353
|
+
inline void addCPtsToCallSiteMods(NodeBS& cpts, const CallBlockNode* cs)
|
|
364
354
|
{
|
|
365
355
|
callsiteToModPointsToMap[cs] |= cpts;
|
|
366
356
|
funToPointsToMap[cs->getCaller()].insert(cpts);
|
|
@@ -373,7 +363,7 @@ protected:
|
|
|
373
363
|
{
|
|
374
364
|
return funToPointsToMap[fun];
|
|
375
365
|
}
|
|
376
|
-
inline
|
|
366
|
+
inline FunToPointsTosMap& getFunToPointsToList()
|
|
377
367
|
{
|
|
378
368
|
return funToPointsToMap;
|
|
379
369
|
}
|
|
@@ -475,29 +465,15 @@ public:
|
|
|
475
465
|
}
|
|
476
466
|
//@}
|
|
477
467
|
/// Whether this instruction has PAG Edge
|
|
478
|
-
|
|
479
|
-
{
|
|
480
|
-
PAG* pag = pta->getPAG();
|
|
481
|
-
if (ptrOnlyMSSA)
|
|
482
|
-
return pag->hasPTAPAGEdgeList(pag->getICFG()->getBlockICFGNode(inst));
|
|
483
|
-
else
|
|
484
|
-
return pag->hasPAGEdgeList(pag->getICFG()->getBlockICFGNode(inst));
|
|
485
|
-
}
|
|
468
|
+
bool hasPAGEdgeList(const Instruction* inst);
|
|
486
469
|
/// Given an instruction, get all its the PAGEdge (statement) in sequence
|
|
487
|
-
|
|
488
|
-
{
|
|
489
|
-
PAG* pag = pta->getPAG();
|
|
490
|
-
if (ptrOnlyMSSA)
|
|
491
|
-
return pag->getInstPTAPAGEdgeList(pag->getICFG()->getBlockICFGNode(inst));
|
|
492
|
-
else
|
|
493
|
-
return pag->getInstPAGEdgeList(pag->getICFG()->getBlockICFGNode(inst));
|
|
494
|
-
}
|
|
470
|
+
PAGEdgeList& getPAGEdgesFromInst(const Instruction* inst);
|
|
495
471
|
|
|
496
472
|
/// getModRefInfo APIs
|
|
497
473
|
//@{
|
|
498
474
|
/// Collect mod ref for external callsite other than heap alloc external call
|
|
499
|
-
|
|
500
|
-
|
|
475
|
+
NodeBS getModInfoForCall(const CallBlockNode* cs);
|
|
476
|
+
NodeBS getRefInfoForCall(const CallBlockNode* cs);
|
|
501
477
|
ModRefInfo getModRefInfo(const CallBlockNode* cs);
|
|
502
478
|
ModRefInfo getModRefInfo(const CallBlockNode* cs, const Value* V);
|
|
503
479
|
ModRefInfo getModRefInfo(const CallBlockNode* cs1, const CallBlockNode* cs2);
|
package/include/MSSA/MemSSA.h
CHANGED
|
@@ -230,8 +230,8 @@ public:
|
|
|
230
230
|
/// Check relations of two location sets
|
|
231
231
|
static inline LSRelation checkRelation(const LocationSet& LHS, const LocationSet& RHS)
|
|
232
232
|
{
|
|
233
|
-
|
|
234
|
-
|
|
233
|
+
NodeBS lhsLocations = LHS.computeAllLocations();
|
|
234
|
+
NodeBS rhsLocations = RHS.computeAllLocations();
|
|
235
235
|
if (lhsLocations.intersects(rhsLocations))
|
|
236
236
|
{
|
|
237
237
|
if (lhsLocations == rhsLocations)
|
|
@@ -273,7 +273,7 @@ private:
|
|
|
273
273
|
bool increaseIfNotReachUpperBound(std::vector<NodeID>& indices, const ElemNumStridePairVec& pairVec) const;
|
|
274
274
|
|
|
275
275
|
/// Compute all possible locations according to offset and number-stride pairs.
|
|
276
|
-
|
|
276
|
+
NodeBS computeAllLocations() const;
|
|
277
277
|
|
|
278
278
|
/// Return greatest common divisor
|
|
279
279
|
inline unsigned gcd (unsigned n1, unsigned n2) const
|
|
@@ -37,10 +37,10 @@ public:
|
|
|
37
37
|
static PointsToID emptyPointsToId(void) { return 0; };
|
|
38
38
|
|
|
39
39
|
public:
|
|
40
|
-
PersistentPointsToCache(
|
|
40
|
+
PersistentPointsToCache(void) : idCounter(1)
|
|
41
41
|
{
|
|
42
|
-
idToPts.push_back(new Data(
|
|
43
|
-
ptsToId[
|
|
42
|
+
idToPts.push_back(new Data());
|
|
43
|
+
ptsToId[Data()] = emptyPointsToId();
|
|
44
44
|
|
|
45
45
|
initStats();
|
|
46
46
|
}
|
|
@@ -48,14 +48,13 @@ public:
|
|
|
48
48
|
/// Resets the cache removing everything except the emptyData it was initialised with.
|
|
49
49
|
void reset(void)
|
|
50
50
|
{
|
|
51
|
-
const Data *
|
|
52
|
-
for (const Data *d : idToPts) free(d);
|
|
51
|
+
for (const Data *d : idToPts) delete d;
|
|
53
52
|
idToPts.clear();
|
|
54
53
|
ptsToId.clear();
|
|
55
54
|
|
|
56
55
|
// Put the empty data back in.
|
|
57
|
-
ptsToId[
|
|
58
|
-
idToPts.push_back(
|
|
56
|
+
ptsToId[Data()] = emptyPointsToId();
|
|
57
|
+
idToPts.push_back(new Data());
|
|
59
58
|
|
|
60
59
|
unionCache.clear();
|
|
61
60
|
complementCache.clear();
|
|
@@ -305,6 +304,17 @@ public:
|
|
|
305
304
|
std::cout.flush();
|
|
306
305
|
}
|
|
307
306
|
|
|
307
|
+
/// Returns all points-to sets stored by this cache as keys to a map.
|
|
308
|
+
/// Values are all 1. We use the map to be more compatible with getAllPts
|
|
309
|
+
/// in the various PTDatas. Performance is a non-issue (for now) since this
|
|
310
|
+
/// is just used for evaluation's sake.
|
|
311
|
+
Map<Data, unsigned> getAllPts(void)
|
|
312
|
+
{
|
|
313
|
+
Map<Data, unsigned> allPts;
|
|
314
|
+
for (const Data *d : idToPts) allPts[*d] = 1;
|
|
315
|
+
return allPts;
|
|
316
|
+
}
|
|
317
|
+
|
|
308
318
|
// TODO: ref count API for garbage collection.
|
|
309
319
|
|
|
310
320
|
private:
|
|
@@ -378,7 +388,8 @@ private:
|
|
|
378
388
|
/// Reverse of idToPts.
|
|
379
389
|
/// Elements are only added through push_back, so the number of elements
|
|
380
390
|
/// stored is the size of the vector.
|
|
381
|
-
|
|
391
|
+
/// Not const so we can remap.
|
|
392
|
+
std::vector<Data *> idToPts;
|
|
382
393
|
/// Maps points-to sets to their corresponding ID.
|
|
383
394
|
PTSToIDMap ptsToId;
|
|
384
395
|
|
|
@@ -67,9 +67,6 @@ public:
|
|
|
67
67
|
Persistent,
|
|
68
68
|
};
|
|
69
69
|
|
|
70
|
-
// TODO: make this not static?
|
|
71
|
-
static PersistentPointsToCache<PointsTo> ptCache;
|
|
72
|
-
|
|
73
70
|
/// Constructor
|
|
74
71
|
BVDataPTAImpl(PAG* pag, PointerAnalysis::PTATY type, bool alias_check = true);
|
|
75
72
|
|
|
@@ -79,7 +76,7 @@ public:
|
|
|
79
76
|
destroy();
|
|
80
77
|
}
|
|
81
78
|
|
|
82
|
-
|
|
79
|
+
inline PersistentPointsToCache<PointsTo> &getPtCache(void)
|
|
83
80
|
{
|
|
84
81
|
return ptCache;
|
|
85
82
|
}
|
|
@@ -215,6 +212,8 @@ private:
|
|
|
215
212
|
/// Points-to data
|
|
216
213
|
PTDataTy* ptD;
|
|
217
214
|
|
|
215
|
+
PersistentPointsToCache<PointsTo> ptCache;
|
|
216
|
+
|
|
218
217
|
public:
|
|
219
218
|
/// Interface expose to users of our pointer analysis, given Location infos
|
|
220
219
|
virtual AliasResult alias(const MemoryLocation &LocA,
|
package/include/Util/SVFUtil.h
CHANGED
|
@@ -117,6 +117,24 @@ inline bool cmpPts (const PointsTo& lpts,const PointsTo& rpts)
|
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
+
inline bool cmpNodeBS(const NodeBS& lpts,const NodeBS& rpts)
|
|
121
|
+
{
|
|
122
|
+
if (lpts.count() != rpts.count())
|
|
123
|
+
return (lpts.count() < rpts.count());
|
|
124
|
+
else
|
|
125
|
+
{
|
|
126
|
+
NodeBS::iterator bit = lpts.begin(), eit = lpts.end();
|
|
127
|
+
NodeBS::iterator rbit = rpts.begin(), reit = rpts.end();
|
|
128
|
+
for (; bit != eit && rbit != reit; bit++, rbit++)
|
|
129
|
+
{
|
|
130
|
+
if (*bit != *rbit)
|
|
131
|
+
return (*bit < *rbit);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
120
138
|
typedef struct equalPointsTo
|
|
121
139
|
{
|
|
122
140
|
bool operator()(const PointsTo& lhs, const PointsTo& rhs) const
|
|
@@ -125,7 +143,22 @@ typedef struct equalPointsTo
|
|
|
125
143
|
}
|
|
126
144
|
} equalPointsTo;
|
|
127
145
|
|
|
128
|
-
typedef
|
|
146
|
+
typedef struct equalNodeBS
|
|
147
|
+
{
|
|
148
|
+
bool operator()(const NodeBS& lhs, const NodeBS& rhs) const
|
|
149
|
+
{
|
|
150
|
+
return SVFUtil::cmpNodeBS(lhs, rhs);
|
|
151
|
+
}
|
|
152
|
+
} equalNodeBS;
|
|
153
|
+
|
|
154
|
+
inline NodeBS ptsToNodeBS(const PointsTo &pts)
|
|
155
|
+
{
|
|
156
|
+
NodeBS nbs;
|
|
157
|
+
for (const NodeID o : pts) nbs.set(o);
|
|
158
|
+
return nbs;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
typedef OrderedSet<PointsTo, equalNodeBS> PointsToList;
|
|
129
162
|
void dumpPointsToList(const PointsToList& ptl);
|
|
130
163
|
|
|
131
164
|
inline bool isIntrinsicFun(const Function* func)
|
|
@@ -241,6 +274,16 @@ std::string getSourceLocOfFunction(const Function *F);
|
|
|
241
274
|
const std::string value2String(const Value* value);
|
|
242
275
|
//@}
|
|
243
276
|
|
|
277
|
+
/// Given a map mapping points-to sets to a count, adds from into to.
|
|
278
|
+
template <typename Data>
|
|
279
|
+
void mergePtsOccMaps(Map<Data, unsigned> &to, const Map<Data, unsigned> from)
|
|
280
|
+
{
|
|
281
|
+
for (const typename Map<Data, unsigned>::value_type &ptocc : from)
|
|
282
|
+
{
|
|
283
|
+
to[ptocc.first] += ptocc.second;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
244
287
|
/// Inserts an element into a Set/CondSet (with ::insert).
|
|
245
288
|
template <typename Key, typename KeySet>
|
|
246
289
|
inline void insertKey(const Key &key, KeySet &keySet)
|
package/lib/Graphs/SVFG.cpp
CHANGED
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
#include "Graphs/SVFGOPT.h"
|
|
34
34
|
#include "Graphs/SVFGStat.h"
|
|
35
35
|
#include "Graphs/ICFG.h"
|
|
36
|
+
#include "MemoryModel/PointerAnalysisImpl.h"
|
|
36
37
|
#include <fstream>
|
|
37
38
|
|
|
38
39
|
|
|
@@ -420,14 +421,13 @@ void SVFG::connectFromGlobalToProgEntry()
|
|
|
420
421
|
if (const StoreSVFGNode* store = SVFUtil::dyn_cast<StoreSVFGNode>(*storeIt))
|
|
421
422
|
{
|
|
422
423
|
/// connect this store to main function entry
|
|
423
|
-
const
|
|
424
|
-
store->getPAGDstNodeID());
|
|
424
|
+
const NodeBS& storePts = mssa->getPTA()->getPts(store->getPAGDstNodeID());
|
|
425
425
|
|
|
426
|
-
for (
|
|
426
|
+
for (FormalINSVFGNodeSet::iterator fiIt = formalIns.begin(), fiEit =
|
|
427
427
|
formalIns.end(); fiIt != fiEit; ++fiIt)
|
|
428
428
|
{
|
|
429
429
|
NodeID formalInID = *fiIt;
|
|
430
|
-
|
|
430
|
+
NodeBS formalInPts = ((FormalINSVFGNode*) getSVFGNode(formalInID))->getPointsTo();
|
|
431
431
|
|
|
432
432
|
formalInPts &= storePts;
|
|
433
433
|
if (formalInPts.empty())
|
|
@@ -443,7 +443,7 @@ void SVFG::connectFromGlobalToProgEntry()
|
|
|
443
443
|
/*
|
|
444
444
|
* Add def-use edges of a memory region between two statements
|
|
445
445
|
*/
|
|
446
|
-
SVFGEdge* SVFG::addIntraIndirectVFEdge(NodeID srcId, NodeID dstId, const
|
|
446
|
+
SVFGEdge* SVFG::addIntraIndirectVFEdge(NodeID srcId, NodeID dstId, const NodeBS& cpts)
|
|
447
447
|
{
|
|
448
448
|
SVFGNode* srcNode = getSVFGNode(srcId);
|
|
449
449
|
SVFGNode* dstNode = getSVFGNode(dstId);
|
|
@@ -465,7 +465,7 @@ SVFGEdge* SVFG::addIntraIndirectVFEdge(NodeID srcId, NodeID dstId, const PointsT
|
|
|
465
465
|
/*!
|
|
466
466
|
* Add def-use edges of a memory region between two may-happen-in-parallel statements for multithreaded program
|
|
467
467
|
*/
|
|
468
|
-
SVFGEdge* SVFG::addThreadMHPIndirectVFEdge(NodeID srcId, NodeID dstId, const
|
|
468
|
+
SVFGEdge* SVFG::addThreadMHPIndirectVFEdge(NodeID srcId, NodeID dstId, const NodeBS& cpts)
|
|
469
469
|
{
|
|
470
470
|
SVFGNode* srcNode = getSVFGNode(srcId);
|
|
471
471
|
SVFGNode* dstNode = getSVFGNode(dstId);
|
|
@@ -485,7 +485,7 @@ SVFGEdge* SVFG::addThreadMHPIndirectVFEdge(NodeID srcId, NodeID dstId, const Poi
|
|
|
485
485
|
/*
|
|
486
486
|
* Add def-use call edges of a memory region between two statements
|
|
487
487
|
*/
|
|
488
|
-
SVFGEdge* SVFG::addCallIndirectVFEdge(NodeID srcId, NodeID dstId, const
|
|
488
|
+
SVFGEdge* SVFG::addCallIndirectVFEdge(NodeID srcId, NodeID dstId, const NodeBS& cpts,CallSiteID csId)
|
|
489
489
|
{
|
|
490
490
|
SVFGNode* srcNode = getSVFGNode(srcId);
|
|
491
491
|
SVFGNode* dstNode = getSVFGNode(dstId);
|
|
@@ -505,7 +505,7 @@ SVFGEdge* SVFG::addCallIndirectVFEdge(NodeID srcId, NodeID dstId, const PointsTo
|
|
|
505
505
|
/*
|
|
506
506
|
* Add def-use return edges of a memory region between two statements
|
|
507
507
|
*/
|
|
508
|
-
SVFGEdge* SVFG::addRetIndirectVFEdge(NodeID srcId, NodeID dstId, const
|
|
508
|
+
SVFGEdge* SVFG::addRetIndirectVFEdge(NodeID srcId, NodeID dstId, const NodeBS& cpts,CallSiteID csId)
|
|
509
509
|
{
|
|
510
510
|
SVFGNode* srcNode = getSVFGNode(srcId);
|
|
511
511
|
SVFGNode* dstNode = getSVFGNode(dstId);
|
|
@@ -527,8 +527,8 @@ SVFGEdge* SVFG::addRetIndirectVFEdge(NodeID srcId, NodeID dstId, const PointsTo&
|
|
|
527
527
|
*/
|
|
528
528
|
SVFGEdge* SVFG::addInterIndirectVFCallEdge(const ActualINSVFGNode* src, const FormalINSVFGNode* dst,CallSiteID csId)
|
|
529
529
|
{
|
|
530
|
-
|
|
531
|
-
|
|
530
|
+
NodeBS cpts1 = src->getPointsTo();
|
|
531
|
+
NodeBS cpts2 = dst->getPointsTo();
|
|
532
532
|
if(cpts1.intersects(cpts2))
|
|
533
533
|
{
|
|
534
534
|
cpts1 &= cpts2;
|
|
@@ -543,8 +543,8 @@ SVFGEdge* SVFG::addInterIndirectVFCallEdge(const ActualINSVFGNode* src, const Fo
|
|
|
543
543
|
SVFGEdge* SVFG::addInterIndirectVFRetEdge(const FormalOUTSVFGNode* src, const ActualOUTSVFGNode* dst,CallSiteID csId)
|
|
544
544
|
{
|
|
545
545
|
|
|
546
|
-
|
|
547
|
-
|
|
546
|
+
NodeBS cpts1 = src->getPointsTo();
|
|
547
|
+
NodeBS cpts2 = dst->getPointsTo();
|
|
548
548
|
if(cpts1.intersects(cpts2))
|
|
549
549
|
{
|
|
550
550
|
cpts1 &= cpts2;
|
package/lib/Graphs/SVFGOPT.cpp
CHANGED
|
@@ -65,7 +65,7 @@ void SVFGOPT::buildSVFG()
|
|
|
65
65
|
/*!
|
|
66
66
|
*
|
|
67
67
|
*/
|
|
68
|
-
SVFGEdge* SVFGOPT::addCallIndirectSVFGEdge(NodeID srcId, NodeID dstId, CallSiteID csid, const
|
|
68
|
+
SVFGEdge* SVFGOPT::addCallIndirectSVFGEdge(NodeID srcId, NodeID dstId, CallSiteID csid, const NodeBS& cpts)
|
|
69
69
|
{
|
|
70
70
|
if (Options::ContextInsensitive)
|
|
71
71
|
return addIntraIndirectVFEdge(srcId, dstId, cpts);
|
|
@@ -76,7 +76,7 @@ SVFGEdge* SVFGOPT::addCallIndirectSVFGEdge(NodeID srcId, NodeID dstId, CallSiteI
|
|
|
76
76
|
/*!
|
|
77
77
|
*
|
|
78
78
|
*/
|
|
79
|
-
SVFGEdge* SVFGOPT::addRetIndirectSVFGEdge(NodeID srcId, NodeID dstId, CallSiteID csid, const
|
|
79
|
+
SVFGEdge* SVFGOPT::addRetIndirectSVFGEdge(NodeID srcId, NodeID dstId, CallSiteID csid, const NodeBS& cpts)
|
|
80
80
|
{
|
|
81
81
|
if (Options::ContextInsensitive)
|
|
82
82
|
return addIntraIndirectVFEdge(srcId, dstId, cpts);
|
|
@@ -207,7 +207,7 @@ void SVFGOPT::retargetEdgesOfAInFOut(SVFGNode* node)
|
|
|
207
207
|
assert(node->getInEdges().size() == 1 && "actual-in/formal-out can only have one incoming edge as its def size");
|
|
208
208
|
|
|
209
209
|
SVFGNode* def = nullptr;
|
|
210
|
-
|
|
210
|
+
NodeBS inPointsTo;
|
|
211
211
|
|
|
212
212
|
SVFGNode::const_iterator it = node->InEdgeBegin();
|
|
213
213
|
SVFGNode::const_iterator eit = node->InEdgeEnd();
|
|
@@ -227,7 +227,7 @@ void SVFGOPT::retargetEdgesOfAInFOut(SVFGNode* node)
|
|
|
227
227
|
for (; it != eit; ++it)
|
|
228
228
|
{
|
|
229
229
|
const IndirectSVFGEdge* outEdge = SVFUtil::cast<IndirectSVFGEdge>(*it);
|
|
230
|
-
|
|
230
|
+
NodeBS intersection = inPointsTo;
|
|
231
231
|
intersection &= outEdge->getPointsTo();
|
|
232
232
|
|
|
233
233
|
if (intersection.empty())
|
|
@@ -263,7 +263,7 @@ void SVFGOPT::retargetEdgesOfAOutFIn(SVFGNode* node)
|
|
|
263
263
|
{
|
|
264
264
|
const IndirectSVFGEdge* outEdge = SVFUtil::cast<IndirectSVFGEdge>(*outIt);
|
|
265
265
|
|
|
266
|
-
|
|
266
|
+
NodeBS intersection = inEdge->getPointsTo();
|
|
267
267
|
intersection &= outEdge->getPointsTo();
|
|
268
268
|
if (intersection.empty())
|
|
269
269
|
continue;
|
|
@@ -530,7 +530,7 @@ bool SVFGOPT::addNewSVFGEdge(NodeID srcId, NodeID dstId, const SVFGEdge* preEdge
|
|
|
530
530
|
const IndirectSVFGEdge* preIndEdge = SVFUtil::cast<IndirectSVFGEdge>(preEdge);
|
|
531
531
|
const IndirectSVFGEdge* succIndEdge = SVFUtil::cast<IndirectSVFGEdge>(succEdge);
|
|
532
532
|
|
|
533
|
-
|
|
533
|
+
NodeBS intersection = preIndEdge->getPointsTo();
|
|
534
534
|
intersection &= succIndEdge->getPointsTo();
|
|
535
535
|
|
|
536
536
|
if (intersection.empty())
|