svf-tools 1.0.320 → 1.0.324
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/AndersenSFR_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/Andersen_8h_source.html +2 -2
- package/SVF-doxygen/html/html/CHG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/ConsG_8h_source.html +15 -15
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +8 -8
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +4 -4
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +2 -2
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +7 -7
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +9 -9
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +24 -24
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +13 -13
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +13 -13
- package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +3 -3
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +17 -17
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +18 -18
- package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +42 -42
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +58 -58
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +153 -154
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +22 -22
- package/SVF-doxygen/html/html/SVFStatements_8h.html +11 -11
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +133 -132
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/SVFVariables_8h.html +9 -9
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +78 -78
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +17 -17
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +48 -48
- package/SVF-doxygen/html/html/VFG_8h_source.html +35 -35
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/annotated.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt-members.html +137 -0
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +500 -0
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +34 -34
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt-members.html +155 -0
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +756 -0
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +20 -19
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +33 -31
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode-members.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +20 -19
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +24 -22
- package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar-members.html +169 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +537 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar-members.html +169 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +547 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar-members.html +172 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +556 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt-members.html +75 -22
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +479 -93
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +46 -46
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +43 -43
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt-members.html +57 -21
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +253 -89
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +7 -7
- 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_1DDAVFSolver.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG-members.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +27 -27
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar-members.html +167 -0
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +531 -0
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar-members.html +165 -0
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +502 -0
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar-members.html +167 -0
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +577 -0
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +25 -25
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +23 -22
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepObjPN-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +61 -61
- package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt-members.html +57 -22
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +259 -118
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar-members.html +170 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +752 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GlobalBlockNode-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1GlobalBlockNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph-members.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +43 -43
- package/SVF-doxygen/html/html/classSVF_1_1InterBlockNode-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1InterBlockNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG-members.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +27 -27
- package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG-members.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +27 -27
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1LoadMU-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LoadMU.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt-members.html +57 -21
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +253 -89
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator-members.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +147 -147
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA-members.html +25 -25
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +102 -102
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt-members.html +24 -23
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +36 -34
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt-members.html +142 -0
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt.html +649 -0
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar-members.html +165 -0
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +644 -0
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt-members.html +74 -22
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +447 -98
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +53 -53
- package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode-members.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +20 -19
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +24 -22
- package/SVF-doxygen/html/html/classSVF_1_1RetPN-members.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +56 -56
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +58 -58
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +68 -68
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +36 -36
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +132 -133
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +730 -748
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +180 -180
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt-members.html +23 -22
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +57 -39
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar-members.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +82 -82
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1StoreCHI-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1StoreCHI.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt-members.html +57 -21
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +260 -89
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +23 -22
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +18 -16
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +23 -22
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +18 -16
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +28 -28
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt-members.html +147 -0
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +794 -0
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +42 -42
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +145 -145
- package/SVF-doxygen/html/html/classSVF_1_1ValVar-members.html +163 -0
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +521 -0
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN-members.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt-members.html +139 -0
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt.html +544 -0
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +3 -3
- package/SVF-doxygen/html/html/classes.html +18 -18
- package/SVF-doxygen/html/html/functions_a.html +55 -55
- package/SVF-doxygen/html/html/functions_b.html +2 -2
- package/SVF-doxygen/html/html/functions_c.html +52 -57
- package/SVF-doxygen/html/html/functions_d.html +4 -4
- package/SVF-doxygen/html/html/functions_f.html +5 -5
- package/SVF-doxygen/html/html/functions_func.html +54 -54
- package/SVF-doxygen/html/html/functions_func_b.html +2 -2
- package/SVF-doxygen/html/html/functions_func_c.html +30 -30
- package/SVF-doxygen/html/html/functions_func_d.html +4 -4
- package/SVF-doxygen/html/html/functions_func_f.html +2 -2
- package/SVF-doxygen/html/html/functions_func_g.html +107 -105
- package/SVF-doxygen/html/html/functions_func_h.html +6 -6
- package/SVF-doxygen/html/html/functions_func_l.html +3 -3
- package/SVF-doxygen/html/html/functions_func_n.html +2 -2
- package/SVF-doxygen/html/html/functions_func_o.html +15 -15
- package/SVF-doxygen/html/html/functions_func_p.html +2 -2
- package/SVF-doxygen/html/html/functions_func_s.html +4 -4
- package/SVF-doxygen/html/html/functions_func_t.html +20 -20
- package/SVF-doxygen/html/html/functions_func_u.html +2 -2
- package/SVF-doxygen/html/html/functions_func_v.html +5 -5
- package/SVF-doxygen/html/html/functions_g.html +123 -121
- package/SVF-doxygen/html/html/functions_h.html +6 -6
- package/SVF-doxygen/html/html/functions_i.html +15 -15
- package/SVF-doxygen/html/html/functions_k.html +9 -0
- package/SVF-doxygen/html/html/functions_l.html +11 -11
- package/SVF-doxygen/html/html/functions_m.html +1 -1
- package/SVF-doxygen/html/html/functions_n.html +2 -2
- package/SVF-doxygen/html/html/functions_o.html +32 -35
- package/SVF-doxygen/html/html/functions_p.html +34 -51
- package/SVF-doxygen/html/html/functions_r.html +1 -1
- package/SVF-doxygen/html/html/functions_s.html +32 -16
- package/SVF-doxygen/html/html/functions_t.html +24 -24
- package/SVF-doxygen/html/html/functions_type_c.html +1 -4
- package/SVF-doxygen/html/html/functions_type_f.html +2 -2
- package/SVF-doxygen/html/html/functions_type_g.html +2 -2
- package/SVF-doxygen/html/html/functions_type_i.html +3 -3
- package/SVF-doxygen/html/html/functions_type_k.html +3 -0
- package/SVF-doxygen/html/html/functions_type_l.html +3 -3
- package/SVF-doxygen/html/html/functions_type_p.html +3 -19
- package/SVF-doxygen/html/html/functions_type_s.html +19 -3
- package/SVF-doxygen/html/html/functions_type_v.html +1 -1
- package/SVF-doxygen/html/html/functions_u.html +2 -2
- package/SVF-doxygen/html/html/functions_v.html +10 -10
- package/SVF-doxygen/html/html/functions_vars_f.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_g.html +8 -8
- package/SVF-doxygen/html/html/functions_vars_i.html +9 -9
- package/SVF-doxygen/html/html/functions_vars_k.html +6 -0
- package/SVF-doxygen/html/html/functions_vars_l.html +2 -2
- package/SVF-doxygen/html/html/functions_vars_m.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_o.html +3 -4
- package/SVF-doxygen/html/html/functions_vars_p.html +4 -7
- package/SVF-doxygen/html/html/functions_w.html +5 -9
- package/SVF-doxygen/html/html/hierarchy.html +65 -65
- package/SVF-doxygen/html/html/namespaceSVF.html +24 -24
- package/SVF-doxygen/html/html/search/all_1.js +39 -39
- package/SVF-doxygen/html/html/search/all_10.js +12 -17
- package/SVF-doxygen/html/html/search/all_12.js +1 -1
- package/SVF-doxygen/html/html/search/all_13.js +15 -11
- package/SVF-doxygen/html/html/search/all_14.js +7 -7
- package/SVF-doxygen/html/html/search/all_15.js +1 -1
- package/SVF-doxygen/html/html/search/all_16.js +4 -4
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_2.js +1 -1
- package/SVF-doxygen/html/html/search/all_3.js +8 -9
- package/SVF-doxygen/html/html/search/all_4.js +2 -2
- package/SVF-doxygen/html/html/search/all_6.js +4 -4
- package/SVF-doxygen/html/html/search/all_7.js +54 -53
- package/SVF-doxygen/html/html/search/all_8.js +2 -2
- package/SVF-doxygen/html/html/search/all_9.js +4 -4
- package/SVF-doxygen/html/html/search/all_b.js +3 -0
- package/SVF-doxygen/html/html/search/all_c.js +7 -7
- package/SVF-doxygen/html/html/search/all_d.js +1 -1
- package/SVF-doxygen/html/html/search/all_e.js +4 -4
- package/SVF-doxygen/html/html/search/all_f.js +6 -6
- package/SVF-doxygen/html/html/search/classes_0.js +1 -1
- package/SVF-doxygen/html/html/search/classes_1.js +1 -1
- package/SVF-doxygen/html/html/search/classes_11.js +1 -1
- package/SVF-doxygen/html/html/search/classes_12.js +2 -2
- package/SVF-doxygen/html/html/search/classes_2.js +5 -5
- package/SVF-doxygen/html/html/search/classes_3.js +2 -2
- package/SVF-doxygen/html/html/search/classes_5.js +1 -1
- package/SVF-doxygen/html/html/search/classes_6.js +2 -2
- package/SVF-doxygen/html/html/search/classes_9.js +1 -1
- package/SVF-doxygen/html/html/search/classes_b.js +1 -1
- package/SVF-doxygen/html/html/search/classes_c.js +1 -1
- package/SVF-doxygen/html/html/search/classes_d.js +1 -1
- package/SVF-doxygen/html/html/search/classes_f.js +1 -1
- package/SVF-doxygen/html/html/search/functions_0.js +39 -39
- package/SVF-doxygen/html/html/search/functions_1.js +1 -1
- package/SVF-doxygen/html/html/search/functions_10.js +4 -4
- package/SVF-doxygen/html/html/search/functions_11.js +1 -1
- package/SVF-doxygen/html/html/search/functions_12.js +1 -1
- package/SVF-doxygen/html/html/search/functions_13.js +2 -2
- package/SVF-doxygen/html/html/search/functions_2.js +7 -7
- package/SVF-doxygen/html/html/search/functions_3.js +2 -2
- package/SVF-doxygen/html/html/search/functions_5.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +49 -48
- package/SVF-doxygen/html/html/search/functions_7.js +2 -2
- package/SVF-doxygen/html/html/search/functions_a.js +3 -3
- package/SVF-doxygen/html/html/search/functions_c.js +1 -1
- package/SVF-doxygen/html/html/search/functions_d.js +2 -2
- package/SVF-doxygen/html/html/search/functions_e.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_11.js +7 -3
- package/SVF-doxygen/html/html/search/typedefs_14.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_2.js +1 -2
- package/SVF-doxygen/html/html/search/typedefs_5.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_6.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_8.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_a.js +2 -1
- package/SVF-doxygen/html/html/search/typedefs_b.js +3 -3
- package/SVF-doxygen/html/html/search/typedefs_f.js +3 -7
- package/SVF-doxygen/html/html/search/variables_10.js +2 -3
- package/SVF-doxygen/html/html/search/variables_14.js +4 -4
- package/SVF-doxygen/html/html/search/variables_6.js +1 -1
- package/SVF-doxygen/html/html/search/variables_7.js +4 -4
- package/SVF-doxygen/html/html/search/variables_9.js +4 -4
- package/SVF-doxygen/html/html/search/variables_b.js +3 -1
- package/SVF-doxygen/html/html/search/variables_c.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/search/variables_f.js +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +4 -4
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_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/DDA/ContextDDA.h +1 -1
- package/include/DDA/FlowDDA.h +1 -1
- package/include/Graphs/CHG.h +2 -2
- package/include/Graphs/ConsG.h +10 -10
- package/include/Graphs/ICFGNode.h +4 -4
- package/include/Graphs/IRGraph.h +7 -7
- package/include/Graphs/VFG.h +13 -13
- package/include/Graphs/VFGNode.h +6 -6
- package/include/MSSA/MSSAMuChi.h +6 -6
- package/include/MSSA/MemRegion.h +11 -11
- package/include/MSSA/MemSSA.h +11 -11
- package/include/MemoryModel/PointerAnalysis.h +9 -9
- package/include/MemoryModel/PointerAnalysisImpl.h +4 -4
- package/include/MemoryModel/SVFIR.h +82 -83
- package/include/MemoryModel/SVFStatements.h +97 -92
- package/include/MemoryModel/SVFVariables.h +71 -71
- package/include/SVF-FE/SVFIRBuilder.h +24 -24
- package/include/Util/IRAnnotator.h +1 -1
- package/include/Util/TypeBasedHeapCloning.h +2 -2
- package/include/WPA/Andersen.h +1 -1
- package/include/WPA/FlowSensitiveTBHC.h +1 -1
- package/lib/DDA/ContextDDA.cpp +6 -6
- package/lib/DDA/DDAClient.cpp +6 -6
- package/lib/DDA/DDAStat.cpp +2 -2
- package/lib/DDA/FlowDDA.cpp +4 -4
- package/lib/Graphs/ConsG.cpp +34 -34
- package/lib/Graphs/ICFG.cpp +4 -4
- package/lib/Graphs/IRGraph.cpp +21 -21
- package/lib/Graphs/OfflineConsG.cpp +8 -8
- package/lib/Graphs/SVFG.cpp +14 -14
- package/lib/Graphs/ThreadCallGraph.cpp +2 -2
- package/lib/Graphs/VFG.cpp +52 -52
- package/lib/MSSA/MemRegion.cpp +23 -23
- package/lib/MSSA/MemSSA.cpp +15 -15
- package/lib/MTA/MTAAnnotator.cpp +5 -5
- package/lib/MemoryModel/PAGBuilderFromFile.cpp +13 -13
- package/lib/MemoryModel/PointerAnalysis.cpp +9 -9
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +14 -14
- package/lib/MemoryModel/SVFIR.cpp +95 -95
- package/lib/MemoryModel/SVFStatements.cpp +24 -24
- package/lib/MemoryModel/SVFVariables.cpp +19 -19
- package/lib/SABER/LeakChecker.cpp +2 -2
- package/lib/SABER/SaberSVFGBuilder.cpp +5 -5
- package/lib/SVF-FE/Graph2Json.cpp +3 -3
- package/lib/SVF-FE/SVFIRBuilder.cpp +22 -22
- package/lib/Util/PTAStat.cpp +8 -8
- package/lib/Util/TypeBasedHeapCloning.cpp +22 -22
- package/lib/WPA/Andersen.cpp +13 -13
- package/lib/WPA/AndersenSFR.cpp +2 -2
- package/lib/WPA/AndersenStat.cpp +6 -6
- package/lib/WPA/FlowSensitive.cpp +8 -8
- package/lib/WPA/FlowSensitiveStat.cpp +4 -4
- package/lib/WPA/FlowSensitiveTBHC.cpp +9 -9
- package/lib/WPA/VersionedFlowSensitive.cpp +2 -2
- package/lib/WPA/VersionedFlowSensitiveStat.cpp +1 -1
- package/package.json +1 -1
|
@@ -84,9 +84,9 @@ void BVDataPTAImpl::expandFIObjs(const PointsTo& pts, PointsTo& expandedPts)
|
|
|
84
84
|
expandedPts = pts;;
|
|
85
85
|
for(PointsTo::iterator pit = pts.begin(), epit = pts.end(); pit!=epit; ++pit)
|
|
86
86
|
{
|
|
87
|
-
if (pag->
|
|
87
|
+
if (pag->getBaseObjVar(*pit) == *pit || isFieldInsensitive(*pit))
|
|
88
88
|
{
|
|
89
|
-
expandedPts |= pag->
|
|
89
|
+
expandedPts |= pag->getAllFieldsObjVars(*pit);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
}
|
|
@@ -96,9 +96,9 @@ void BVDataPTAImpl::expandFIObjs(const NodeBS& pts, NodeBS& expandedPts)
|
|
|
96
96
|
expandedPts = pts;
|
|
97
97
|
for (const NodeID o : pts)
|
|
98
98
|
{
|
|
99
|
-
if (pag->
|
|
99
|
+
if (pag->getBaseObjVar(o) == o || isFieldInsensitive(o))
|
|
100
100
|
{
|
|
101
|
-
expandedPts |= pag->
|
|
101
|
+
expandedPts |= pag->getAllFieldsObjVars(o);
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
}
|
|
@@ -153,7 +153,7 @@ void BVDataPTAImpl::writeToFile(const string& filename)
|
|
|
153
153
|
if (GepObjPN *gepObjPN = SVFUtil::dyn_cast<GepObjPN>(pagNode))
|
|
154
154
|
{
|
|
155
155
|
F.os() << it->first << " ";
|
|
156
|
-
F.os() << pag->
|
|
156
|
+
F.os() << pag->getBaseObjVar(it->first) << " ";
|
|
157
157
|
F.os() << gepObjPN->getLocationSet().getOffset() << "\n";
|
|
158
158
|
}
|
|
159
159
|
}
|
|
@@ -164,8 +164,8 @@ void BVDataPTAImpl::writeToFile(const string& filename)
|
|
|
164
164
|
for (auto it = pag->begin(), ie = pag->end(); it != ie; ++it)
|
|
165
165
|
{
|
|
166
166
|
PAGNode* pagNode = it->second;
|
|
167
|
-
if (!isa<
|
|
168
|
-
NodeID n = pag->
|
|
167
|
+
if (!isa<ObjVar>(pagNode)) continue;
|
|
168
|
+
NodeID n = pag->getBaseObjVar(it->first);
|
|
169
169
|
if (NodeIDs.test(n)) continue;
|
|
170
170
|
F.os() << n << " ";
|
|
171
171
|
F.os() << isFieldInsensitive(n) << "\n";
|
|
@@ -265,7 +265,7 @@ bool BVDataPTAImpl::readFromFile(const string& filename)
|
|
|
265
265
|
size_t offset;
|
|
266
266
|
ss >> id >> base >> offset;
|
|
267
267
|
|
|
268
|
-
NodeID n = pag->
|
|
268
|
+
NodeID n = pag->getGepObjVar(pag->getObject(base), LocationSet(offset));
|
|
269
269
|
assert(id == n && "Error adding GepObjNode into SVFIR!");
|
|
270
270
|
|
|
271
271
|
getline(F, line);
|
|
@@ -353,7 +353,7 @@ void BVDataPTAImpl::dumpTopLevelPtsTo()
|
|
|
353
353
|
|
|
354
354
|
|
|
355
355
|
/*!
|
|
356
|
-
* Dump all points-to including top-level (
|
|
356
|
+
* Dump all points-to including top-level (ValVar) and address-taken (ObjVar) variables
|
|
357
357
|
*/
|
|
358
358
|
void BVDataPTAImpl::dumpAllPts()
|
|
359
359
|
{
|
|
@@ -401,7 +401,7 @@ void BVDataPTAImpl::onTheFlyCallGraphSolve(const CallSiteToFunPtrMap& callsites,
|
|
|
401
401
|
*/
|
|
402
402
|
void BVDataPTAImpl::normalizePointsTo() {
|
|
403
403
|
SVFIR::MemObjToFieldsMap &memToFieldsMap = pag->getMemToFieldsMap();
|
|
404
|
-
SVFIR::NodeLocationSetMap &
|
|
404
|
+
SVFIR::NodeLocationSetMap &GepObjVarMap = pag->getGepObjNodeMap();
|
|
405
405
|
|
|
406
406
|
// collect each gep node whose base node has been set as field-insensitive
|
|
407
407
|
NodeBS dropNodes;
|
|
@@ -427,19 +427,19 @@ void BVDataPTAImpl::normalizePointsTo() {
|
|
|
427
427
|
for (NodeID obj : tmpPts) {
|
|
428
428
|
if (!dropNodes.test(obj))
|
|
429
429
|
continue;
|
|
430
|
-
NodeID baseObj = pag->
|
|
430
|
+
NodeID baseObj = pag->getBaseObjVar(obj);
|
|
431
431
|
clearPts(n, obj);
|
|
432
432
|
addPts(n, baseObj);
|
|
433
433
|
}
|
|
434
434
|
}
|
|
435
435
|
|
|
436
|
-
// clear
|
|
436
|
+
// clear GepObjVarMap and memToFieldsMap for redundant gepnodes
|
|
437
437
|
// and remove those nodes from pag
|
|
438
438
|
for (NodeID n: dropNodes) {
|
|
439
|
-
NodeID base = pag->
|
|
439
|
+
NodeID base = pag->getBaseObjVar(n);
|
|
440
440
|
GepObjPN *gepNode = SVFUtil::dyn_cast<GepObjPN>(pag->getGNode(n));
|
|
441
441
|
const LocationSet ls = gepNode->getLocationSet();
|
|
442
|
-
|
|
442
|
+
GepObjVarMap.erase(std::make_pair(base, ls));
|
|
443
443
|
memToFieldsMap[base].reset(n);
|
|
444
444
|
|
|
445
445
|
pag->removeGNode(gepNode);
|
|
@@ -48,15 +48,15 @@ SVFIR::SVFIR(bool buildFromFile) : IRGraph(buildFromFile)
|
|
|
48
48
|
/*!
|
|
49
49
|
* Add Address edge
|
|
50
50
|
*/
|
|
51
|
-
|
|
51
|
+
AddrStmt* SVFIR::addAddrStmt(NodeID src, NodeID dst)
|
|
52
52
|
{
|
|
53
53
|
SVFVar* srcNode = getGNode(src);
|
|
54
54
|
SVFVar* dstNode = getGNode(dst);
|
|
55
55
|
if(SVFStmt* edge = hasNonlabeledEdge(srcNode,dstNode, SVFStmt::Addr))
|
|
56
|
-
return SVFUtil::cast<
|
|
56
|
+
return SVFUtil::cast<AddrStmt>(edge);
|
|
57
57
|
else
|
|
58
58
|
{
|
|
59
|
-
|
|
59
|
+
AddrStmt* addrPE = new AddrStmt(srcNode, dstNode);
|
|
60
60
|
addToStmt2TypeMap(addrPE);
|
|
61
61
|
addEdge(srcNode,dstNode, addrPE);
|
|
62
62
|
return addrPE;
|
|
@@ -66,15 +66,15 @@ AddrPE* SVFIR::addAddrPE(NodeID src, NodeID dst)
|
|
|
66
66
|
/*!
|
|
67
67
|
* Add Copy edge
|
|
68
68
|
*/
|
|
69
|
-
|
|
69
|
+
CopyStmt* SVFIR::addCopyStmt(NodeID src, NodeID dst)
|
|
70
70
|
{
|
|
71
71
|
SVFVar* srcNode = getGNode(src);
|
|
72
72
|
SVFVar* dstNode = getGNode(dst);
|
|
73
73
|
if(SVFStmt* edge = hasNonlabeledEdge(srcNode,dstNode, SVFStmt::Copy))
|
|
74
|
-
return SVFUtil::cast<
|
|
74
|
+
return SVFUtil::cast<CopyStmt>(edge);
|
|
75
75
|
else
|
|
76
76
|
{
|
|
77
|
-
|
|
77
|
+
CopyStmt* copyPE = new CopyStmt(srcNode, dstNode);
|
|
78
78
|
addToStmt2TypeMap(copyPE);
|
|
79
79
|
addEdge(srcNode,dstNode, copyPE);
|
|
80
80
|
return copyPE;
|
|
@@ -84,13 +84,13 @@ CopyPE* SVFIR::addCopyPE(NodeID src, NodeID dst)
|
|
|
84
84
|
/*!
|
|
85
85
|
* Add Phi statement
|
|
86
86
|
*/
|
|
87
|
-
|
|
87
|
+
PhiStmt* SVFIR::addPhiStmt(NodeID res, NodeID opnd)
|
|
88
88
|
{
|
|
89
89
|
SVFVar* opNode = getGNode(opnd);
|
|
90
90
|
SVFVar* resNode = getGNode(res);
|
|
91
91
|
PHINodeMap::iterator it = phiNodeMap.find(resNode);
|
|
92
92
|
if(it == phiNodeMap.end()){
|
|
93
|
-
|
|
93
|
+
PhiStmt* phi = new PhiStmt(resNode, {opNode});
|
|
94
94
|
addToStmt2TypeMap(phi);
|
|
95
95
|
addEdge(opNode, resNode, phi);
|
|
96
96
|
phiNodeMap[resNode] = phi;
|
|
@@ -105,17 +105,17 @@ PhiPE* SVFIR::addPhiNode(NodeID res, NodeID opnd)
|
|
|
105
105
|
/*!
|
|
106
106
|
* Add Compare edge
|
|
107
107
|
*/
|
|
108
|
-
|
|
108
|
+
CmpStmt* SVFIR::addCmpStmt(NodeID op1, NodeID op2, NodeID dst, u32_t predicate)
|
|
109
109
|
{
|
|
110
110
|
SVFVar* op1Node = getGNode(op1);
|
|
111
111
|
SVFVar* op2Node = getGNode(op2);
|
|
112
112
|
SVFVar* dstNode = getGNode(dst);
|
|
113
113
|
if(SVFStmt* edge = hasLabeledEdge(op1Node, dstNode, SVFStmt::Cmp, op2Node))
|
|
114
|
-
return SVFUtil::cast<
|
|
114
|
+
return SVFUtil::cast<CmpStmt>(edge);
|
|
115
115
|
else
|
|
116
116
|
{
|
|
117
117
|
std::vector<SVFVar*> opnds = {op1Node, op2Node};
|
|
118
|
-
|
|
118
|
+
CmpStmt* cmp = new CmpStmt(dstNode, opnds, predicate);
|
|
119
119
|
addToStmt2TypeMap(cmp);
|
|
120
120
|
addEdge(op1Node, dstNode, cmp);
|
|
121
121
|
return cmp;
|
|
@@ -126,17 +126,17 @@ CmpPE* SVFIR::addCmpPE(NodeID op1, NodeID op2, NodeID dst, u32_t opcode)
|
|
|
126
126
|
/*!
|
|
127
127
|
* Add Compare edge
|
|
128
128
|
*/
|
|
129
|
-
|
|
129
|
+
BinaryOPStmt* SVFIR::addBinaryOPStmt(NodeID op1, NodeID op2, NodeID dst, u32_t opcode)
|
|
130
130
|
{
|
|
131
131
|
SVFVar* op1Node = getGNode(op1);
|
|
132
132
|
SVFVar* op2Node = getGNode(op2);
|
|
133
133
|
SVFVar* dstNode = getGNode(dst);
|
|
134
134
|
if(SVFStmt* edge = hasLabeledEdge(op1Node, dstNode, SVFStmt::BinaryOp, op2Node))
|
|
135
|
-
return SVFUtil::cast<
|
|
135
|
+
return SVFUtil::cast<BinaryOPStmt>(edge);
|
|
136
136
|
else
|
|
137
137
|
{
|
|
138
138
|
std::vector<SVFVar*> opnds = {op1Node, op2Node};
|
|
139
|
-
|
|
139
|
+
BinaryOPStmt* binaryOP = new BinaryOPStmt(dstNode, opnds, opcode);
|
|
140
140
|
addToStmt2TypeMap(binaryOP);
|
|
141
141
|
addEdge(op1Node,dstNode, binaryOP);
|
|
142
142
|
return binaryOP;
|
|
@@ -146,15 +146,15 @@ BinaryOPPE* SVFIR::addBinaryOPPE(NodeID op1, NodeID op2, NodeID dst, u32_t opcod
|
|
|
146
146
|
/*!
|
|
147
147
|
* Add Unary edge
|
|
148
148
|
*/
|
|
149
|
-
|
|
149
|
+
UnaryOPStmt* SVFIR::addUnaryOPStmt(NodeID src, NodeID dst, u32_t opcode)
|
|
150
150
|
{
|
|
151
151
|
SVFVar* srcNode = getGNode(src);
|
|
152
152
|
SVFVar* dstNode = getGNode(dst);
|
|
153
153
|
if(SVFStmt* edge = hasNonlabeledEdge(srcNode,dstNode, SVFStmt::UnaryOp))
|
|
154
|
-
return SVFUtil::cast<
|
|
154
|
+
return SVFUtil::cast<UnaryOPStmt>(edge);
|
|
155
155
|
else
|
|
156
156
|
{
|
|
157
|
-
|
|
157
|
+
UnaryOPStmt* unaryOP = new UnaryOPStmt(srcNode, dstNode, opcode);
|
|
158
158
|
addToStmt2TypeMap(unaryOP);
|
|
159
159
|
addEdge(srcNode,dstNode, unaryOP);
|
|
160
160
|
return unaryOP;
|
|
@@ -182,15 +182,15 @@ BranchStmt* SVFIR::addBranchStmt(NodeID br, NodeID cond, std::vector<const ICFGN
|
|
|
182
182
|
/*!
|
|
183
183
|
* Add Load edge
|
|
184
184
|
*/
|
|
185
|
-
|
|
185
|
+
LoadStmt* SVFIR::addLoadStmt(NodeID src, NodeID dst)
|
|
186
186
|
{
|
|
187
187
|
SVFVar* srcNode = getGNode(src);
|
|
188
188
|
SVFVar* dstNode = getGNode(dst);
|
|
189
189
|
if(SVFStmt* edge = hasNonlabeledEdge(srcNode,dstNode, SVFStmt::Load))
|
|
190
|
-
return SVFUtil::cast<
|
|
190
|
+
return SVFUtil::cast<LoadStmt>(edge);
|
|
191
191
|
else
|
|
192
192
|
{
|
|
193
|
-
|
|
193
|
+
LoadStmt* loadPE = new LoadStmt(srcNode, dstNode);
|
|
194
194
|
addToStmt2TypeMap(loadPE);
|
|
195
195
|
addEdge(srcNode,dstNode, loadPE);
|
|
196
196
|
return loadPE;
|
|
@@ -201,15 +201,15 @@ LoadPE* SVFIR::addLoadPE(NodeID src, NodeID dst)
|
|
|
201
201
|
* Add Store edge
|
|
202
202
|
* Note that two store instructions may share the same Store SVFStmt
|
|
203
203
|
*/
|
|
204
|
-
|
|
204
|
+
StoreStmt* SVFIR::addStoreStmt(NodeID src, NodeID dst, const IntraBlockNode* curVal)
|
|
205
205
|
{
|
|
206
206
|
SVFVar* srcNode = getGNode(src);
|
|
207
207
|
SVFVar* dstNode = getGNode(dst);
|
|
208
208
|
if(SVFStmt* edge = hasLabeledEdge(srcNode,dstNode, SVFStmt::Store, curVal))
|
|
209
|
-
return SVFUtil::cast<
|
|
209
|
+
return SVFUtil::cast<StoreStmt>(edge);
|
|
210
210
|
else
|
|
211
211
|
{
|
|
212
|
-
|
|
212
|
+
StoreStmt* storePE = new StoreStmt(srcNode, dstNode, curVal);
|
|
213
213
|
addToStmt2TypeMap(storePE);
|
|
214
214
|
addEdge(srcNode,dstNode, storePE);
|
|
215
215
|
return storePE;
|
|
@@ -255,12 +255,12 @@ RetPE* SVFIR::addRetPE(NodeID src, NodeID dst, const CallBlockNode* cs)
|
|
|
255
255
|
/*!
|
|
256
256
|
* Add blackhole/constant edge
|
|
257
257
|
*/
|
|
258
|
-
SVFStmt* SVFIR::
|
|
258
|
+
SVFStmt* SVFIR::addBlackHoleAddrStmt(NodeID node)
|
|
259
259
|
{
|
|
260
260
|
if(Options::HandBlackHole)
|
|
261
|
-
return pag->
|
|
261
|
+
return pag->addAddrStmt(pag->getBlackHoleNode(), node);
|
|
262
262
|
else
|
|
263
|
-
return pag->
|
|
263
|
+
return pag->addCopyStmt(pag->getNullPtr(), node);
|
|
264
264
|
}
|
|
265
265
|
|
|
266
266
|
/*!
|
|
@@ -305,35 +305,35 @@ TDJoinPE* SVFIR::addThreadJoinPE(NodeID src, NodeID dst, const CallBlockNode* cs
|
|
|
305
305
|
* Find the base node id of src and connect base node to dst node
|
|
306
306
|
* Create gep offset: (offset + baseOff <nested struct gep size>)
|
|
307
307
|
*/
|
|
308
|
-
|
|
308
|
+
GepStmt* SVFIR::addGepStmt(NodeID src, NodeID dst, const LocationSet& ls, bool constGep)
|
|
309
309
|
{
|
|
310
310
|
|
|
311
311
|
SVFVar* node = getGNode(src);
|
|
312
312
|
if (!constGep || node->hasIncomingVariantGepEdge())
|
|
313
313
|
{
|
|
314
314
|
/// Since the offset from base to src is variant,
|
|
315
|
-
/// the new gep edge being created is also a
|
|
316
|
-
return
|
|
315
|
+
/// the new gep edge being created is also a VariantGepStmt edge.
|
|
316
|
+
return addVariantGepStmt(src, dst);
|
|
317
317
|
}
|
|
318
318
|
else
|
|
319
319
|
{
|
|
320
|
-
return
|
|
320
|
+
return addNormalGepStmt(src, dst, ls);
|
|
321
321
|
}
|
|
322
322
|
}
|
|
323
323
|
|
|
324
324
|
/*!
|
|
325
325
|
* Add normal (Gep) edge
|
|
326
326
|
*/
|
|
327
|
-
|
|
327
|
+
NormalGepStmt* SVFIR::addNormalGepStmt(NodeID src, NodeID dst, const LocationSet& ls)
|
|
328
328
|
{
|
|
329
329
|
const LocationSet& baseLS = getLocationSetFromBaseNode(src);
|
|
330
|
-
SVFVar* baseNode = getGNode(
|
|
330
|
+
SVFVar* baseNode = getGNode(getBaseValVar(src));
|
|
331
331
|
SVFVar* dstNode = getGNode(dst);
|
|
332
332
|
if(SVFStmt* edge = hasNonlabeledEdge(baseNode, dstNode, SVFStmt::NormalGep))
|
|
333
|
-
return SVFUtil::cast<
|
|
333
|
+
return SVFUtil::cast<NormalGepStmt>(edge);
|
|
334
334
|
else
|
|
335
335
|
{
|
|
336
|
-
|
|
336
|
+
NormalGepStmt* gepPE = new NormalGepStmt(baseNode, dstNode, ls+baseLS);
|
|
337
337
|
addToStmt2TypeMap(gepPE);
|
|
338
338
|
addEdge(baseNode, dstNode, gepPE);
|
|
339
339
|
return gepPE;
|
|
@@ -344,16 +344,16 @@ NormalGepPE* SVFIR::addNormalGepPE(NodeID src, NodeID dst, const LocationSet& ls
|
|
|
344
344
|
* Add variant(Gep) edge
|
|
345
345
|
* Find the base node id of src and connect base node to dst node
|
|
346
346
|
*/
|
|
347
|
-
|
|
347
|
+
VariantGepStmt* SVFIR::addVariantGepStmt(NodeID src, NodeID dst)
|
|
348
348
|
{
|
|
349
349
|
|
|
350
|
-
SVFVar* baseNode = getGNode(
|
|
350
|
+
SVFVar* baseNode = getGNode(getBaseValVar(src));
|
|
351
351
|
SVFVar* dstNode = getGNode(dst);
|
|
352
352
|
if(SVFStmt* edge = hasNonlabeledEdge(baseNode, dstNode, SVFStmt::VariantGep))
|
|
353
|
-
return SVFUtil::cast<
|
|
353
|
+
return SVFUtil::cast<VariantGepStmt>(edge);
|
|
354
354
|
else
|
|
355
355
|
{
|
|
356
|
-
|
|
356
|
+
VariantGepStmt* gepPE = new VariantGepStmt(baseNode, dstNode);
|
|
357
357
|
addToStmt2TypeMap(gepPE);
|
|
358
358
|
addEdge(baseNode, dstNode, gepPE);
|
|
359
359
|
return gepPE;
|
|
@@ -363,32 +363,32 @@ VariantGepPE* SVFIR::addVariantGepPE(NodeID src, NodeID dst)
|
|
|
363
363
|
|
|
364
364
|
|
|
365
365
|
/*!
|
|
366
|
-
* Add a temp field value node, this method can only invoked by
|
|
367
|
-
* due to constaint expression, curInst is used to distinguish different instructions (e.g., memorycpy) when creating
|
|
366
|
+
* Add a temp field value node, this method can only invoked by getGepValVar
|
|
367
|
+
* due to constaint expression, curInst is used to distinguish different instructions (e.g., memorycpy) when creating GepValVar.
|
|
368
368
|
*/
|
|
369
369
|
NodeID SVFIR::addGepValNode(const Value* curInst,const Value* gepVal, const LocationSet& ls, NodeID i, const Type *type, u32_t fieldidx)
|
|
370
370
|
{
|
|
371
|
-
NodeID base =
|
|
371
|
+
NodeID base = getBaseValVar(getValueNode(gepVal));
|
|
372
372
|
//assert(findPAGNode(i) == false && "this node should not be created before");
|
|
373
|
-
assert(0==
|
|
373
|
+
assert(0==GepValObjMap[curInst].count(std::make_pair(base, ls))
|
|
374
374
|
&& "this node should not be created before");
|
|
375
|
-
|
|
376
|
-
|
|
375
|
+
GepValObjMap[curInst][std::make_pair(base, ls)] = i;
|
|
376
|
+
GepValVar *node = new GepValVar(gepVal, i, ls, type, fieldidx);
|
|
377
377
|
return addValNode(gepVal, node, i);
|
|
378
378
|
}
|
|
379
379
|
|
|
380
380
|
/*!
|
|
381
381
|
* Given an object node, find its field object node
|
|
382
382
|
*/
|
|
383
|
-
NodeID SVFIR::
|
|
383
|
+
NodeID SVFIR::getGepObjVar(NodeID id, const LocationSet& ls)
|
|
384
384
|
{
|
|
385
385
|
SVFVar* node = pag->getGNode(id);
|
|
386
386
|
if (GepObjPN* gepNode = SVFUtil::dyn_cast<GepObjPN>(node))
|
|
387
|
-
return
|
|
388
|
-
else if (
|
|
389
|
-
return
|
|
390
|
-
else if (
|
|
391
|
-
return
|
|
387
|
+
return getGepObjVar(gepNode->getMemObj(), gepNode->getLocationSet() + ls);
|
|
388
|
+
else if (FIObjVar* baseNode = SVFUtil::dyn_cast<FIObjVar>(node))
|
|
389
|
+
return getGepObjVar(baseNode->getMemObj(), ls);
|
|
390
|
+
else if (DummyObjVar* baseNode = SVFUtil::dyn_cast<DummyObjVar>(node))
|
|
391
|
+
return getGepObjVar(baseNode->getMemObj(), ls);
|
|
392
392
|
else
|
|
393
393
|
{
|
|
394
394
|
assert(false && "new gep obj node kind?");
|
|
@@ -402,21 +402,21 @@ NodeID SVFIR::getGepObjNode(NodeID id, const LocationSet& ls)
|
|
|
402
402
|
* offset = offset % obj->getMaxFieldOffsetLimit() to create limited number of mem objects
|
|
403
403
|
* maximum number of field object creation is obj->getMaxFieldOffsetLimit()
|
|
404
404
|
*/
|
|
405
|
-
NodeID SVFIR::
|
|
405
|
+
NodeID SVFIR::getGepObjVar(const MemObj* obj, const LocationSet& ls)
|
|
406
406
|
{
|
|
407
407
|
NodeID base = obj->getId();
|
|
408
408
|
|
|
409
409
|
/// if this obj is field-insensitive, just return the field-insensitive node.
|
|
410
410
|
if (obj->isFieldInsensitive())
|
|
411
|
-
return
|
|
411
|
+
return getFIObjVar(obj);
|
|
412
412
|
|
|
413
413
|
LocationSet newLS = SymbolTableInfo::SymbolInfo()->getModulusOffset(obj,ls);
|
|
414
414
|
|
|
415
415
|
// Base and first field are the same memory location.
|
|
416
416
|
if (Options::FirstFieldEqBase && newLS.getOffset() == 0) return base;
|
|
417
417
|
|
|
418
|
-
NodeLocationSetMap::iterator iter =
|
|
419
|
-
if (iter ==
|
|
418
|
+
NodeLocationSetMap::iterator iter = GepObjVarMap.find(std::make_pair(base, newLS));
|
|
419
|
+
if (iter == GepObjVarMap.end())
|
|
420
420
|
return addGepObjNode(obj, newLS);
|
|
421
421
|
else
|
|
422
422
|
return iter->second;
|
|
@@ -424,17 +424,17 @@ NodeID SVFIR::getGepObjNode(const MemObj* obj, const LocationSet& ls)
|
|
|
424
424
|
}
|
|
425
425
|
|
|
426
426
|
/*!
|
|
427
|
-
* Add a field obj node, this method can only invoked by
|
|
427
|
+
* Add a field obj node, this method can only invoked by getGepObjVar
|
|
428
428
|
*/
|
|
429
429
|
NodeID SVFIR::addGepObjNode(const MemObj* obj, const LocationSet& ls)
|
|
430
430
|
{
|
|
431
431
|
//assert(findPAGNode(i) == false && "this node should not be created before");
|
|
432
432
|
NodeID base = obj->getId();
|
|
433
|
-
assert(0==
|
|
433
|
+
assert(0==GepObjVarMap.count(std::make_pair(base, ls))
|
|
434
434
|
&& "this node should not be created before");
|
|
435
435
|
|
|
436
436
|
NodeID gepId = NodeIDAllocator::get()->allocateGepObjectId(base, ls.getOffset(), StInfo::getMaxFieldLimit());
|
|
437
|
-
|
|
437
|
+
GepObjVarMap[std::make_pair(base, ls)] = gepId;
|
|
438
438
|
GepObjPN *node = new GepObjPN(obj, gepId, ls);
|
|
439
439
|
memToFieldsMap[base].set(gepId);
|
|
440
440
|
return addObjNode(obj->getValue(), node, gepId);
|
|
@@ -448,14 +448,14 @@ NodeID SVFIR::addFIObjNode(const MemObj* obj)
|
|
|
448
448
|
//assert(findPAGNode(i) == false && "this node should not be created before");
|
|
449
449
|
NodeID base = obj->getId();
|
|
450
450
|
memToFieldsMap[base].set(obj->getId());
|
|
451
|
-
|
|
451
|
+
FIObjVar *node = new FIObjVar(obj->getValue(), obj->getId(), obj);
|
|
452
452
|
return addObjNode(obj->getValue(), node, obj->getId());
|
|
453
453
|
}
|
|
454
454
|
|
|
455
455
|
/*!
|
|
456
456
|
* Get all fields object nodes of an object
|
|
457
457
|
*/
|
|
458
|
-
NodeBS& SVFIR::
|
|
458
|
+
NodeBS& SVFIR::getAllFieldsObjVars(const MemObj* obj)
|
|
459
459
|
{
|
|
460
460
|
NodeID base = obj->getId();
|
|
461
461
|
return memToFieldsMap[base];
|
|
@@ -464,12 +464,12 @@ NodeBS& SVFIR::getAllFieldsObjNode(const MemObj* obj)
|
|
|
464
464
|
/*!
|
|
465
465
|
* Get all fields object nodes of an object
|
|
466
466
|
*/
|
|
467
|
-
NodeBS& SVFIR::
|
|
467
|
+
NodeBS& SVFIR::getAllFieldsObjVars(NodeID id)
|
|
468
468
|
{
|
|
469
469
|
const SVFVar* node = pag->getGNode(id);
|
|
470
|
-
assert(SVFUtil::isa<
|
|
471
|
-
const
|
|
472
|
-
return
|
|
470
|
+
assert(SVFUtil::isa<ObjVar>(node) && "need an object node");
|
|
471
|
+
const ObjVar* obj = SVFUtil::cast<ObjVar>(node);
|
|
472
|
+
return getAllFieldsObjVars(obj->getMemObj());
|
|
473
473
|
}
|
|
474
474
|
|
|
475
475
|
/*!
|
|
@@ -480,16 +480,16 @@ NodeBS& SVFIR::getAllFieldsObjNode(NodeID id)
|
|
|
480
480
|
NodeBS SVFIR::getFieldsAfterCollapse(NodeID id)
|
|
481
481
|
{
|
|
482
482
|
const SVFVar* node = pag->getGNode(id);
|
|
483
|
-
assert(SVFUtil::isa<
|
|
484
|
-
const MemObj* mem = SVFUtil::cast<
|
|
483
|
+
assert(SVFUtil::isa<ObjVar>(node) && "need an object node");
|
|
484
|
+
const MemObj* mem = SVFUtil::cast<ObjVar>(node)->getMemObj();
|
|
485
485
|
if(mem->isFieldInsensitive())
|
|
486
486
|
{
|
|
487
487
|
NodeBS bs;
|
|
488
|
-
bs.set(
|
|
488
|
+
bs.set(getFIObjVar(mem));
|
|
489
489
|
return bs;
|
|
490
490
|
}
|
|
491
491
|
else
|
|
492
|
-
return
|
|
492
|
+
return getAllFieldsObjVars(mem);
|
|
493
493
|
}
|
|
494
494
|
|
|
495
495
|
/*!
|
|
@@ -497,13 +497,13 @@ NodeBS SVFIR::getFieldsAfterCollapse(NodeID id)
|
|
|
497
497
|
* Return the source node of its connected gep edge if this pointer has
|
|
498
498
|
* Otherwise return the node id itself
|
|
499
499
|
*/
|
|
500
|
-
NodeID SVFIR::
|
|
500
|
+
NodeID SVFIR::getBaseValVar(NodeID nodeId)
|
|
501
501
|
{
|
|
502
502
|
SVFVar* node = getGNode(nodeId);
|
|
503
503
|
if (node->hasIncomingEdges(SVFStmt::NormalGep) || node->hasIncomingEdges(SVFStmt::VariantGep))
|
|
504
504
|
{
|
|
505
|
-
SVFStmt::
|
|
506
|
-
SVFStmt::
|
|
505
|
+
SVFStmt::SVFStmtSetTy& ngeps = node->getIncomingEdges(SVFStmt::NormalGep);
|
|
506
|
+
SVFStmt::SVFStmtSetTy& vgeps = node->getIncomingEdges(SVFStmt::VariantGep);
|
|
507
507
|
|
|
508
508
|
assert(((ngeps.size()+vgeps.size())==1) && "one node can only be connected by at most one gep edge!");
|
|
509
509
|
|
|
@@ -513,7 +513,7 @@ NodeID SVFIR::getBaseValNode(NodeID nodeId)
|
|
|
513
513
|
else
|
|
514
514
|
it = vgeps.begin();
|
|
515
515
|
|
|
516
|
-
assert(SVFUtil::isa<
|
|
516
|
+
assert(SVFUtil::isa<GepStmt>(*it) && "not a gep edge??");
|
|
517
517
|
return (*it)->getSrcID();
|
|
518
518
|
}
|
|
519
519
|
else
|
|
@@ -529,7 +529,7 @@ NodeID SVFIR::getBaseValNode(NodeID nodeId)
|
|
|
529
529
|
LocationSet SVFIR::getLocationSetFromBaseNode(NodeID nodeId)
|
|
530
530
|
{
|
|
531
531
|
SVFVar* node = getGNode(nodeId);
|
|
532
|
-
SVFStmt::
|
|
532
|
+
SVFStmt::SVFStmtSetTy& geps = node->getIncomingEdges(SVFStmt::NormalGep);
|
|
533
533
|
/// if this node is already a base node
|
|
534
534
|
if(geps.empty())
|
|
535
535
|
return LocationSet(0);
|
|
@@ -537,8 +537,8 @@ LocationSet SVFIR::getLocationSetFromBaseNode(NodeID nodeId)
|
|
|
537
537
|
assert(geps.size()==1 && "one node can only be connected by at most one gep edge!");
|
|
538
538
|
SVFVar::iterator it = geps.begin();
|
|
539
539
|
const SVFStmt* edge = *it;
|
|
540
|
-
assert(SVFUtil::isa<
|
|
541
|
-
const
|
|
540
|
+
assert(SVFUtil::isa<NormalGepStmt>(edge) && "not a get edge??");
|
|
541
|
+
const NormalGepStmt* gepEdge = SVFUtil::cast<NormalGepStmt>(edge);
|
|
542
542
|
return gepEdge->getLocationSet();
|
|
543
543
|
}
|
|
544
544
|
|
|
@@ -558,81 +558,81 @@ void SVFIR::print()
|
|
|
558
558
|
{
|
|
559
559
|
|
|
560
560
|
outs() << "-------------------SVFIR------------------------------------\n";
|
|
561
|
-
SVFStmt::
|
|
562
|
-
for (SVFStmt::
|
|
561
|
+
SVFStmt::SVFStmtSetTy& addrs = pag->getSVFStmtSet(SVFStmt::Addr);
|
|
562
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = addrs.begin(), eiter =
|
|
563
563
|
addrs.end(); iter != eiter; ++iter)
|
|
564
564
|
{
|
|
565
565
|
outs() << (*iter)->getSrcID() << " -- Addr --> " << (*iter)->getDstID()
|
|
566
566
|
<< "\n";
|
|
567
567
|
}
|
|
568
568
|
|
|
569
|
-
SVFStmt::
|
|
570
|
-
for (SVFStmt::
|
|
569
|
+
SVFStmt::SVFStmtSetTy& copys = pag->getSVFStmtSet(SVFStmt::Copy);
|
|
570
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = copys.begin(), eiter =
|
|
571
571
|
copys.end(); iter != eiter; ++iter)
|
|
572
572
|
{
|
|
573
573
|
outs() << (*iter)->getSrcID() << " -- Copy --> " << (*iter)->getDstID()
|
|
574
574
|
<< "\n";
|
|
575
575
|
}
|
|
576
576
|
|
|
577
|
-
SVFStmt::
|
|
578
|
-
for (SVFStmt::
|
|
577
|
+
SVFStmt::SVFStmtSetTy& calls = pag->getSVFStmtSet(SVFStmt::Call);
|
|
578
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = calls.begin(), eiter =
|
|
579
579
|
calls.end(); iter != eiter; ++iter)
|
|
580
580
|
{
|
|
581
581
|
outs() << (*iter)->getSrcID() << " -- Call --> " << (*iter)->getDstID()
|
|
582
582
|
<< "\n";
|
|
583
583
|
}
|
|
584
584
|
|
|
585
|
-
SVFStmt::
|
|
586
|
-
for (SVFStmt::
|
|
585
|
+
SVFStmt::SVFStmtSetTy& rets = pag->getSVFStmtSet(SVFStmt::Ret);
|
|
586
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = rets.begin(), eiter =
|
|
587
587
|
rets.end(); iter != eiter; ++iter)
|
|
588
588
|
{
|
|
589
589
|
outs() << (*iter)->getSrcID() << " -- Ret --> " << (*iter)->getDstID()
|
|
590
590
|
<< "\n";
|
|
591
591
|
}
|
|
592
592
|
|
|
593
|
-
SVFStmt::
|
|
594
|
-
for (SVFStmt::
|
|
593
|
+
SVFStmt::SVFStmtSetTy& tdfks = pag->getSVFStmtSet(SVFStmt::ThreadFork);
|
|
594
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = tdfks.begin(), eiter =
|
|
595
595
|
tdfks.end(); iter != eiter; ++iter)
|
|
596
596
|
{
|
|
597
597
|
outs() << (*iter)->getSrcID() << " -- ThreadFork --> "
|
|
598
598
|
<< (*iter)->getDstID() << "\n";
|
|
599
599
|
}
|
|
600
600
|
|
|
601
|
-
SVFStmt::
|
|
602
|
-
for (SVFStmt::
|
|
601
|
+
SVFStmt::SVFStmtSetTy& tdjns = pag->getSVFStmtSet(SVFStmt::ThreadJoin);
|
|
602
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = tdjns.begin(), eiter =
|
|
603
603
|
tdjns.end(); iter != eiter; ++iter)
|
|
604
604
|
{
|
|
605
605
|
outs() << (*iter)->getSrcID() << " -- ThreadJoin --> "
|
|
606
606
|
<< (*iter)->getDstID() << "\n";
|
|
607
607
|
}
|
|
608
608
|
|
|
609
|
-
SVFStmt::
|
|
610
|
-
for (SVFStmt::
|
|
609
|
+
SVFStmt::SVFStmtSetTy& ngeps = pag->getSVFStmtSet(SVFStmt::NormalGep);
|
|
610
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = ngeps.begin(), eiter =
|
|
611
611
|
ngeps.end(); iter != eiter; ++iter)
|
|
612
612
|
{
|
|
613
|
-
|
|
613
|
+
NormalGepStmt* gep = SVFUtil::cast<NormalGepStmt>(*iter);
|
|
614
614
|
outs() << gep->getSrcID() << " -- NormalGep (" << gep->getOffset()
|
|
615
615
|
<< ") --> " << gep->getDstID() << "\n";
|
|
616
616
|
}
|
|
617
617
|
|
|
618
|
-
SVFStmt::
|
|
619
|
-
for (SVFStmt::
|
|
618
|
+
SVFStmt::SVFStmtSetTy& vgeps = pag->getSVFStmtSet(SVFStmt::VariantGep);
|
|
619
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = vgeps.begin(), eiter =
|
|
620
620
|
vgeps.end(); iter != eiter; ++iter)
|
|
621
621
|
{
|
|
622
622
|
outs() << (*iter)->getSrcID() << " -- VariantGep --> "
|
|
623
623
|
<< (*iter)->getDstID() << "\n";
|
|
624
624
|
}
|
|
625
625
|
|
|
626
|
-
SVFStmt::
|
|
627
|
-
for (SVFStmt::
|
|
626
|
+
SVFStmt::SVFStmtSetTy& loads = pag->getSVFStmtSet(SVFStmt::Load);
|
|
627
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = loads.begin(), eiter =
|
|
628
628
|
loads.end(); iter != eiter; ++iter)
|
|
629
629
|
{
|
|
630
630
|
outs() << (*iter)->getSrcID() << " -- Load --> " << (*iter)->getDstID()
|
|
631
631
|
<< "\n";
|
|
632
632
|
}
|
|
633
633
|
|
|
634
|
-
SVFStmt::
|
|
635
|
-
for (SVFStmt::
|
|
634
|
+
SVFStmt::SVFStmtSetTy& stores = pag->getSVFStmtSet(SVFStmt::Store);
|
|
635
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = stores.begin(), eiter =
|
|
636
636
|
stores.end(); iter != eiter; ++iter)
|
|
637
637
|
{
|
|
638
638
|
outs() << (*iter)->getSrcID() << " -- Store --> " << (*iter)->getDstID()
|