svf-tools 1.0.331 → 1.0.335
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 +4 -4
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/CSC_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +17 -8
- package/SVF-doxygen/html/html/ConsG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/DCHG_8h_source.html +5 -4
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +3 -3
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +4 -4
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LocationSet_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +6 -6
- 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/OfflineConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +18 -18
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +37 -37
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +27 -27
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFStatements_8h.html +14 -12
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +131 -123
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +18 -18
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +132 -129
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +2 -2
- 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 +25 -25
- package/SVF-doxygen/html/html/VFG_8h_source.html +18 -17
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/annotated.html +271 -270
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt-members.html +16 -10
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +36 -14
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +2 -2
- 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 +145 -0
- package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.html +770 -0
- 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 +7 -11
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +19 -138
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +39 -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_1CallBlockNode-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +19 -13
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +43 -21
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar-members.html +37 -40
- package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +14 -22
- package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar-members.html +37 -40
- package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +15 -23
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar-members.html +48 -51
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +18 -26
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt-members.html +7 -11
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +20 -139
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +18 -11
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt-members.html +16 -10
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +36 -14
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1DCHEdge-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DCHEdge.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar-members.html +37 -40
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +16 -24
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar-members.html +36 -39
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +15 -23
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar-members.html +37 -40
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +21 -29
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.html +3 -9
- package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar-members.html +49 -52
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +53 -61
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt-members.html +23 -15
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +166 -69
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar-members.html +45 -48
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +40 -48
- package/SVF-doxygen/html/html/classSVF_1_1GlobalBlockNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1GlobalBlockNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +12 -12
- 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_1InterBlockNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterBlockNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt-members.html +16 -10
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +36 -14
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt-members.html +36 -29
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +250 -31
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt-members.html +51 -46
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt.html +53 -93
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar-members.html +37 -40
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +34 -42
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt-members.html +5 -9
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +18 -137
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +16 -10
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +43 -21
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1RetPN-members.html +36 -39
- package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +16 -24
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +61 -53
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +24 -18
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +12 -8
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar-members.html +28 -25
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +185 -107
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt-members.html +16 -10
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +36 -14
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +18 -12
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +35 -13
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +17 -11
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +35 -13
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.png +0 -0
- 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 +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +34 -34
- package/SVF-doxygen/html/html/classSVF_1_1ValVar-members.html +36 -39
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +19 -27
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN-members.html +36 -39
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +16 -24
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt-members.html +52 -45
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt.html +56 -25
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +1 -1
- package/SVF-doxygen/html/html/classes.html +91 -93
- package/SVF-doxygen/html/html/functions_a.html +18 -15
- package/SVF-doxygen/html/html/functions_c.html +16 -15
- package/SVF-doxygen/html/html/functions_func.html +18 -15
- package/SVF-doxygen/html/html/functions_func_c.html +24 -23
- package/SVF-doxygen/html/html/functions_func_g.html +45 -37
- package/SVF-doxygen/html/html/functions_func_o.html +5 -3
- package/SVF-doxygen/html/html/functions_func_s.html +1 -1
- package/SVF-doxygen/html/html/functions_func_t.html +1 -0
- package/SVF-doxygen/html/html/functions_g.html +46 -38
- package/SVF-doxygen/html/html/functions_i.html +7 -6
- package/SVF-doxygen/html/html/functions_l.html +4 -4
- package/SVF-doxygen/html/html/functions_m.html +1 -1
- package/SVF-doxygen/html/html/functions_o.html +12 -10
- package/SVF-doxygen/html/html/functions_p.html +12 -8
- package/SVF-doxygen/html/html/functions_rela.html +56 -1
- package/SVF-doxygen/html/html/functions_s.html +14 -15
- package/SVF-doxygen/html/html/functions_t.html +9 -10
- package/SVF-doxygen/html/html/functions_v.html +8 -7
- package/SVF-doxygen/html/html/functions_vars_l.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_o.html +1 -1
- package/SVF-doxygen/html/html/hierarchy.html +17 -16
- package/SVF-doxygen/html/html/menudata.js +13 -1
- package/SVF-doxygen/html/html/namespaceSVF.html +2 -0
- package/SVF-doxygen/html/html/search/all_1.js +5 -4
- package/SVF-doxygen/html/html/search/all_10.js +6 -6
- package/SVF-doxygen/html/html/search/all_13.js +12 -12
- 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_3.js +2 -2
- package/SVF-doxygen/html/html/search/all_7.js +12 -8
- package/SVF-doxygen/html/html/search/all_9.js +1 -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 +2 -2
- package/SVF-doxygen/html/html/search/all_f.js +3 -3
- package/SVF-doxygen/html/html/search/classes_0.js +2 -1
- package/SVF-doxygen/html/html/search/functions_0.js +5 -4
- package/SVF-doxygen/html/html/search/functions_10.js +2 -2
- package/SVF-doxygen/html/html/search/functions_11.js +1 -1
- package/SVF-doxygen/html/html/search/functions_13.js +1 -1
- package/SVF-doxygen/html/html/search/functions_2.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +12 -8
- package/SVF-doxygen/html/html/search/functions_b.js +1 -1
- package/SVF-doxygen/html/html/search/functions_d.js +1 -1
- package/SVF-doxygen/html/html/search/related_4.js +1 -2
- package/SVF-doxygen/html/html/search/related_5.js +2 -1
- package/SVF-doxygen/html/html/search/related_6.js +1 -4
- package/SVF-doxygen/html/html/search/related_7.js +4 -1
- package/SVF-doxygen/html/html/search/related_8.js +1 -5
- package/SVF-doxygen/html/html/search/related_9.js +6 -2
- package/SVF-doxygen/html/html/search/related_a.js +2 -1
- package/SVF-doxygen/html/html/search/related_b.html +26 -0
- package/SVF-doxygen/html/html/search/related_b.js +5 -0
- package/SVF-doxygen/html/html/search/searchdata.js +1 -1
- package/SVF-doxygen/html/html/search/variables_14.js +3 -3
- package/SVF-doxygen/html/html/search/variables_15.js +1 -1
- package/SVF-doxygen/html/html/search/variables_c.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +2 -2
- package/SVF-doxygen/html/html/search/variables_f.js +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +3 -3
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1LocationSet_01_4.html +2 -2
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +2 -2
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +2 -2
- package/images/svf-stat.pdf +0 -0
- package/include/Graphs/ConsG.h +1 -1
- package/include/Graphs/ConsGEdge.h +2 -2
- package/include/Graphs/ICFGNode.h +2 -2
- package/include/Graphs/VFG.h +4 -4
- package/include/MemoryModel/LocationSet.h +3 -3
- package/include/MemoryModel/SVFIR.h +1 -1
- package/include/MemoryModel/SVFStatements.h +378 -308
- package/include/MemoryModel/SVFVariables.h +31 -30
- package/include/SVF-FE/DCHG.h +3 -3
- package/include/SVF-FE/SVFIRBuilder.h +2 -2
- package/include/Util/IRAnnotator.h +1 -1
- package/lib/Graphs/ConsG.cpp +25 -25
- package/lib/Graphs/VFG.cpp +10 -10
- package/lib/MSSA/MemRegion.cpp +5 -5
- package/lib/MemoryModel/LocationSet.cpp +2 -2
- package/lib/MemoryModel/PAGBuilderFromFile.cpp +1 -1
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
- package/lib/MemoryModel/SVFIR.cpp +9 -9
- package/lib/MemoryModel/SVFStatements.cpp +11 -11
- package/lib/MemoryModel/SVFVariables.cpp +2 -2
- package/lib/MemoryModel/SymbolTableInfo.cpp +2 -2
- package/lib/SVF-FE/DCHG.cpp +1 -1
- package/lib/SVF-FE/Graph2Json.cpp +1 -1
- package/lib/SVF-FE/SVFIRBuilder.cpp +4 -4
- package/lib/Util/TypeBasedHeapCloning.cpp +5 -5
- package/lib/WPA/AndersenSFR.cpp +2 -2
- package/lib/WPA/CSC.cpp +2 -2
- package/lib/WPA/FlowSensitiveTBHC.cpp +3 -3
- package/package.json +1 -1
|
@@ -45,6 +45,9 @@ class SVFVar;
|
|
|
45
45
|
typedef GenericNode<SVFVar,SVFStmt> GenericPAGNodeTy;
|
|
46
46
|
class SVFVar : public GenericPAGNodeTy
|
|
47
47
|
{
|
|
48
|
+
friend class IRGraph;
|
|
49
|
+
friend class SVFIR;
|
|
50
|
+
friend class VFG;
|
|
48
51
|
|
|
49
52
|
public:
|
|
50
53
|
/// Nine kinds of SVFIR variables
|
|
@@ -162,13 +165,11 @@ public:
|
|
|
162
165
|
{
|
|
163
166
|
return InEdgeKindToSetMap[kind];
|
|
164
167
|
}
|
|
165
|
-
|
|
166
168
|
/// Get outgoing SVFIR statements (edges)
|
|
167
169
|
inline SVFStmt::SVFStmtSetTy& getOutgoingEdges(SVFStmt::PEDGEK kind)
|
|
168
170
|
{
|
|
169
171
|
return OutEdgeKindToSetMap[kind];
|
|
170
172
|
}
|
|
171
|
-
|
|
172
173
|
/// Has incoming SVFIR statements (edges)
|
|
173
174
|
inline bool hasIncomingEdges(SVFStmt::PEDGEK kind) const
|
|
174
175
|
{
|
|
@@ -178,18 +179,16 @@ public:
|
|
|
178
179
|
else
|
|
179
180
|
return false;
|
|
180
181
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
inline bool hasIncomingVariantGepEdge() const
|
|
182
|
+
/// Has outgoing SVFIR statements (edges)
|
|
183
|
+
inline bool hasOutgoingEdges(SVFStmt::PEDGEK kind) const
|
|
184
184
|
{
|
|
185
|
-
SVFStmt::KindToSVFStmtMapTy::const_iterator it =
|
|
186
|
-
if (it !=
|
|
187
|
-
{
|
|
185
|
+
SVFStmt::KindToSVFStmtMapTy::const_iterator it = OutEdgeKindToSetMap.find(kind);
|
|
186
|
+
if (it != OutEdgeKindToSetMap.end())
|
|
188
187
|
return (!it->second.empty());
|
|
189
|
-
|
|
190
|
-
|
|
188
|
+
else
|
|
189
|
+
return false;
|
|
191
190
|
}
|
|
192
|
-
|
|
191
|
+
|
|
193
192
|
/// Get incoming SVFStmt iterator
|
|
194
193
|
inline SVFStmt::SVFStmtSetTy::iterator getIncomingEdgesBegin(SVFStmt::PEDGEK kind) const
|
|
195
194
|
{
|
|
@@ -206,16 +205,6 @@ public:
|
|
|
206
205
|
return it->second.end();
|
|
207
206
|
}
|
|
208
207
|
|
|
209
|
-
/// Has outgoing SVFIR statements (edges)
|
|
210
|
-
inline bool hasOutgoingEdges(SVFStmt::PEDGEK kind) const
|
|
211
|
-
{
|
|
212
|
-
SVFStmt::KindToSVFStmtMapTy::const_iterator it = OutEdgeKindToSetMap.find(kind);
|
|
213
|
-
if (it != OutEdgeKindToSetMap.end())
|
|
214
|
-
return (!it->second.empty());
|
|
215
|
-
else
|
|
216
|
-
return false;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
208
|
/// Get outgoing SVFStmt iterator
|
|
220
209
|
inline SVFStmt::SVFStmtSetTy::iterator getOutgoingEdgesBegin(SVFStmt::PEDGEK kind) const
|
|
221
210
|
{
|
|
@@ -233,6 +222,7 @@ public:
|
|
|
233
222
|
}
|
|
234
223
|
//@}
|
|
235
224
|
|
|
225
|
+
private:
|
|
236
226
|
/// add methods of the components
|
|
237
227
|
//@{
|
|
238
228
|
inline void addInEdge(SVFStmt* inEdge)
|
|
@@ -248,7 +238,18 @@ public:
|
|
|
248
238
|
OutEdgeKindToSetMap[kind].insert(outEdge);
|
|
249
239
|
addOutgoingEdge(outEdge);
|
|
250
240
|
}
|
|
241
|
+
/// Has incoming VariantGepEdges
|
|
242
|
+
inline bool hasIncomingVariantGepEdge() const
|
|
243
|
+
{
|
|
244
|
+
SVFStmt::KindToSVFStmtMapTy::const_iterator it = InEdgeKindToSetMap.find(SVFStmt::VariantGep);
|
|
245
|
+
if (it != InEdgeKindToSetMap.end())
|
|
246
|
+
{
|
|
247
|
+
return (!it->second.empty());
|
|
248
|
+
}
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
251
|
|
|
252
|
+
public:
|
|
252
253
|
virtual const std::string toString() const;
|
|
253
254
|
|
|
254
255
|
/// Dump to console for debugging
|
|
@@ -417,17 +418,17 @@ public:
|
|
|
417
418
|
}
|
|
418
419
|
|
|
419
420
|
/// offset of the base value variable
|
|
420
|
-
inline u32_t
|
|
421
|
+
inline u32_t getFieldOffset() const
|
|
421
422
|
{
|
|
422
|
-
return ls.
|
|
423
|
+
return ls.accumulateConstantFieldIdx();
|
|
423
424
|
}
|
|
424
425
|
|
|
425
426
|
/// Return name of a LLVM value
|
|
426
427
|
inline const std::string getValueName() const
|
|
427
428
|
{
|
|
428
429
|
if (value && value->hasName())
|
|
429
|
-
return value->getName().str() + "_" + llvm::utostr(
|
|
430
|
-
return "offset_" + llvm::utostr(
|
|
430
|
+
return value->getName().str() + "_" + llvm::utostr(getFieldOffset());
|
|
431
|
+
return "offset_" + llvm::utostr(getFieldOffset());
|
|
431
432
|
}
|
|
432
433
|
|
|
433
434
|
inline const Type* getType() const
|
|
@@ -492,9 +493,9 @@ public:
|
|
|
492
493
|
}
|
|
493
494
|
|
|
494
495
|
/// offset of the mem object
|
|
495
|
-
inline u32_t
|
|
496
|
+
inline u32_t getFieldOffset() const
|
|
496
497
|
{
|
|
497
|
-
return ls.
|
|
498
|
+
return ls.accumulateConstantFieldIdx();
|
|
498
499
|
}
|
|
499
500
|
|
|
500
501
|
/// Set the base object from which this GEP node came from.
|
|
@@ -512,15 +513,15 @@ public:
|
|
|
512
513
|
/// Return the type of this gep object
|
|
513
514
|
inline virtual const Type* getType() const
|
|
514
515
|
{
|
|
515
|
-
return SymbolTableInfo::SymbolInfo()->getOriginalFieldType(mem->getType(), ls.
|
|
516
|
+
return SymbolTableInfo::SymbolInfo()->getOriginalFieldType(mem->getType(), ls.accumulateConstantFieldIdx());
|
|
516
517
|
}
|
|
517
518
|
|
|
518
519
|
/// Return name of a LLVM value
|
|
519
520
|
inline const std::string getValueName() const
|
|
520
521
|
{
|
|
521
522
|
if (value && value->hasName())
|
|
522
|
-
return value->getName().str() + "_" + llvm::itostr(ls.
|
|
523
|
-
return "offset_" + llvm::itostr(ls.
|
|
523
|
+
return value->getName().str() + "_" + llvm::itostr(ls.accumulateConstantFieldIdx());
|
|
524
|
+
return "offset_" + llvm::itostr(ls.accumulateConstantFieldIdx());
|
|
524
525
|
}
|
|
525
526
|
|
|
526
527
|
virtual const std::string toString() const;
|
package/include/SVF-FE/DCHG.h
CHANGED
|
@@ -46,18 +46,18 @@ public:
|
|
|
46
46
|
{
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
u32_t getFieldOffset(void) const
|
|
50
50
|
{
|
|
51
51
|
return offset;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
void setOffset(
|
|
54
|
+
void setOffset(u32_t offset)
|
|
55
55
|
{
|
|
56
56
|
this->offset = offset;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
private:
|
|
60
|
-
|
|
60
|
+
u32_t offset;
|
|
61
61
|
};
|
|
62
62
|
|
|
63
63
|
class DCHNode : public GenericNode<DCHNode, DCHEdge>
|
|
@@ -381,9 +381,9 @@ public:
|
|
|
381
381
|
return edge;
|
|
382
382
|
}
|
|
383
383
|
/// Add Variant(Gep) edge
|
|
384
|
-
inline VariantGepStmt* addVariantGepEdge(NodeID src, NodeID dst)
|
|
384
|
+
inline VariantGepStmt* addVariantGepEdge(NodeID src, NodeID dst, const LocationSet& ls)
|
|
385
385
|
{
|
|
386
|
-
VariantGepStmt *edge = pag->addVariantGepStmt(src, dst);
|
|
386
|
+
VariantGepStmt *edge = pag->addVariantGepStmt(src, dst, ls);
|
|
387
387
|
setCurrentBBAndValueForPAGEdge(edge);
|
|
388
388
|
return edge;
|
|
389
389
|
}
|
|
@@ -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->getFieldOffset();
|
|
68
68
|
|
|
69
69
|
LLVMContext &context = mainModule->getContext();
|
|
70
70
|
llvm::SmallVector<llvm::Metadata *, 32> operands;
|
package/lib/Graphs/ConsG.cpp
CHANGED
|
@@ -53,16 +53,16 @@ void ConstraintGraph::buildCG()
|
|
|
53
53
|
for (PAGEdge::SVFStmtSetTy::iterator iter = addrs.begin(), eiter =
|
|
54
54
|
addrs.end(); iter != eiter; ++iter)
|
|
55
55
|
{
|
|
56
|
-
|
|
57
|
-
addAddrCGEdge(edge->
|
|
56
|
+
const AddrStmt* edge = SVFUtil::cast<AddrStmt>(*iter);
|
|
57
|
+
addAddrCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
PAGEdge::SVFStmtSetTy& copys = getPAGEdgeSet(PAGEdge::Copy);
|
|
61
61
|
for (PAGEdge::SVFStmtSetTy::iterator iter = copys.begin(), eiter =
|
|
62
62
|
copys.end(); iter != eiter; ++iter)
|
|
63
63
|
{
|
|
64
|
-
|
|
65
|
-
addCopyCGEdge(edge->
|
|
64
|
+
const CopyStmt* edge = SVFUtil::cast<CopyStmt>(*iter);
|
|
65
|
+
addCopyCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
PAGEdge::SVFStmtSetTy& phis = getPAGEdgeSet(PAGEdge::Phi);
|
|
@@ -78,32 +78,32 @@ void ConstraintGraph::buildCG()
|
|
|
78
78
|
for (PAGEdge::SVFStmtSetTy::iterator iter = calls.begin(), eiter =
|
|
79
79
|
calls.end(); iter != eiter; ++iter)
|
|
80
80
|
{
|
|
81
|
-
|
|
82
|
-
addCopyCGEdge(edge->
|
|
81
|
+
const CallPE* edge = SVFUtil::cast<CallPE>(*iter);
|
|
82
|
+
addCopyCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
PAGEdge::SVFStmtSetTy& rets = getPAGEdgeSet(PAGEdge::Ret);
|
|
86
86
|
for (PAGEdge::SVFStmtSetTy::iterator iter = rets.begin(), eiter =
|
|
87
87
|
rets.end(); iter != eiter; ++iter)
|
|
88
88
|
{
|
|
89
|
-
|
|
90
|
-
addCopyCGEdge(edge->
|
|
89
|
+
const RetPE* edge = SVFUtil::cast<RetPE>(*iter);
|
|
90
|
+
addCopyCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
PAGEdge::SVFStmtSetTy& tdfks = getPAGEdgeSet(PAGEdge::ThreadFork);
|
|
94
94
|
for (PAGEdge::SVFStmtSetTy::iterator iter = tdfks.begin(), eiter =
|
|
95
95
|
tdfks.end(); iter != eiter; ++iter)
|
|
96
96
|
{
|
|
97
|
-
|
|
98
|
-
addCopyCGEdge(edge->
|
|
97
|
+
const TDForkPE* edge = SVFUtil::cast<TDForkPE>(*iter);
|
|
98
|
+
addCopyCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
PAGEdge::SVFStmtSetTy& tdjns = getPAGEdgeSet(PAGEdge::ThreadJoin);
|
|
102
102
|
for (PAGEdge::SVFStmtSetTy::iterator iter = tdjns.begin(), eiter =
|
|
103
103
|
tdjns.end(); iter != eiter; ++iter)
|
|
104
104
|
{
|
|
105
|
-
|
|
106
|
-
addCopyCGEdge(edge->
|
|
105
|
+
const TDJoinPE* edge = SVFUtil::cast<TDJoinPE>(*iter);
|
|
106
|
+
addCopyCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
PAGEdge::SVFStmtSetTy& ngeps = getPAGEdgeSet(PAGEdge::NormalGep);
|
|
@@ -111,7 +111,7 @@ void ConstraintGraph::buildCG()
|
|
|
111
111
|
ngeps.end(); iter != eiter; ++iter)
|
|
112
112
|
{
|
|
113
113
|
NormalGepStmt* edge = SVFUtil::cast<NormalGepStmt>(*iter);
|
|
114
|
-
addNormalGepCGEdge(edge->
|
|
114
|
+
addNormalGepCGEdge(edge->getRHSVarID(),edge->getLHSVarID(),edge->getLocationSet());
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
PAGEdge::SVFStmtSetTy& vgeps = getPAGEdgeSet(PAGEdge::VariantGep);
|
|
@@ -119,23 +119,23 @@ void ConstraintGraph::buildCG()
|
|
|
119
119
|
vgeps.end(); iter != eiter; ++iter)
|
|
120
120
|
{
|
|
121
121
|
VariantGepStmt* edge = SVFUtil::cast<VariantGepStmt>(*iter);
|
|
122
|
-
addVariantGepCGEdge(edge->
|
|
122
|
+
addVariantGepCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
-
PAGEdge::SVFStmtSetTy&
|
|
126
|
-
for (PAGEdge::SVFStmtSetTy::iterator iter =
|
|
127
|
-
|
|
125
|
+
PAGEdge::SVFStmtSetTy& loads = getPAGEdgeSet(PAGEdge::Load);
|
|
126
|
+
for (PAGEdge::SVFStmtSetTy::iterator iter = loads.begin(), eiter =
|
|
127
|
+
loads.end(); iter != eiter; ++iter)
|
|
128
128
|
{
|
|
129
|
-
|
|
130
|
-
addLoadCGEdge(edge->
|
|
129
|
+
LoadStmt* edge = SVFUtil::cast<LoadStmt>(*iter);
|
|
130
|
+
addLoadCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
PAGEdge::SVFStmtSetTy&
|
|
134
|
-
for (PAGEdge::SVFStmtSetTy::iterator iter =
|
|
135
|
-
|
|
133
|
+
PAGEdge::SVFStmtSetTy& stores = getPAGEdgeSet(PAGEdge::Store);
|
|
134
|
+
for (PAGEdge::SVFStmtSetTy::iterator iter = stores.begin(), eiter =
|
|
135
|
+
stores.end(); iter != eiter; ++iter)
|
|
136
136
|
{
|
|
137
|
-
|
|
138
|
-
addStoreCGEdge(edge->
|
|
137
|
+
StoreStmt* edge = SVFUtil::cast<StoreStmt>(*iter);
|
|
138
|
+
addStoreCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
|
|
@@ -562,7 +562,7 @@ void ConstraintGraph::print()
|
|
|
562
562
|
}
|
|
563
563
|
else if (NormalGepCGEdge* ngep = SVFUtil::dyn_cast<NormalGepCGEdge>(*iter))
|
|
564
564
|
{
|
|
565
|
-
outs() << ngep->getSrcID() << " -- NormalGep (" << ngep->
|
|
565
|
+
outs() << ngep->getSrcID() << " -- NormalGep (" << ngep->getFieldOffset()
|
|
566
566
|
<< ") --> " << ngep->getDstID() << "\n";
|
|
567
567
|
}
|
|
568
568
|
else if (VariantGepCGEdge* vgep = SVFUtil::dyn_cast<VariantGepCGEdge>(*iter))
|
package/lib/Graphs/VFG.cpp
CHANGED
|
@@ -389,7 +389,7 @@ void VFG::addVFGNodes()
|
|
|
389
389
|
forks.end(); iter != eiter; ++iter)
|
|
390
390
|
{
|
|
391
391
|
TDForkPE* forkedge = SVFUtil::cast<TDForkPE>(*iter);
|
|
392
|
-
addActualParmVFGNode(forkedge->
|
|
392
|
+
addActualParmVFGNode(forkedge->getRHSVar(),forkedge->getCallSite());
|
|
393
393
|
}
|
|
394
394
|
|
|
395
395
|
// initialize actual parameter nodes
|
|
@@ -435,7 +435,7 @@ void VFG::addVFGNodes()
|
|
|
435
435
|
param->getIncomingEdgesEnd(PAGEdge::Call); cit != ecit; ++cit)
|
|
436
436
|
{
|
|
437
437
|
CallPE* callPE = SVFUtil::cast<CallPE>(*cit);
|
|
438
|
-
if (isInterestedPAGNode(callPE->
|
|
438
|
+
if (isInterestedPAGNode(callPE->getRHSVar()))
|
|
439
439
|
callPEs.insert(callPE);
|
|
440
440
|
}
|
|
441
441
|
}
|
|
@@ -455,7 +455,7 @@ void VFG::addVFGNodes()
|
|
|
455
455
|
ecit = varParam->getIncomingEdgesEnd(PAGEdge::Call); cit!=ecit; ++cit)
|
|
456
456
|
{
|
|
457
457
|
CallPE* callPE = SVFUtil::cast<CallPE>(*cit);
|
|
458
|
-
if(isInterestedPAGNode(callPE->
|
|
458
|
+
if(isInterestedPAGNode(callPE->getRHSVar()))
|
|
459
459
|
callPEs.insert(callPE);
|
|
460
460
|
}
|
|
461
461
|
}
|
|
@@ -478,7 +478,7 @@ void VFG::addVFGNodes()
|
|
|
478
478
|
cit != ecit; ++cit)
|
|
479
479
|
{
|
|
480
480
|
const RetPE* retPE = SVFUtil::cast<RetPE>(*cit);
|
|
481
|
-
if (isInterestedPAGNode(retPE->
|
|
481
|
+
if (isInterestedPAGNode(retPE->getLHSVar()))
|
|
482
482
|
retPEs.insert(retPE);
|
|
483
483
|
}
|
|
484
484
|
}
|
|
@@ -667,7 +667,7 @@ void VFG::connectDirectVFGEdges()
|
|
|
667
667
|
it!=eit; ++it)
|
|
668
668
|
{
|
|
669
669
|
const CallBlockNode* cs = (*it)->getCallSite();
|
|
670
|
-
ActualParmVFGNode* acutalParm = getActualParmVFGNode((*it)->
|
|
670
|
+
ActualParmVFGNode* acutalParm = getActualParmVFGNode((*it)->getRHSVar(),cs);
|
|
671
671
|
addInterEdgeFromAPToFP(acutalParm,formalParm,getCallSiteID(cs, formalParm->getFun()));
|
|
672
672
|
}
|
|
673
673
|
}
|
|
@@ -679,7 +679,7 @@ void VFG::connectDirectVFGEdges()
|
|
|
679
679
|
/// connect formal ret to actual ret
|
|
680
680
|
for(RetPESet::const_iterator it = calleeRet->retPEBegin(), eit = calleeRet->retPEEnd(); it!=eit; ++it)
|
|
681
681
|
{
|
|
682
|
-
ActualRetVFGNode* callsiteRev = getActualRetVFGNode((*it)->
|
|
682
|
+
ActualRetVFGNode* callsiteRev = getActualRetVFGNode((*it)->getLHSVar());
|
|
683
683
|
const CallBlockNode* retBlockNode = (*it)->getCallSite();
|
|
684
684
|
CallBlockNode* callBlockNode = pag->getICFG()->getCallBlockNode(retBlockNode->getCallSite());
|
|
685
685
|
addInterEdgeFromFRToAR(calleeRet,callsiteRev, getCallSiteID(callBlockNode, calleeRet->getFun()));
|
|
@@ -697,8 +697,8 @@ void VFG::connectDirectVFGEdges()
|
|
|
697
697
|
forks.end(); iter != eiter; ++iter)
|
|
698
698
|
{
|
|
699
699
|
TDForkPE* forkedge = SVFUtil::cast<TDForkPE>(*iter);
|
|
700
|
-
ActualParmVFGNode* acutalParm = getActualParmVFGNode(forkedge->
|
|
701
|
-
FormalParmVFGNode* formalParm = getFormalParmVFGNode(forkedge->
|
|
700
|
+
ActualParmVFGNode* acutalParm = getActualParmVFGNode(forkedge->getRHSVar(),forkedge->getCallSite());
|
|
701
|
+
FormalParmVFGNode* formalParm = getFormalParmVFGNode(forkedge->getLHSVar());
|
|
702
702
|
addInterEdgeFromAPToFP(acutalParm,formalParm,getCallSiteID(forkedge->getCallSite(), formalParm->getFun()));
|
|
703
703
|
}
|
|
704
704
|
/// add join edge
|
|
@@ -707,8 +707,8 @@ void VFG::connectDirectVFGEdges()
|
|
|
707
707
|
joins.end(); iter != eiter; ++iter)
|
|
708
708
|
{
|
|
709
709
|
TDJoinPE* joinedge = SVFUtil::cast<TDJoinPE>(*iter);
|
|
710
|
-
NodeID callsiteRev = getDef(joinedge->
|
|
711
|
-
FormalRetVFGNode* calleeRet = getFormalRetVFGNode(joinedge->
|
|
710
|
+
NodeID callsiteRev = getDef(joinedge->getLHSVar());
|
|
711
|
+
FormalRetVFGNode* calleeRet = getFormalRetVFGNode(joinedge->getRHSVar());
|
|
712
712
|
addRetEdge(calleeRet->getId(),callsiteRev, getCallSiteID(joinedge->getCallSite(), calleeRet->getFun()));
|
|
713
713
|
}
|
|
714
714
|
}
|
package/lib/MSSA/MemRegion.cpp
CHANGED
|
@@ -198,7 +198,7 @@ void MRGenerator::collectModRefForLoadStore()
|
|
|
198
198
|
pagEdgeToFunMap[inst] = &fun;
|
|
199
199
|
if (const StoreStmt *st = SVFUtil::dyn_cast<StoreStmt>(inst))
|
|
200
200
|
{
|
|
201
|
-
NodeBS cpts(pta->getPts(st->
|
|
201
|
+
NodeBS cpts(pta->getPts(st->getLHSVarID()).toNodeBS());
|
|
202
202
|
// TODO: change this assertion check later when we have conditional points-to set
|
|
203
203
|
if (cpts.empty())
|
|
204
204
|
continue;
|
|
@@ -208,7 +208,7 @@ void MRGenerator::collectModRefForLoadStore()
|
|
|
208
208
|
|
|
209
209
|
else if (const LoadStmt *ld = SVFUtil::dyn_cast<LoadStmt>(inst))
|
|
210
210
|
{
|
|
211
|
-
NodeBS cpts(pta->getPts(ld->
|
|
211
|
+
NodeBS cpts(pta->getPts(ld->getRHSVarID()).toNodeBS());
|
|
212
212
|
// TODO: change this assertion check later when we have conditional points-to set
|
|
213
213
|
if (cpts.empty())
|
|
214
214
|
continue;
|
|
@@ -611,7 +611,7 @@ bool MRGenerator::handleCallsiteModRef(NodeBS& mod, NodeBS& ref, const CallBlock
|
|
|
611
611
|
{
|
|
612
612
|
const PAGEdge* edge = *bit;
|
|
613
613
|
if (const AddrStmt* addr = SVFUtil::dyn_cast<AddrStmt>(edge))
|
|
614
|
-
mod.set(addr->
|
|
614
|
+
mod.set(addr->getRHSVarID());
|
|
615
615
|
}
|
|
616
616
|
}
|
|
617
617
|
/// otherwise, we find the mod/ref sets from the callee function, who has definition and been processed
|
|
@@ -678,7 +678,7 @@ NodeBS MRGenerator::getModInfoForCall(const CallBlockNode* cs)
|
|
|
678
678
|
{
|
|
679
679
|
const PAGEdge* edge = *bit;
|
|
680
680
|
if (const StoreStmt* st = SVFUtil::dyn_cast<StoreStmt>(edge))
|
|
681
|
-
mods |= pta->getPts(st->
|
|
681
|
+
mods |= pta->getPts(st->getLHSVarID()).toNodeBS();
|
|
682
682
|
}
|
|
683
683
|
return mods;
|
|
684
684
|
}
|
|
@@ -702,7 +702,7 @@ NodeBS MRGenerator::getRefInfoForCall(const CallBlockNode* cs)
|
|
|
702
702
|
{
|
|
703
703
|
const PAGEdge* edge = *bit;
|
|
704
704
|
if (const LoadStmt* ld = SVFUtil::dyn_cast<LoadStmt>(edge))
|
|
705
|
-
refs |= pta->getPts(ld->
|
|
705
|
+
refs |= pta->getPts(ld->getRHSVarID()).toNodeBS();
|
|
706
706
|
}
|
|
707
707
|
return refs;
|
|
708
708
|
}
|
|
@@ -65,7 +65,7 @@ bool LocationSet::isConstantOffset() const
|
|
|
65
65
|
NodeBS LocationSet::computeAllLocations() const
|
|
66
66
|
{
|
|
67
67
|
NodeBS result;
|
|
68
|
-
result.set(
|
|
68
|
+
result.set(accumulateConstantFieldIdx());
|
|
69
69
|
return result;
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -96,7 +96,7 @@ std::string LocationSet::dump() const
|
|
|
96
96
|
std::string str;
|
|
97
97
|
raw_string_ostream rawstr(str);
|
|
98
98
|
|
|
99
|
-
rawstr << "LocationSet\tField_Index: " <<
|
|
99
|
+
rawstr << "LocationSet\tField_Index: " << accumulateConstantFieldIdx();
|
|
100
100
|
rawstr << ",\tNum-Stride: {";
|
|
101
101
|
const OffsetValueVec& vec = getOffsetValueVec();
|
|
102
102
|
OffsetValueVec::const_iterator it = vec.begin();
|
|
@@ -171,7 +171,7 @@ void PAGBuilderFromFile::addEdge(NodeID srcID, NodeID dstID,
|
|
|
171
171
|
else if (edge == "gep")
|
|
172
172
|
pag->addNormalGepStmt(srcID, dstID, LocationSet(offsetOrCSId));
|
|
173
173
|
else if (edge == "variant-gep")
|
|
174
|
-
pag->addVariantGepStmt(srcID, dstID);
|
|
174
|
+
pag->addVariantGepStmt(srcID, dstID, LocationSet(offsetOrCSId));
|
|
175
175
|
else if (edge == "call")
|
|
176
176
|
pag->addEdge(srcNode, dstNode, new CallPE(srcNode, dstNode, nullptr));
|
|
177
177
|
else if (edge == "ret")
|
|
@@ -154,7 +154,7 @@ void BVDataPTAImpl::writeToFile(const string& filename)
|
|
|
154
154
|
{
|
|
155
155
|
F.os() << it->first << " ";
|
|
156
156
|
F.os() << pag->getBaseObjVar(it->first) << " ";
|
|
157
|
-
F.os() << gepObjPN->
|
|
157
|
+
F.os() << gepObjPN->getFieldOffset() << "\n";
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
160
|
|
|
@@ -313,7 +313,7 @@ GepStmt* SVFIR::addGepStmt(NodeID src, NodeID dst, const LocationSet& ls, bool c
|
|
|
313
313
|
{
|
|
314
314
|
/// Since the offset from base to src is variant,
|
|
315
315
|
/// the new gep edge being created is also a VariantGepStmt edge.
|
|
316
|
-
return addVariantGepStmt(src, dst);
|
|
316
|
+
return addVariantGepStmt(src, dst, ls);
|
|
317
317
|
}
|
|
318
318
|
else
|
|
319
319
|
{
|
|
@@ -333,7 +333,7 @@ NormalGepStmt* SVFIR::addNormalGepStmt(NodeID src, NodeID dst, const LocationSet
|
|
|
333
333
|
return SVFUtil::cast<NormalGepStmt>(edge);
|
|
334
334
|
else
|
|
335
335
|
{
|
|
336
|
-
NormalGepStmt* gepPE = new NormalGepStmt(baseNode, dstNode, ls
|
|
336
|
+
NormalGepStmt* gepPE = new NormalGepStmt(baseNode, dstNode, baseLS+ls);
|
|
337
337
|
addToStmt2TypeMap(gepPE);
|
|
338
338
|
addEdge(baseNode, dstNode, gepPE);
|
|
339
339
|
return gepPE;
|
|
@@ -344,16 +344,16 @@ NormalGepStmt* SVFIR::addNormalGepStmt(NodeID src, NodeID dst, const LocationSet
|
|
|
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
|
-
VariantGepStmt* SVFIR::addVariantGepStmt(NodeID src, NodeID dst)
|
|
347
|
+
VariantGepStmt* SVFIR::addVariantGepStmt(NodeID src, NodeID dst, const LocationSet& ls)
|
|
348
348
|
{
|
|
349
|
-
|
|
349
|
+
const LocationSet& baseLS = getLocationSetFromBaseNode(src);
|
|
350
350
|
SVFVar* baseNode = getGNode(getBaseValVar(src));
|
|
351
351
|
SVFVar* dstNode = getGNode(dst);
|
|
352
352
|
if(SVFStmt* edge = hasNonlabeledEdge(baseNode, dstNode, SVFStmt::VariantGep))
|
|
353
353
|
return SVFUtil::cast<VariantGepStmt>(edge);
|
|
354
354
|
else
|
|
355
355
|
{
|
|
356
|
-
VariantGepStmt* gepPE = new VariantGepStmt(baseNode, dstNode);
|
|
356
|
+
VariantGepStmt* gepPE = new VariantGepStmt(baseNode, dstNode,baseLS+ls);
|
|
357
357
|
addToStmt2TypeMap(gepPE);
|
|
358
358
|
addEdge(baseNode, dstNode, gepPE);
|
|
359
359
|
return gepPE;
|
|
@@ -413,7 +413,7 @@ NodeID SVFIR::getGepObjVar(const MemObj* obj, const LocationSet& ls)
|
|
|
413
413
|
LocationSet newLS = SymbolTableInfo::SymbolInfo()->getModulusOffset(obj,ls);
|
|
414
414
|
|
|
415
415
|
// Base and first field are the same memory location.
|
|
416
|
-
if (Options::FirstFieldEqBase && newLS.
|
|
416
|
+
if (Options::FirstFieldEqBase && newLS.accumulateConstantFieldIdx() == 0) return base;
|
|
417
417
|
|
|
418
418
|
NodeLocationSetMap::iterator iter = GepObjVarMap.find(std::make_pair(base, newLS));
|
|
419
419
|
if (iter == GepObjVarMap.end())
|
|
@@ -433,7 +433,7 @@ NodeID SVFIR::addGepObjNode(const MemObj* obj, const LocationSet& ls)
|
|
|
433
433
|
assert(0==GepObjVarMap.count(std::make_pair(base, ls))
|
|
434
434
|
&& "this node should not be created before");
|
|
435
435
|
|
|
436
|
-
NodeID gepId = NodeIDAllocator::get()->allocateGepObjectId(base, ls.
|
|
436
|
+
NodeID gepId = NodeIDAllocator::get()->allocateGepObjectId(base, ls.accumulateConstantFieldIdx(), StInfo::getMaxFieldLimit());
|
|
437
437
|
GepObjVarMap[std::make_pair(base, ls)] = gepId;
|
|
438
438
|
GepObjVar *node = new GepObjVar(obj, gepId, ls);
|
|
439
439
|
memToFieldsMap[base].set(gepId);
|
|
@@ -611,8 +611,8 @@ void SVFIR::print()
|
|
|
611
611
|
ngeps.end(); iter != eiter; ++iter)
|
|
612
612
|
{
|
|
613
613
|
NormalGepStmt* gep = SVFUtil::cast<NormalGepStmt>(*iter);
|
|
614
|
-
outs() << gep->
|
|
615
|
-
<< ") --> " << gep->
|
|
614
|
+
outs() << gep->getRHSVarID() << " -- NormalGep (" << gep->getFieldOffset()
|
|
615
|
+
<< ") --> " << gep->getLHSVarID() << "\n";
|
|
616
616
|
}
|
|
617
617
|
|
|
618
618
|
SVFStmt::SVFStmtSetTy& vgeps = pag->getSVFStmtSet(SVFStmt::VariantGep);
|
|
@@ -68,7 +68,7 @@ const std::string SVFStmt::toString() const {
|
|
|
68
68
|
const std::string AddrStmt::toString() const{
|
|
69
69
|
std::string str;
|
|
70
70
|
raw_string_ostream rawstr(str);
|
|
71
|
-
rawstr << "AddrStmt: [" <<
|
|
71
|
+
rawstr << "AddrStmt: [" << getLHSVarID() << "<--" << getRHSVarID() << "]\t";
|
|
72
72
|
if (Options::PAGDotGraphShorter) {
|
|
73
73
|
rawstr << "\n";
|
|
74
74
|
}
|
|
@@ -79,7 +79,7 @@ const std::string AddrStmt::toString() const{
|
|
|
79
79
|
const std::string CopyStmt::toString() const{
|
|
80
80
|
std::string str;
|
|
81
81
|
raw_string_ostream rawstr(str);
|
|
82
|
-
rawstr << "CopyStmt: [" <<
|
|
82
|
+
rawstr << "CopyStmt: [" << getLHSVarID() << "<--" << getRHSVarID() << "]\t";
|
|
83
83
|
if (Options::PAGDotGraphShorter) {
|
|
84
84
|
rawstr << "\n";
|
|
85
85
|
}
|
|
@@ -149,7 +149,7 @@ const std::string BranchStmt::toString() const {
|
|
|
149
149
|
const std::string LoadStmt::toString() const{
|
|
150
150
|
std::string str;
|
|
151
151
|
raw_string_ostream rawstr(str);
|
|
152
|
-
rawstr << "LoadStmt: [" <<
|
|
152
|
+
rawstr << "LoadStmt: [" << getLHSVarID() << "<--" << getRHSVarID() << "]\t";
|
|
153
153
|
if (Options::PAGDotGraphShorter) {
|
|
154
154
|
rawstr << "\n";
|
|
155
155
|
}
|
|
@@ -160,7 +160,7 @@ const std::string LoadStmt::toString() const{
|
|
|
160
160
|
const std::string StoreStmt::toString() const{
|
|
161
161
|
std::string str;
|
|
162
162
|
raw_string_ostream rawstr(str);
|
|
163
|
-
rawstr << "StoreStmt: [" <<
|
|
163
|
+
rawstr << "StoreStmt: [" << getLHSVarID() << "<--" << getRHSVarID() << "]\t";
|
|
164
164
|
if (Options::PAGDotGraphShorter) {
|
|
165
165
|
rawstr << "\n";
|
|
166
166
|
}
|
|
@@ -171,7 +171,7 @@ const std::string StoreStmt::toString() const{
|
|
|
171
171
|
const std::string GepStmt::toString() const{
|
|
172
172
|
std::string str;
|
|
173
173
|
raw_string_ostream rawstr(str);
|
|
174
|
-
rawstr << "GepStmt: [" <<
|
|
174
|
+
rawstr << "GepStmt: [" << getLHSVarID() << "<--" << getRHSVarID() << "]\t";
|
|
175
175
|
if (Options::PAGDotGraphShorter) {
|
|
176
176
|
rawstr << "\n";
|
|
177
177
|
}
|
|
@@ -182,7 +182,7 @@ const std::string GepStmt::toString() const{
|
|
|
182
182
|
const std::string NormalGepStmt::toString() const{
|
|
183
183
|
std::string str;
|
|
184
184
|
raw_string_ostream rawstr(str);
|
|
185
|
-
rawstr << "NormalGepStmt: [" <<
|
|
185
|
+
rawstr << "NormalGepStmt: [" << getLHSVarID() << "<--" << getRHSVarID() << "]\t";
|
|
186
186
|
if (Options::PAGDotGraphShorter) {
|
|
187
187
|
rawstr << "\n";
|
|
188
188
|
}
|
|
@@ -193,7 +193,7 @@ const std::string NormalGepStmt::toString() const{
|
|
|
193
193
|
const std::string VariantGepStmt::toString() const{
|
|
194
194
|
std::string str;
|
|
195
195
|
raw_string_ostream rawstr(str);
|
|
196
|
-
rawstr << "VariantGepStmt: [" <<
|
|
196
|
+
rawstr << "VariantGepStmt: [" << getLHSVarID() << "<--" << getRHSVarID() << "]\t";
|
|
197
197
|
if (Options::PAGDotGraphShorter) {
|
|
198
198
|
rawstr << "\n";
|
|
199
199
|
}
|
|
@@ -204,7 +204,7 @@ const std::string VariantGepStmt::toString() const{
|
|
|
204
204
|
const std::string CallPE::toString() const{
|
|
205
205
|
std::string str;
|
|
206
206
|
raw_string_ostream rawstr(str);
|
|
207
|
-
rawstr << "CallPE: [" <<
|
|
207
|
+
rawstr << "CallPE: [" << getLHSVarID() << "<--" << getRHSVarID() << "]\t";
|
|
208
208
|
if (Options::PAGDotGraphShorter) {
|
|
209
209
|
rawstr << "\n";
|
|
210
210
|
}
|
|
@@ -215,7 +215,7 @@ const std::string CallPE::toString() const{
|
|
|
215
215
|
const std::string RetPE::toString() const{
|
|
216
216
|
std::string str;
|
|
217
217
|
raw_string_ostream rawstr(str);
|
|
218
|
-
rawstr << "RetPE: [" <<
|
|
218
|
+
rawstr << "RetPE: [" << getLHSVarID() << "<--" << getRHSVarID() << "]\t";
|
|
219
219
|
if (Options::PAGDotGraphShorter) {
|
|
220
220
|
rawstr << "\n";
|
|
221
221
|
}
|
|
@@ -226,7 +226,7 @@ const std::string RetPE::toString() const{
|
|
|
226
226
|
const std::string TDForkPE::toString() const{
|
|
227
227
|
std::string str;
|
|
228
228
|
raw_string_ostream rawstr(str);
|
|
229
|
-
rawstr << "TDForkPE: [" <<
|
|
229
|
+
rawstr << "TDForkPE: [" << getLHSVarID() << "<--" << getRHSVarID() << "]\t";
|
|
230
230
|
if (Options::PAGDotGraphShorter) {
|
|
231
231
|
rawstr << "\n";
|
|
232
232
|
}
|
|
@@ -237,7 +237,7 @@ const std::string TDForkPE::toString() const{
|
|
|
237
237
|
const std::string TDJoinPE::toString() const{
|
|
238
238
|
std::string str;
|
|
239
239
|
raw_string_ostream rawstr(str);
|
|
240
|
-
rawstr << "TDJoinPE: [" <<
|
|
240
|
+
rawstr << "TDJoinPE: [" << getLHSVarID() << "<--" << getRHSVarID() << "]\t";
|
|
241
241
|
if (Options::PAGDotGraphShorter) {
|
|
242
242
|
rawstr << "\n";
|
|
243
243
|
}
|
|
@@ -133,7 +133,7 @@ const std::string ObjVar::toString() const {
|
|
|
133
133
|
const std::string GepValVar::toString() const {
|
|
134
134
|
std::string str;
|
|
135
135
|
raw_string_ostream rawstr(str);
|
|
136
|
-
rawstr << "GepValVar ID: " << getId() << " with offset_" + llvm::utostr(
|
|
136
|
+
rawstr << "GepValVar ID: " << getId() << " with offset_" + llvm::utostr(getFieldOffset());
|
|
137
137
|
if (Options::PAGDotGraphShorter) {
|
|
138
138
|
rawstr << "\n";
|
|
139
139
|
}
|
|
@@ -144,7 +144,7 @@ const std::string GepValVar::toString() const {
|
|
|
144
144
|
const std::string GepObjVar::toString() const {
|
|
145
145
|
std::string str;
|
|
146
146
|
raw_string_ostream rawstr(str);
|
|
147
|
-
rawstr << "GepObjVar ID: " << getId() << " with offset_" + llvm::itostr(ls.
|
|
147
|
+
rawstr << "GepObjVar ID: " << getId() << " with offset_" + llvm::itostr(ls.accumulateConstantFieldIdx());
|
|
148
148
|
if (Options::PAGDotGraphShorter) {
|
|
149
149
|
rawstr << "\n";
|
|
150
150
|
}
|