svf-tools 1.0.351 → 1.0.352
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 +2 -2
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CSC_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +44 -45
- package/SVF-doxygen/html/html/ConsG_8h_source.html +21 -21
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +10 -8
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +5 -5
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +4 -4
- 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 +1 -1
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +4 -2
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +24 -22
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +17 -17
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +15 -14
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +11 -11
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +4 -4
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +3 -4
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +19 -21
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +38 -40
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +35 -37
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +21 -23
- package/SVF-doxygen/html/html/SVFStatements_8h.html +0 -4
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +146 -156
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +98 -98
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +13 -13
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +50 -51
- package/SVF-doxygen/html/html/VFG_8h_source.html +35 -35
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/annotated.html +100 -102
- package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt-members.html +24 -25
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +17 -18
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AssignStmt-members.html +28 -29
- package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.html +25 -30
- package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt-members.html +28 -29
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +23 -24
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +31 -32
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +38 -39
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CSC.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +27 -28
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +24 -25
- package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt-members.html +30 -31
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +24 -25
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +95 -96
- 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.html +17 -16
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt-members.html +24 -25
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +17 -18
- package/SVF-doxygen/html/html/classSVF_1_1DCHEdge-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DCHEdge.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +6 -5
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +36 -36
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +56 -55
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +21 -20
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +39 -39
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt-members.html +16 -14
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +139 -50
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +39 -39
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +7 -8
- package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt-members.html +27 -28
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +17 -18
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt-members.html +33 -34
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +32 -33
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +5 -6
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt-members.html +30 -31
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +23 -24
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +27 -28
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +24 -25
- package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +77 -78
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +29 -29
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt-members.html +24 -25
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +49 -53
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt-members.html +24 -25
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +18 -19
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +26 -27
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +18 -19
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +26 -27
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +18 -19
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt-members.html +29 -30
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +30 -31
- package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +79 -80
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +2 -2
- package/SVF-doxygen/html/html/classes.html +95 -93
- package/SVF-doxygen/html/html/functions_a.html +5 -5
- package/SVF-doxygen/html/html/functions_c.html +22 -22
- package/SVF-doxygen/html/html/functions_eval_g.html +2 -1
- package/SVF-doxygen/html/html/functions_eval_n.html +0 -1
- package/SVF-doxygen/html/html/functions_eval_v.html +0 -1
- package/SVF-doxygen/html/html/functions_func.html +5 -5
- package/SVF-doxygen/html/html/functions_func_c.html +20 -22
- package/SVF-doxygen/html/html/functions_func_g.html +13 -13
- package/SVF-doxygen/html/html/functions_func_i.html +7 -4
- package/SVF-doxygen/html/html/functions_func_n.html +0 -3
- package/SVF-doxygen/html/html/functions_func_o.html +3 -5
- package/SVF-doxygen/html/html/functions_func_t.html +0 -2
- package/SVF-doxygen/html/html/functions_func_v.html +0 -3
- package/SVF-doxygen/html/html/functions_g.html +17 -16
- package/SVF-doxygen/html/html/functions_i.html +9 -6
- package/SVF-doxygen/html/html/functions_l.html +3 -3
- package/SVF-doxygen/html/html/functions_m.html +1 -1
- package/SVF-doxygen/html/html/functions_n.html +0 -4
- package/SVF-doxygen/html/html/functions_o.html +3 -5
- package/SVF-doxygen/html/html/functions_p.html +10 -10
- package/SVF-doxygen/html/html/functions_r.html +8 -4
- package/SVF-doxygen/html/html/functions_s.html +12 -10
- package/SVF-doxygen/html/html/functions_t.html +7 -9
- package/SVF-doxygen/html/html/functions_v.html +4 -5
- package/SVF-doxygen/html/html/functions_vars_v.html +3 -0
- package/SVF-doxygen/html/html/functions_w.html +5 -9
- package/SVF-doxygen/html/html/hierarchy.html +55 -57
- package/SVF-doxygen/html/html/namespaceSVF.html +0 -4
- package/SVF-doxygen/html/html/search/all_1.js +5 -5
- package/SVF-doxygen/html/html/search/all_10.js +8 -8
- package/SVF-doxygen/html/html/search/all_12.js +2 -2
- package/SVF-doxygen/html/html/search/all_13.js +9 -9
- package/SVF-doxygen/html/html/search/all_14.js +5 -5
- package/SVF-doxygen/html/html/search/all_15.js +1 -1
- package/SVF-doxygen/html/html/search/all_16.js +3 -3
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_3.js +1 -1
- package/SVF-doxygen/html/html/search/all_7.js +4 -4
- package/SVF-doxygen/html/html/search/all_9.js +2 -1
- package/SVF-doxygen/html/html/search/all_c.js +2 -2
- package/SVF-doxygen/html/html/search/all_d.js +3 -3
- package/SVF-doxygen/html/html/search/all_e.js +3 -4
- package/SVF-doxygen/html/html/search/all_f.js +1 -1
- package/SVF-doxygen/html/html/search/classes_12.js +0 -1
- package/SVF-doxygen/html/html/search/classes_b.js +0 -1
- package/SVF-doxygen/html/html/search/enumvalues_12.js +1 -1
- package/SVF-doxygen/html/html/search/enumvalues_6.js +1 -1
- package/SVF-doxygen/html/html/search/enumvalues_b.js +1 -1
- package/SVF-doxygen/html/html/search/functions_0.js +5 -5
- package/SVF-doxygen/html/html/search/functions_10.js +1 -1
- package/SVF-doxygen/html/html/search/functions_11.js +1 -1
- package/SVF-doxygen/html/html/search/functions_13.js +0 -1
- package/SVF-doxygen/html/html/search/functions_2.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +3 -3
- package/SVF-doxygen/html/html/search/functions_8.js +2 -1
- package/SVF-doxygen/html/html/search/functions_c.js +0 -1
- package/SVF-doxygen/html/html/search/functions_d.js +1 -1
- package/SVF-doxygen/html/html/search/functions_e.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_16.js +1 -0
- package/SVF-doxygen/html/html/search/variables_e.js +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +16 -16
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +18 -18
- package/include/Graphs/ConsG.h +2 -2
- package/include/Graphs/ConsGEdge.h +1 -1
- package/include/Graphs/VFG.h +2 -2
- package/include/MemoryModel/SVFIR.h +2 -2
- package/include/MemoryModel/SVFStatements.h +17 -94
- package/include/MemoryModel/SVFVariables.h +9 -6
- package/include/SVF-FE/DCHG.h +1 -1
- package/include/SVF-FE/SVFIRBuilder.h +5 -5
- package/include/Util/IRAnnotator.h +1 -1
- package/lib/DDA/ContextDDA.cpp +4 -5
- package/lib/DDA/DDAClient.cpp +6 -6
- package/lib/DDA/DDAStat.cpp +1 -1
- package/lib/DDA/FlowDDA.cpp +4 -5
- package/lib/Graphs/ConsG.cpp +26 -31
- package/lib/Graphs/SVFG.cpp +2 -2
- package/lib/Graphs/VFG.cpp +36 -43
- package/lib/MTA/MTAAnnotator.cpp +3 -3
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
- package/lib/MemoryModel/SVFIR.cpp +26 -34
- package/lib/MemoryModel/SVFStatements.cpp +0 -22
- package/lib/MemoryModel/SVFVariables.cpp +1 -1
- package/lib/MemoryModel/SymbolTableInfo.cpp +1 -1
- package/lib/SVF-FE/DCHG.cpp +1 -1
- package/lib/SVF-FE/Graph2Json.cpp +24 -27
- package/lib/Util/PTAStat.cpp +9 -9
- package/lib/Util/TypeBasedHeapCloning.cpp +5 -5
- package/lib/WPA/AndersenSFR.cpp +2 -2
- package/lib/WPA/AndersenStat.cpp +2 -2
- package/lib/WPA/CSC.cpp +2 -2
- package/lib/WPA/FlowSensitive.cpp +4 -7
- package/lib/WPA/FlowSensitiveStat.cpp +2 -2
- package/lib/WPA/FlowSensitiveTBHC.cpp +6 -9
- package/package.json +1 -1
|
@@ -53,7 +53,7 @@ public:
|
|
|
53
53
|
/// ThreadFork/ThreadJoin is to model parameter passings between thread spawners and spawnees.
|
|
54
54
|
enum PEDGEK
|
|
55
55
|
{
|
|
56
|
-
Addr, Copy, Store, Load, Call, Ret,
|
|
56
|
+
Addr, Copy, Store, Load, Call, Ret, Gep, Phi, Cmp, BinaryOp, UnaryOp, Branch, ThreadFork, ThreadJoin
|
|
57
57
|
};
|
|
58
58
|
|
|
59
59
|
private:
|
|
@@ -85,8 +85,7 @@ public:
|
|
|
85
85
|
edge->getEdgeKind() == SVFStmt::Load ||
|
|
86
86
|
edge->getEdgeKind() == SVFStmt::Call ||
|
|
87
87
|
edge->getEdgeKind() == SVFStmt::Ret ||
|
|
88
|
-
edge->getEdgeKind() == SVFStmt::
|
|
89
|
-
edge->getEdgeKind() == SVFStmt::VariantGep ||
|
|
88
|
+
edge->getEdgeKind() == SVFStmt::Gep ||
|
|
90
89
|
edge->getEdgeKind() == SVFStmt::Cmp ||
|
|
91
90
|
edge->getEdgeKind() == SVFStmt::BinaryOp ||
|
|
92
91
|
edge->getEdgeKind() == SVFStmt::UnaryOp ||
|
|
@@ -227,8 +226,7 @@ public:
|
|
|
227
226
|
edge->getEdgeKind() == SVFStmt::Load ||
|
|
228
227
|
edge->getEdgeKind() == SVFStmt::Call ||
|
|
229
228
|
edge->getEdgeKind() == SVFStmt::Ret ||
|
|
230
|
-
edge->getEdgeKind() == SVFStmt::
|
|
231
|
-
edge->getEdgeKind() == SVFStmt::VariantGep ||
|
|
229
|
+
edge->getEdgeKind() == SVFStmt::Gep ||
|
|
232
230
|
edge->getEdgeKind() == SVFStmt::ThreadFork ||
|
|
233
231
|
edge->getEdgeKind() == SVFStmt::ThreadJoin;
|
|
234
232
|
}
|
|
@@ -240,8 +238,7 @@ public:
|
|
|
240
238
|
edge->getEdgeKind() == SVFStmt::Load ||
|
|
241
239
|
edge->getEdgeKind() == SVFStmt::Call ||
|
|
242
240
|
edge->getEdgeKind() == SVFStmt::Ret ||
|
|
243
|
-
edge->getEdgeKind() == SVFStmt::
|
|
244
|
-
edge->getEdgeKind() == SVFStmt::VariantGep ||
|
|
241
|
+
edge->getEdgeKind() == SVFStmt::Gep ||
|
|
245
242
|
edge->getEdgeKind() == SVFStmt::ThreadFork ||
|
|
246
243
|
edge->getEdgeKind() == SVFStmt::ThreadJoin;
|
|
247
244
|
}
|
|
@@ -417,7 +414,7 @@ private:
|
|
|
417
414
|
void operator=(const GepStmt &); ///< place holder
|
|
418
415
|
|
|
419
416
|
LocationSet ls; ///< location set of the gep edge
|
|
420
|
-
|
|
417
|
+
bool variantField; ///< Gep statement with a variant field index (pointer arithmetic) for struct field access (e.g., p = &(q + f), where f is a variable)
|
|
421
418
|
public:
|
|
422
419
|
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
423
420
|
//@{
|
|
@@ -427,111 +424,37 @@ public:
|
|
|
427
424
|
}
|
|
428
425
|
static inline bool classof(const SVFStmt *edge)
|
|
429
426
|
{
|
|
430
|
-
return edge->getEdgeKind() == SVFStmt::
|
|
431
|
-
edge->getEdgeKind() == SVFStmt::VariantGep;
|
|
427
|
+
return edge->getEdgeKind() == SVFStmt::Gep;
|
|
432
428
|
}
|
|
433
429
|
static inline bool classof(const GenericPAGEdgeTy *edge)
|
|
434
430
|
{
|
|
435
|
-
return edge->getEdgeKind() == SVFStmt::
|
|
436
|
-
edge->getEdgeKind() == SVFStmt::VariantGep;
|
|
431
|
+
return edge->getEdgeKind() == SVFStmt::Gep;
|
|
437
432
|
}
|
|
438
433
|
//@}
|
|
439
434
|
|
|
440
435
|
inline const LocationSet& getLocationSet() const
|
|
441
436
|
{
|
|
437
|
+
assert(isVariantFieldGep()==false && "Can't retrieve the LocationSet if using a variable field index (pointer arithmetic) for struct field access ");
|
|
442
438
|
return ls;
|
|
443
439
|
}
|
|
444
440
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
GepStmt(SVFVar* s, SVFVar* d, const LocationSet& l, PEDGEK k) : AssignStmt(s,d,k), ls(l)
|
|
448
|
-
{
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
virtual const std::string toString() const;
|
|
452
|
-
|
|
453
|
-
};
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
/*!
|
|
457
|
-
* Gep statement with a fixed field index for struct field access
|
|
458
|
-
*/
|
|
459
|
-
class NormalGepStmt : public GepStmt
|
|
460
|
-
{
|
|
461
|
-
private:
|
|
462
|
-
NormalGepStmt(); ///< place holder
|
|
463
|
-
NormalGepStmt(const NormalGepStmt&); ///< place holder
|
|
464
|
-
void operator=(const NormalGepStmt&); ///< place holder
|
|
465
|
-
|
|
466
|
-
public:
|
|
467
|
-
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
468
|
-
//@{
|
|
469
|
-
static inline bool classof(const NormalGepStmt *)
|
|
441
|
+
/// offset of the gep statement
|
|
442
|
+
inline s64_t getConstantFieldIdx() const
|
|
470
443
|
{
|
|
471
|
-
return
|
|
472
|
-
}
|
|
473
|
-
static inline bool classof(const GepStmt *edge)
|
|
474
|
-
{
|
|
475
|
-
return edge->getEdgeKind() == SVFStmt::NormalGep;
|
|
476
|
-
}
|
|
477
|
-
static inline bool classof(const SVFStmt *edge)
|
|
478
|
-
{
|
|
479
|
-
return edge->getEdgeKind() == SVFStmt::NormalGep;
|
|
444
|
+
return getLocationSet().accumulateConstantFieldIdx();
|
|
480
445
|
}
|
|
481
|
-
|
|
446
|
+
/// Gep statement with a variant field index (pointer arithmetic) for struct field access
|
|
447
|
+
inline bool isVariantFieldGep() const
|
|
482
448
|
{
|
|
483
|
-
return
|
|
484
|
-
}
|
|
485
|
-
//@}
|
|
449
|
+
return variantField;
|
|
450
|
+
}
|
|
486
451
|
|
|
487
452
|
/// constructor
|
|
488
|
-
|
|
489
|
-
{}
|
|
490
|
-
|
|
491
|
-
/// offset of the gep edge
|
|
492
|
-
inline s64_t getFieldOffset() const
|
|
453
|
+
GepStmt(SVFVar* s, SVFVar* d, const LocationSet& l, bool varfld=false) : AssignStmt(s,d,SVFStmt::Gep), ls(l), variantField(varfld)
|
|
493
454
|
{
|
|
494
|
-
return getLocationSet().accumulateConstantFieldIdx();
|
|
495
455
|
}
|
|
496
456
|
|
|
497
|
-
virtual const std::string toString() const
|
|
498
|
-
};
|
|
499
|
-
|
|
500
|
-
/*!
|
|
501
|
-
* Gep statement with a variant field index for struct field access
|
|
502
|
-
*/
|
|
503
|
-
class VariantGepStmt : public GepStmt
|
|
504
|
-
{
|
|
505
|
-
private:
|
|
506
|
-
VariantGepStmt(); ///< place holder
|
|
507
|
-
VariantGepStmt(const VariantGepStmt&); ///< place holder
|
|
508
|
-
void operator=(const VariantGepStmt&); ///< place holder
|
|
509
|
-
|
|
510
|
-
public:
|
|
511
|
-
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
512
|
-
//@{
|
|
513
|
-
static inline bool classof(const VariantGepStmt *)
|
|
514
|
-
{
|
|
515
|
-
return true;
|
|
516
|
-
}
|
|
517
|
-
static inline bool classof(const GepStmt *edge)
|
|
518
|
-
{
|
|
519
|
-
return edge->getEdgeKind() == SVFStmt::VariantGep;
|
|
520
|
-
}
|
|
521
|
-
static inline bool classof(const SVFStmt *edge)
|
|
522
|
-
{
|
|
523
|
-
return edge->getEdgeKind() == SVFStmt::VariantGep;
|
|
524
|
-
}
|
|
525
|
-
static inline bool classof(const GenericPAGEdgeTy *edge)
|
|
526
|
-
{
|
|
527
|
-
return edge->getEdgeKind() == SVFStmt::VariantGep;
|
|
528
|
-
}
|
|
529
|
-
//@}
|
|
530
|
-
|
|
531
|
-
/// constructor
|
|
532
|
-
VariantGepStmt(SVFVar* s, SVFVar* d, const LocationSet& l) : GepStmt(s,d,l, SVFStmt::VariantGep) {}
|
|
533
|
-
|
|
534
|
-
virtual const std::string toString() const override;
|
|
457
|
+
virtual const std::string toString() const;
|
|
535
458
|
|
|
536
459
|
};
|
|
537
460
|
|
|
@@ -241,10 +241,13 @@ private:
|
|
|
241
241
|
/// Has incoming VariantGepEdges
|
|
242
242
|
inline bool hasIncomingVariantGepEdge() const
|
|
243
243
|
{
|
|
244
|
-
SVFStmt::KindToSVFStmtMapTy::const_iterator it = InEdgeKindToSetMap.find(SVFStmt::
|
|
244
|
+
SVFStmt::KindToSVFStmtMapTy::const_iterator it = InEdgeKindToSetMap.find(SVFStmt::Gep);
|
|
245
245
|
if (it != InEdgeKindToSetMap.end())
|
|
246
246
|
{
|
|
247
|
-
|
|
247
|
+
for(auto gep : it->second){
|
|
248
|
+
if(SVFUtil::cast<GepStmt>(gep)->isVariantFieldGep())
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
248
251
|
}
|
|
249
252
|
return false;
|
|
250
253
|
}
|
|
@@ -422,7 +425,7 @@ public:
|
|
|
422
425
|
}
|
|
423
426
|
|
|
424
427
|
/// offset of the base value variable
|
|
425
|
-
inline s64_t
|
|
428
|
+
inline s64_t getConstantFieldIdx() const
|
|
426
429
|
{
|
|
427
430
|
return ls.accumulateConstantFieldIdx();
|
|
428
431
|
}
|
|
@@ -431,8 +434,8 @@ public:
|
|
|
431
434
|
inline const std::string getValueName() const
|
|
432
435
|
{
|
|
433
436
|
if (value && value->hasName())
|
|
434
|
-
return value->getName().str() + "_" + llvm::utostr(
|
|
435
|
-
return "offset_" + llvm::utostr(
|
|
437
|
+
return value->getName().str() + "_" + llvm::utostr(getConstantFieldIdx());
|
|
438
|
+
return "offset_" + llvm::utostr(getConstantFieldIdx());
|
|
436
439
|
}
|
|
437
440
|
|
|
438
441
|
inline const Type* getType() const
|
|
@@ -497,7 +500,7 @@ public:
|
|
|
497
500
|
}
|
|
498
501
|
|
|
499
502
|
/// offset of the mem object
|
|
500
|
-
inline s64_t
|
|
503
|
+
inline s64_t getConstantFieldIdx() const
|
|
501
504
|
{
|
|
502
505
|
return ls.accumulateConstantFieldIdx();
|
|
503
506
|
}
|
package/include/SVF-FE/DCHG.h
CHANGED
|
@@ -72,7 +72,7 @@ public:
|
|
|
72
72
|
/// Initialize nodes and edges
|
|
73
73
|
//@{
|
|
74
74
|
void initialiseNodes();
|
|
75
|
-
void addEdge(NodeID src, NodeID dst,
|
|
75
|
+
void addEdge(NodeID src, NodeID dst, SVFStmt::PEDGEK kind,
|
|
76
76
|
s64_t offset = 0, Instruction* cs = nullptr);
|
|
77
77
|
// @}
|
|
78
78
|
|
|
@@ -377,16 +377,16 @@ public:
|
|
|
377
377
|
return edge;
|
|
378
378
|
}
|
|
379
379
|
/// Add Offset(Gep) edge
|
|
380
|
-
inline
|
|
380
|
+
inline GepStmt* addNormalGepEdge(NodeID src, NodeID dst, const LocationSet& ls)
|
|
381
381
|
{
|
|
382
|
-
|
|
382
|
+
GepStmt *edge = pag->addNormalGepStmt(src, dst, ls);
|
|
383
383
|
setCurrentBBAndValueForPAGEdge(edge);
|
|
384
384
|
return edge;
|
|
385
385
|
}
|
|
386
386
|
/// Add Variant(Gep) edge
|
|
387
|
-
inline
|
|
387
|
+
inline GepStmt* addVariantGepEdge(NodeID src, NodeID dst, const LocationSet& ls)
|
|
388
388
|
{
|
|
389
|
-
|
|
389
|
+
GepStmt *edge = pag->addVariantGepStmt(src, dst, ls);
|
|
390
390
|
setCurrentBBAndValueForPAGEdge(edge);
|
|
391
391
|
return edge;
|
|
392
392
|
}
|
|
@@ -64,7 +64,7 @@ private:
|
|
|
64
64
|
void writePAGgepNode(SVF::NodeID nodeId, GepObjVar* gepNode)
|
|
65
65
|
{
|
|
66
66
|
auto baseNodeId = gepNode->getBaseNode();
|
|
67
|
-
auto locationSetOffset = gepNode->
|
|
67
|
+
auto locationSetOffset = gepNode->getConstantFieldIdx();
|
|
68
68
|
|
|
69
69
|
LLVMContext &context = mainModule->getContext();
|
|
70
70
|
llvm::SmallVector<llvm::Metadata *, 32> operands;
|
package/lib/DDA/ContextDDA.cpp
CHANGED
|
@@ -140,19 +140,18 @@ CxtPtSet ContextDDA::processGepPts(const GepSVFGNode* gep, const CxtPtSet& srcPt
|
|
|
140
140
|
tmpDstPts.set(ptd);
|
|
141
141
|
else
|
|
142
142
|
{
|
|
143
|
-
|
|
143
|
+
const GepStmt* gepStmt = SVFUtil::cast<GepStmt>(gep->getPAGEdge());
|
|
144
|
+
if (gepStmt->isVariantFieldGep())
|
|
144
145
|
{
|
|
145
146
|
setObjFieldInsensitive(ptd.get_id());
|
|
146
147
|
CxtVar var(ptd.get_cond(),getFIObjVar(ptd.get_id()));
|
|
147
148
|
tmpDstPts.set(var);
|
|
148
149
|
}
|
|
149
|
-
else
|
|
150
|
+
else
|
|
150
151
|
{
|
|
151
|
-
CxtVar var(ptd.get_cond(),getGepObjVar(ptd.get_id(),
|
|
152
|
+
CxtVar var(ptd.get_cond(),getGepObjVar(ptd.get_id(),gepStmt->getLocationSet()));
|
|
152
153
|
tmpDstPts.set(var);
|
|
153
154
|
}
|
|
154
|
-
else
|
|
155
|
-
assert(false && "new gep edge?");
|
|
156
155
|
}
|
|
157
156
|
}
|
|
158
157
|
|
package/lib/DDA/DDAClient.cpp
CHANGED
|
@@ -155,8 +155,8 @@ void FunptrDDAClient::performStat(PointerAnalysis* pta)
|
|
|
155
155
|
OrderedNodeSet& AliasDDAClient::collectCandidateQueries(SVFIR* pag)
|
|
156
156
|
{
|
|
157
157
|
setPAG(pag);
|
|
158
|
-
|
|
159
|
-
for (
|
|
158
|
+
SVFStmt::SVFStmtSetTy& loads = pag->getSVFStmtSet(SVFStmt::Load);
|
|
159
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = loads.begin(), eiter =
|
|
160
160
|
loads.end(); iter != eiter; ++iter)
|
|
161
161
|
{
|
|
162
162
|
PAGNode* loadsrc = (*iter)->getSrcNode();
|
|
@@ -164,16 +164,16 @@ OrderedNodeSet& AliasDDAClient::collectCandidateQueries(SVFIR* pag)
|
|
|
164
164
|
addCandidate(loadsrc->getId());
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
-
|
|
168
|
-
for (
|
|
167
|
+
SVFStmt::SVFStmtSetTy& stores = pag->getSVFStmtSet(SVFStmt::Store);
|
|
168
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = stores.begin(), eiter =
|
|
169
169
|
stores.end(); iter != eiter; ++iter)
|
|
170
170
|
{
|
|
171
171
|
PAGNode* storedst = (*iter)->getDstNode();
|
|
172
172
|
storeDstNodes.insert(storedst);
|
|
173
173
|
addCandidate(storedst->getId());
|
|
174
174
|
}
|
|
175
|
-
|
|
176
|
-
for (
|
|
175
|
+
SVFStmt::SVFStmtSetTy& geps = pag->getSVFStmtSet(SVFStmt::Gep);
|
|
176
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = geps.begin(), eiter =
|
|
177
177
|
geps.end(); iter != eiter; ++iter)
|
|
178
178
|
{
|
|
179
179
|
PAGNode* gepsrc = (*iter)->getSrcNode();
|
package/lib/DDA/DDAStat.cpp
CHANGED
|
@@ -242,7 +242,7 @@ void DDAStat::performStat()
|
|
|
242
242
|
PTNumStatMap["PointsToBlkPtr"] = _NumOfBlackholePtr;
|
|
243
243
|
PTNumStatMap["NumOfMustAA"] = _TotalNumOfMustAliases;
|
|
244
244
|
PTNumStatMap["NumOfInfePath"] = _TotalNumOfInfeasiblePath;
|
|
245
|
-
PTNumStatMap["NumOfStore"] = SVFIR::getPAG()->getPTASVFStmtSet(
|
|
245
|
+
PTNumStatMap["NumOfStore"] = SVFIR::getPAG()->getPTASVFStmtSet(SVFStmt::Store).size();
|
|
246
246
|
PTNumStatMap["MemoryUsageVmrss"] = _vmrssUsageAfter - _vmrssUsageBefore;
|
|
247
247
|
PTNumStatMap["MemoryUsageVmsize"] = _vmsizeUsageAfter - _vmsizeUsageBefore;
|
|
248
248
|
|
package/lib/DDA/FlowDDA.cpp
CHANGED
|
@@ -126,18 +126,17 @@ PointsTo FlowDDA::processGepPts(const GepSVFGNode* gep, const PointsTo& srcPts)
|
|
|
126
126
|
tmpDstPts.set(ptd);
|
|
127
127
|
else
|
|
128
128
|
{
|
|
129
|
-
|
|
129
|
+
const GepStmt* gepStmt = SVFUtil::cast<GepStmt>(gep->getPAGEdge());
|
|
130
|
+
if (gepStmt->isVariantFieldGep())
|
|
130
131
|
{
|
|
131
132
|
setObjFieldInsensitive(ptd);
|
|
132
133
|
tmpDstPts.set(getFIObjVar(ptd));
|
|
133
134
|
}
|
|
134
|
-
else
|
|
135
|
+
else
|
|
135
136
|
{
|
|
136
|
-
NodeID fieldSrcPtdNode = getGepObjVar(ptd,
|
|
137
|
+
NodeID fieldSrcPtdNode = getGepObjVar(ptd, gepStmt->getLocationSet());
|
|
137
138
|
tmpDstPts.set(fieldSrcPtdNode);
|
|
138
139
|
}
|
|
139
|
-
else
|
|
140
|
-
assert(false && "new gep edge?");
|
|
141
140
|
}
|
|
142
141
|
}
|
|
143
142
|
DBOUT(DDDA, outs() << "\t return created gep objs {");
|
package/lib/Graphs/ConsG.cpp
CHANGED
|
@@ -49,24 +49,24 @@ void ConstraintGraph::buildCG()
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
// initialize edges
|
|
52
|
-
|
|
53
|
-
for (
|
|
52
|
+
SVFStmt::SVFStmtSetTy& addrs = getPAGEdgeSet(SVFStmt::Addr);
|
|
53
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = addrs.begin(), eiter =
|
|
54
54
|
addrs.end(); iter != eiter; ++iter)
|
|
55
55
|
{
|
|
56
56
|
const AddrStmt* edge = SVFUtil::cast<AddrStmt>(*iter);
|
|
57
57
|
addAddrCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
for (
|
|
60
|
+
SVFStmt::SVFStmtSetTy& copys = getPAGEdgeSet(SVFStmt::Copy);
|
|
61
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = copys.begin(), eiter =
|
|
62
62
|
copys.end(); iter != eiter; ++iter)
|
|
63
63
|
{
|
|
64
64
|
const CopyStmt* edge = SVFUtil::cast<CopyStmt>(*iter);
|
|
65
65
|
addCopyCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
for (
|
|
68
|
+
SVFStmt::SVFStmtSetTy& phis = getPAGEdgeSet(SVFStmt::Phi);
|
|
69
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = phis.begin(), eiter =
|
|
70
70
|
phis.end(); iter != eiter; ++iter)
|
|
71
71
|
{
|
|
72
72
|
const PhiStmt* edge = SVFUtil::cast<PhiStmt>(*iter);
|
|
@@ -74,64 +74,59 @@ void ConstraintGraph::buildCG()
|
|
|
74
74
|
addCopyCGEdge(opVar->getId(),edge->getResID());
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
for (
|
|
77
|
+
SVFStmt::SVFStmtSetTy& calls = getPAGEdgeSet(SVFStmt::Call);
|
|
78
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = calls.begin(), eiter =
|
|
79
79
|
calls.end(); iter != eiter; ++iter)
|
|
80
80
|
{
|
|
81
81
|
const CallPE* edge = SVFUtil::cast<CallPE>(*iter);
|
|
82
82
|
addCopyCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
for (
|
|
85
|
+
SVFStmt::SVFStmtSetTy& rets = getPAGEdgeSet(SVFStmt::Ret);
|
|
86
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = rets.begin(), eiter =
|
|
87
87
|
rets.end(); iter != eiter; ++iter)
|
|
88
88
|
{
|
|
89
89
|
const RetPE* edge = SVFUtil::cast<RetPE>(*iter);
|
|
90
90
|
addCopyCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
|
|
94
|
-
for (
|
|
93
|
+
SVFStmt::SVFStmtSetTy& tdfks = getPAGEdgeSet(SVFStmt::ThreadFork);
|
|
94
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = tdfks.begin(), eiter =
|
|
95
95
|
tdfks.end(); iter != eiter; ++iter)
|
|
96
96
|
{
|
|
97
97
|
const TDForkPE* edge = SVFUtil::cast<TDForkPE>(*iter);
|
|
98
98
|
addCopyCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
for (
|
|
101
|
+
SVFStmt::SVFStmtSetTy& tdjns = getPAGEdgeSet(SVFStmt::ThreadJoin);
|
|
102
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = tdjns.begin(), eiter =
|
|
103
103
|
tdjns.end(); iter != eiter; ++iter)
|
|
104
104
|
{
|
|
105
105
|
const TDJoinPE* edge = SVFUtil::cast<TDJoinPE>(*iter);
|
|
106
106
|
addCopyCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
|
|
110
|
-
for (
|
|
109
|
+
SVFStmt::SVFStmtSetTy& ngeps = getPAGEdgeSet(SVFStmt::Gep);
|
|
110
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = ngeps.begin(), eiter =
|
|
111
111
|
ngeps.end(); iter != eiter; ++iter)
|
|
112
112
|
{
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
for (PAGEdge::SVFStmtSetTy::iterator iter = vgeps.begin(), eiter =
|
|
119
|
-
vgeps.end(); iter != eiter; ++iter)
|
|
120
|
-
{
|
|
121
|
-
VariantGepStmt* edge = SVFUtil::cast<VariantGepStmt>(*iter);
|
|
122
|
-
addVariantGepCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
113
|
+
GepStmt* edge = SVFUtil::cast<GepStmt>(*iter);
|
|
114
|
+
if(edge->isVariantFieldGep())
|
|
115
|
+
addVariantGepCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
116
|
+
else
|
|
117
|
+
addNormalGepCGEdge(edge->getRHSVarID(),edge->getLHSVarID(),edge->getLocationSet());
|
|
123
118
|
}
|
|
124
119
|
|
|
125
|
-
|
|
126
|
-
for (
|
|
120
|
+
SVFStmt::SVFStmtSetTy& loads = getPAGEdgeSet(SVFStmt::Load);
|
|
121
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = loads.begin(), eiter =
|
|
127
122
|
loads.end(); iter != eiter; ++iter)
|
|
128
123
|
{
|
|
129
124
|
LoadStmt* edge = SVFUtil::cast<LoadStmt>(*iter);
|
|
130
125
|
addLoadCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
131
126
|
}
|
|
132
127
|
|
|
133
|
-
|
|
134
|
-
for (
|
|
128
|
+
SVFStmt::SVFStmtSetTy& stores = getPAGEdgeSet(SVFStmt::Store);
|
|
129
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = stores.begin(), eiter =
|
|
135
130
|
stores.end(); iter != eiter; ++iter)
|
|
136
131
|
{
|
|
137
132
|
StoreStmt* edge = SVFUtil::cast<StoreStmt>(*iter);
|
|
@@ -562,7 +557,7 @@ void ConstraintGraph::print()
|
|
|
562
557
|
}
|
|
563
558
|
else if (NormalGepCGEdge* ngep = SVFUtil::dyn_cast<NormalGepCGEdge>(*iter))
|
|
564
559
|
{
|
|
565
|
-
outs() << ngep->getSrcID() << " -- NormalGep (" << ngep->
|
|
560
|
+
outs() << ngep->getSrcID() << " -- NormalGep (" << ngep->getConstantFieldIdx()
|
|
566
561
|
<< ") --> " << ngep->getDstID() << "\n";
|
|
567
562
|
}
|
|
568
563
|
else if (VariantGepCGEdge* vgep = SVFUtil::dyn_cast<VariantGepCGEdge>(*iter))
|
package/lib/Graphs/SVFG.cpp
CHANGED
|
@@ -224,8 +224,8 @@ void SVFG::addSVFGNodesForAddrTakenVars()
|
|
|
224
224
|
{
|
|
225
225
|
|
|
226
226
|
// set defs for address-taken vars defined at store statements
|
|
227
|
-
|
|
228
|
-
for (
|
|
227
|
+
SVFStmt::SVFStmtSetTy& stores = getPAGEdgeSet(SVFStmt::Store);
|
|
228
|
+
for (SVFStmt::SVFStmtSetTy::iterator iter = stores.begin(), eiter =
|
|
229
229
|
stores.end(); iter != eiter; ++iter)
|
|
230
230
|
{
|
|
231
231
|
StoreStmt* store = SVFUtil::cast<StoreStmt>(*iter);
|