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
|
@@ -279,9 +279,9 @@ Public Member Functions</h2></td></tr>
|
|
|
279
279
|
<tr class="memitem:ab56217d45668368157d272d7a524c40d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1NormalGepStmt.html">NormalGepStmt</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1SVFIRBuilder.html#ab56217d45668368157d272d7a524c40d">addNormalGepEdge</a> (<a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, const <a class="el" href="classSVF_1_1LocationSet.html">LocationSet</a> &ls)</td></tr>
|
|
280
280
|
<tr class="memdesc:ab56217d45668368157d272d7a524c40d"><td class="mdescLeft"> </td><td class="mdescRight">Add Offset(Gep) edge. <a href="#ab56217d45668368157d272d7a524c40d">More...</a><br /></td></tr>
|
|
281
281
|
<tr class="separator:ab56217d45668368157d272d7a524c40d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
282
|
-
<tr class="memitem:
|
|
283
|
-
<tr class="memdesc:
|
|
284
|
-
<tr class="separator:
|
|
282
|
+
<tr class="memitem:a3727f2df1c8a935898b19dfe5ae6ba7a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1VariantGepStmt.html">VariantGepStmt</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1SVFIRBuilder.html#a3727f2df1c8a935898b19dfe5ae6ba7a">addVariantGepEdge</a> (<a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, const <a class="el" href="classSVF_1_1LocationSet.html">LocationSet</a> &ls)</td></tr>
|
|
283
|
+
<tr class="memdesc:a3727f2df1c8a935898b19dfe5ae6ba7a"><td class="mdescLeft"> </td><td class="mdescRight">Add Variant(Gep) edge. <a href="#a3727f2df1c8a935898b19dfe5ae6ba7a">More...</a><br /></td></tr>
|
|
284
|
+
<tr class="separator:a3727f2df1c8a935898b19dfe5ae6ba7a"><td class="memSeparator" colspan="2"> </td></tr>
|
|
285
285
|
<tr class="memitem:a7a311f7789c6c7a028ad0f595c1e0295"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1TDForkPE.html">TDForkPE</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1SVFIRBuilder.html#a7a311f7789c6c7a028ad0f595c1e0295">addThreadForkEdge</a> (<a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, const <a class="el" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a> *cs)</td></tr>
|
|
286
286
|
<tr class="memdesc:a7a311f7789c6c7a028ad0f595c1e0295"><td class="mdescLeft"> </td><td class="mdescRight">Add Thread fork edge for parameter passing. <a href="#a7a311f7789c6c7a028ad0f595c1e0295">More...</a><br /></td></tr>
|
|
287
287
|
<tr class="separator:a7a311f7789c6c7a028ad0f595c1e0295"><td class="memSeparator" colspan="2"> </td></tr>
|
|
@@ -1313,8 +1313,8 @@ Private Attributes</h2></td></tr>
|
|
|
1313
1313
|
</div><!-- fragment -->
|
|
1314
1314
|
</div>
|
|
1315
1315
|
</div>
|
|
1316
|
-
<a id="
|
|
1317
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1316
|
+
<a id="a3727f2df1c8a935898b19dfe5ae6ba7a"></a>
|
|
1317
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a3727f2df1c8a935898b19dfe5ae6ba7a">◆ </a></span>addVariantGepEdge()</h2>
|
|
1318
1318
|
|
|
1319
1319
|
<div class="memitem">
|
|
1320
1320
|
<div class="memproto">
|
|
@@ -1332,7 +1332,13 @@ Private Attributes</h2></td></tr>
|
|
|
1332
1332
|
<td class="paramkey"></td>
|
|
1333
1333
|
<td></td>
|
|
1334
1334
|
<td class="paramtype"><a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1335
|
-
<td class="paramname"><em>dst</em
|
|
1335
|
+
<td class="paramname"><em>dst</em>, </td>
|
|
1336
|
+
</tr>
|
|
1337
|
+
<tr>
|
|
1338
|
+
<td class="paramkey"></td>
|
|
1339
|
+
<td></td>
|
|
1340
|
+
<td class="paramtype">const <a class="el" href="classSVF_1_1LocationSet.html">LocationSet</a> & </td>
|
|
1341
|
+
<td class="paramname"><em>ls</em> </td>
|
|
1336
1342
|
</tr>
|
|
1337
1343
|
<tr>
|
|
1338
1344
|
<td></td>
|
|
@@ -1350,7 +1356,7 @@ Private Attributes</h2></td></tr>
|
|
|
1350
1356
|
<p>Add Variant(Gep) edge. </p>
|
|
1351
1357
|
|
|
1352
1358
|
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00384">384</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
|
|
1353
|
-
<div class="fragment"><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  VariantGepStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#
|
|
1359
|
+
<div class="fragment"><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  VariantGepStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abbd4b6430444a91e991636abf189c00b">addVariantGepStmt</a>(src, dst, ls);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  }</div><div class="ttc" id="classSVF_1_1SVFIR_html_abbd4b6430444a91e991636abf189c00b"><div class="ttname"><a href="classSVF_1_1SVFIR.html#abbd4b6430444a91e991636abf189c00b">SVF::SVFIR::addVariantGepStmt</a></div><div class="ttdeci">VariantGepStmt * addVariantGepStmt(NodeID src, NodeID dst, const LocationSet &ls)</div><div class="ttdoc">Add Variant(Gep) edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00347">SVFIR.cpp:347</a></div></div>
|
|
1354
1360
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
|
|
1355
1361
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
|
|
1356
1362
|
</div><!-- fragment -->
|
|
@@ -1451,7 +1457,7 @@ Private Attributes</h2></td></tr>
|
|
|
1451
1457
|
<p>given a gep edge p = q + i, </p>
|
|
1452
1458
|
|
|
1453
1459
|
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00205">205</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
1454
|
-
<div class="fragment"><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(V);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keyword">const</span> llvm::GEPOperator *gepOp = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<span class="keyword">const</span> llvm::GEPOperator>(V);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a> * dataLayout = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a5fad3e11fbba831ed0940fb715e7dc2d">SymbolTableInfo::getDataLayout</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getMainLLVMModule());</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  llvm::APInt byteOffset(dataLayout->getIndexSizeInBits(gepOp->getPointerAddressSpace()),0,<span class="keyword">true</span>);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">if</span>(gepOp && dataLayout && gepOp->accumulateConstantOffset(*dataLayout,byteOffset))</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> bo = byteOffset.getSExtValue();</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1generic__bridge__gep__type__iterator.html">bridge_gep_iterator</a> gi = <a class="code" href="namespacellvm.html#acfe99e9d441434240c79f6d76b73fe0a">bridge_gep_begin</a>(*V), ge = <a class="code" href="namespacellvm.html#a7cfc92a12082d69711c97bb3d1b99c48">bridge_gep_end</a>(*V);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  gi != ge; ++gi)</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  ls.<a class="code" href="classSVF_1_1LocationSet.html#ac544fa84eff20dfe043b7d0c771dec2b">addOffsetValue</a>(gi.getOperand());</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="comment">// Handling array types, skipe array handling here</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="comment">// We treat whole array as one, then we can distinguish different field of an array of struct</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="comment">// e.g. s[1].f1 is differet from s[0].f2</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">if</span>(SVFUtil::isa<ArrayType>(*gi))</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="comment">//The int-value object of the current index operand</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="comment">// (may not be constant for arrays).</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *op = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>>(gi.getOperand());</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">if</span>(!op)</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="comment">//The actual index</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> idx = op->getSExtValue();</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="comment">// Handling pointer types</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="comment">// These GEP instructions are simply making address computations from the base pointer address</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="comment">// e.g. idx = (char*) &p + 4, at this case gep only one offset index (idx)</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="comment">// Case 1: This operation is likely accessing an array through pointer p.</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="comment">// Case 2: It may also be used to access a field of a struct (which is not ANSI-compliant)</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="comment">// Since this is a field-index based memory model,</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="comment">// for case 1: we consider the whole array as one element, This can be improved by LocMemModel as it can distinguish different</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="comment">// elements of the same array.</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="comment">// for case 2: we treat idx the same as &p by ignoring const 4 (This handling is unsound since the program itself is not ANSI-compliant).</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">if</span> (SVFUtil::isa<PointerType>(*gi))</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="comment">//off += idx;</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="comment">// Handling struct here</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *ST = SVFUtil::dyn_cast<StructType>(*gi) )</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  {</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(op && <span class="stringliteral">"non-const struct index in GEP"</span>);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keyword">const</span> vector<u32_t> &so = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#ac50e1d8f8b8e514d098a55bfbac86010">getFlattenedFieldIdxVec</a>(ST);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">if</span> ((<span class="keywordtype">unsigned</span>)idx >= so.size())</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"!! Struct index out of bounds"</span> << idx << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  }</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="comment">//add the translated offset</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  ls.<a class="code" href="classSVF_1_1LocationSet.html#acc8d400f4715e05d8d4174d7bf722346">setFldIdx</a>(ls.<a class="code" href="classSVF_1_1LocationSet.html#ac098bc95299002b9016684fa7f2799ca">accumulateConstantOffset</a>() + so[idx]);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  }</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> }</div><div class="ttc" id="classSVF_1_1LocationSet_html_ac544fa84eff20dfe043b7d0c771dec2b"><div class="ttname"><a href="classSVF_1_1LocationSet.html#ac544fa84eff20dfe043b7d0c771dec2b">SVF::LocationSet::addOffsetValue</a></div><div class="ttdeci">bool addOffsetValue(const Value *offsetValue)</div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8cpp_source.html#l00042">LocationSet.cpp:42</a></div></div>
|
|
1460
|
+
<div class="fragment"><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(V);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keyword">const</span> llvm::GEPOperator *gepOp = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<span class="keyword">const</span> llvm::GEPOperator>(V);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a> * dataLayout = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a5fad3e11fbba831ed0940fb715e7dc2d">SymbolTableInfo::getDataLayout</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getMainLLVMModule());</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  llvm::APInt byteOffset(dataLayout->getIndexSizeInBits(gepOp->getPointerAddressSpace()),0,<span class="keyword">true</span>);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">if</span>(gepOp && dataLayout && gepOp->accumulateConstantOffset(*dataLayout,byteOffset))</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> bo = byteOffset.getSExtValue();</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1generic__bridge__gep__type__iterator.html">bridge_gep_iterator</a> gi = <a class="code" href="namespacellvm.html#acfe99e9d441434240c79f6d76b73fe0a">bridge_gep_begin</a>(*V), ge = <a class="code" href="namespacellvm.html#a7cfc92a12082d69711c97bb3d1b99c48">bridge_gep_end</a>(*V);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  gi != ge; ++gi)</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  ls.<a class="code" href="classSVF_1_1LocationSet.html#ac544fa84eff20dfe043b7d0c771dec2b">addOffsetValue</a>(gi.getOperand());</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="comment">// Handling array types, skipe array handling here</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="comment">// We treat whole array as one, then we can distinguish different field of an array of struct</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="comment">// e.g. s[1].f1 is differet from s[0].f2</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">if</span>(SVFUtil::isa<ArrayType>(*gi))</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="comment">//The int-value object of the current index operand</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="comment">// (may not be constant for arrays).</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *op = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>>(gi.getOperand());</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">if</span>(!op)</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="comment">//The actual index</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> idx = op->getSExtValue();</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="comment">// Handling pointer types</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="comment">// These GEP instructions are simply making address computations from the base pointer address</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="comment">// e.g. idx = (char*) &p + 4, at this case gep only one offset index (idx)</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="comment">// Case 1: This operation is likely accessing an array through pointer p.</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="comment">// Case 2: It may also be used to access a field of a struct (which is not ANSI-compliant)</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="comment">// Since this is a field-index based memory model,</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="comment">// for case 1: we consider the whole array as one element, This can be improved by LocMemModel as it can distinguish different</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="comment">// elements of the same array.</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="comment">// for case 2: we treat idx the same as &p by ignoring const 4 (This handling is unsound since the program itself is not ANSI-compliant).</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">if</span> (SVFUtil::isa<PointerType>(*gi))</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="comment">//off += idx;</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="comment">// Handling struct here</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *ST = SVFUtil::dyn_cast<StructType>(*gi) )</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  {</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(op && <span class="stringliteral">"non-const struct index in GEP"</span>);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keyword">const</span> vector<u32_t> &so = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#ac50e1d8f8b8e514d098a55bfbac86010">getFlattenedFieldIdxVec</a>(ST);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">if</span> ((<span class="keywordtype">unsigned</span>)idx >= so.size())</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"!! Struct index out of bounds"</span> << idx << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  }</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="comment">//add the translated offset</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  ls.<a class="code" href="classSVF_1_1LocationSet.html#acc8d400f4715e05d8d4174d7bf722346">setFldIdx</a>(ls.<a class="code" href="classSVF_1_1LocationSet.html#a43de212ce81a29391cee13d8dbaa93eb">accumulateConstantFieldIdx</a>() + so[idx]);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  }</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> }</div><div class="ttc" id="classSVF_1_1LocationSet_html_ac544fa84eff20dfe043b7d0c771dec2b"><div class="ttname"><a href="classSVF_1_1LocationSet.html#ac544fa84eff20dfe043b7d0c771dec2b">SVF::LocationSet::addOffsetValue</a></div><div class="ttdeci">bool addOffsetValue(const Value *offsetValue)</div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8cpp_source.html#l00042">LocationSet.cpp:42</a></div></div>
|
|
1455
1461
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
1456
1462
|
<div class="ttc" id="classSVF_1_1LocationSet_html_acc8d400f4715e05d8d4174d7bf722346"><div class="ttname"><a href="classSVF_1_1LocationSet.html#acc8d400f4715e05d8d4174d7bf722346">SVF::LocationSet::setFldIdx</a></div><div class="ttdeci">void setFldIdx(Size_t idx)</div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00158">LocationSet.h:158</a></div></div>
|
|
1457
1463
|
<div class="ttc" id="namespaceSVF_html_adefcb50414ea999d70cea5ccdbcb98d7"><div class="ttname"><a href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">SVF::ConstantInt</a></div><div class="ttdeci">llvm::ConstantInt ConstantInt</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00128">BasicTypes.h:128</a></div></div>
|
|
@@ -1466,7 +1472,7 @@ Private Attributes</h2></td></tr>
|
|
|
1466
1472
|
<div class="ttc" id="classSVF_1_1SymbolTableInfo_html_ac50e1d8f8b8e514d098a55bfbac86010"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#ac50e1d8f8b8e514d098a55bfbac86010">SVF::SymbolTableInfo::getFlattenedFieldIdxVec</a></div><div class="ttdeci">const std::vector< u32_t > & getFlattenedFieldIdxVec(const Type *T)</div><div class="ttdoc">Get a reference to the components of struct_info. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00325">SymbolTableInfo.cpp:325</a></div></div>
|
|
1467
1473
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
1468
1474
|
<div class="ttc" id="namespaceSVF_html_a03db82b8a7914367024723dba4d6ca3c"><div class="ttname"><a href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">SVF::DataLayout</a></div><div class="ttdeci">llvm::DataLayout DataLayout</div><div class="ttdoc">LLVM data layout. </div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00115">BasicTypes.h:115</a></div></div>
|
|
1469
|
-
<div class="ttc" id="
|
|
1475
|
+
<div class="ttc" id="classSVF_1_1LocationSet_html_a43de212ce81a29391cee13d8dbaa93eb"><div class="ttname"><a href="classSVF_1_1LocationSet.html#a43de212ce81a29391cee13d8dbaa93eb">SVF::LocationSet::accumulateConstantFieldIdx</a></div><div class="ttdeci">Size_t accumulateConstantFieldIdx() const</div><div class="ttdoc">Get methods. </div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00154">LocationSet.h:154</a></div></div>
|
|
1470
1476
|
<div class="ttc" id="classllvm_1_1generic__bridge__gep__type__iterator_html"><div class="ttname"><a href="classllvm_1_1generic__bridge__gep__type__iterator.html">llvm::generic_bridge_gep_type_iterator</a></div><div class="ttdef"><b>Definition:</b> <a href="GEPTypeBridgeIterator_8h_source.html#l00017">GEPTypeBridgeIterator.h:17</a></div></div>
|
|
1471
1477
|
</div><!-- fragment -->
|
|
1472
1478
|
</div>
|
|
@@ -1976,7 +1982,7 @@ Private Attributes</h2></td></tr>
|
|
|
1976
1982
|
<p>TODO: inter-procedural <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> edges for thread joins </p>
|
|
1977
1983
|
|
|
1978
1984
|
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01060">1060</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
1979
|
-
<div class="fragment"><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> {</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>();</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a61ed4bb80d88b0f8dbc02535c224fdfb">isHeapAllocOrStaticExtCall</a>(cs))</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  {</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  <span class="comment">// case 1: ret = new obj</span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">isHeapAllocExtCallViaRet</a>(cs) || <a class="code" href="namespaceSVF_1_1SVFUtil.html#ae62938f722543d6d7fc201b685be1abf">isStaticExtCall</a>(cs))</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  {</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> val = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst);</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(inst);</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, val);</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  }</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  <span class="comment">// case 2: *arg = new obj</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  {</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aedfa6e9216c6c788c26aef1967689b76">isHeapAllocExtCallViaArg</a>(cs) && <span class="stringliteral">"Must be heap alloc call via arg."</span>);</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  <span class="keywordtype">int</span> arg_pos = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a73215bac62f1340a58f6c7f2ba9b0e7b">getHeapAllocHoldingArgPosition</a>(callee);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *arg = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(arg_pos);</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  <span class="keywordflow">if</span> (arg->getType()->isPointerTy())</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  {</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(arg);</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a18388bc282c5329a837c6a273893c4fb">addDummyObjNode</a>();</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  <span class="keywordflow">if</span> (vnArg && dummy && obj)</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  {</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, dummy);</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(dummy, vnArg);</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  }</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  }</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  {</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">"Arg receiving new object must be pointer type"</span>);</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  }</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  }</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  }</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  {</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(callee))</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  {</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">ExtAPI::extf_t</a> tF= <a class="code" href="namespaceSVF_1_1SVFUtil.html#ac3e7507fb376b1625bc1573132ab9f06">extCallTy</a>(callee);</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  <span class="keywordflow">switch</span>(tF)</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  {</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1f23e7b8cdd103943f515e807bf36b1c">ExtAPI::EFT_REALLOC</a>:</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  {</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  <span class="keywordflow">if</span>(!SVFUtil::isa<PointerType>(inst->getType()))</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  <span class="comment">// e.g. void *realloc(void *ptr, size_t size)</span></div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  <span class="comment">// if ptr is null then we will treat it as a malloc</span></div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  <span class="comment">// if ptr is not null, then we assume a new data memory will be attached to</span></div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  <span class="comment">// the tail of old allocated memory block.</span></div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  <span class="keywordflow">if</span>(SVFUtil::isa<ConstantPointerNull>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0)))</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  {</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> val = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst);</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(inst);</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, val);</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  }</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  }</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96">ExtAPI::EFT_L_A0</a>:</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aec63c85b24133af679d60dda42ab44ab">ExtAPI::EFT_L_A1</a>:</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac078d0307bec384b6df3da561045ff7d">ExtAPI::EFT_L_A2</a>:</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1e119ad93f66dbbf8014917febad843c">ExtAPI::EFT_L_A8</a>:</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  {</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  <span class="keywordflow">if</span>(!SVFUtil::isa<PointerType>(inst->getType()))</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst);</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> arg_pos;</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  <span class="keywordflow">switch</span>(tF)</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  {</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aec63c85b24133af679d60dda42ab44ab">ExtAPI::EFT_L_A1</a>:</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  arg_pos= 1;</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac078d0307bec384b6df3da561045ff7d">ExtAPI::EFT_L_A2</a>:</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  arg_pos= 2;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1e119ad93f66dbbf8014917febad843c">ExtAPI::EFT_L_A8</a>:</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  arg_pos= 8;</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  arg_pos= 0;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  }</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *src= cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(arg_pos);</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(src->getType()))</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  {</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(src);</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(srcNode, dstNode);</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  }</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dstNode);</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  }</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aa0cecd43037de38c00ec6017b03bbb3f">ExtAPI::EFT_L_A0__A0R_A1</a>:</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  {</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  <span class="comment">// this is only for memset(void *str, int c, size_t n)</span></div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>  <span class="comment">// which copies the character c (an unsigned char) to the first n characters of the string pointed to, by the argument str</span></div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  <span class="comment">// However, the second argument is non-pointer, thus we can not use addComplexConsForExt</span></div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  <span class="comment">// addComplexConsForExt(cs.getArgument(0), cs.getArgument(1));</span></div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(inst->getType()))</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0)), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst));</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  }</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a54aa3d7051aab7d65ee1154538bfbb48">ExtAPI::EFT_L_A0__A0R_A1R</a>:</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  {</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ab83a61a519cb0bb6fed823a938cf0602">addComplexConsForExt</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0), cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>  <span class="comment">//memcpy returns the dest.</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(inst->getType()))</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  {</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0)), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst));</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  }</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>  }</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae7e7e0702f480304f4afefa96f6c5002">ExtAPI::EFT_A1R_A0R</a>:</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ab83a61a519cb0bb6fed823a938cf0602">addComplexConsForExt</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1), cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a80ea82d0181911894919c181eb1f4e35">ExtAPI::EFT_L_A1__FunPtr</a>:</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  {</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *src = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1);</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gep = SVFUtil::dyn_cast<GetElementPtrInst>(src))</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  src = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a86763e6a3606598580cd0172aecb5bc7">stripConstantCasts</a>(gep->getPointerOperand());</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* glob = SVFUtil::dyn_cast<GlobalVariable>(src)){</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad9ebd847ed5d901cd30b1cfcdaec3462">ConstantDataArray</a>* constarray = SVFUtil::dyn_cast<ConstantDataArray>(glob->getInitializer())){</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6f82e03d880257527bd9cb5978e05604">getProgFunction</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aa67bbd366b93fb1ec7a540c83566c977">svfMod</a>,constarray->getAsCString().str())){</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(fun->getLLVMFun());</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(srcNode, <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst));</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  }</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  }</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  }</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>  }</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4ba81144ee1a70785fbf83ca5f0d4573">ExtAPI::EFT_A3R_A1R_NS</a>:</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  <span class="comment">//These func. are never used to copy structs, so the size is 1.</span></div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ab83a61a519cb0bb6fed823a938cf0602">addComplexConsForExt</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(3), cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1), 1);</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4c1361546aa103c26b11b0b89dc8d482">ExtAPI::EFT_A1R_A0</a>:</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  {</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  <span class="keywordflow">if</span>(vnD && vnS)</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>  }</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab8814290c2362cd812a7783802eb209a">ExtAPI::EFT_A2R_A1</a>:</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  {</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(2));</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>  <span class="keywordflow">if</span>(vnD && vnS)</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>  }</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac631e9cc3bb430a9c12d0c004d2ca97d">ExtAPI::EFT_A4R_A1</a>:</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>  {</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(4));</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  <span class="keywordflow">if</span>(vnD && vnS)</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  }</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aac3eaaf0865895ce144c035e429166be">ExtAPI::EFT_L_A0__A1_A0</a>:</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  {</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a> *load = SVFUtil::dyn_cast<LoadInst>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0))) {</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1)), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(load->getPointerOperand()));</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  <span class="keywordflow">if</span> (SVFUtil::isa<PointerType>(inst->getType()))</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(load->getPointerOperand()), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst));</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>  }</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> <span class="comment">// else if (const GetElementPtrInst *gep = SVFUtil::dyn_cast<GetElementPtrInst>(cs.getArgument(0))) {</span></div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="comment">// addStoreEdge(getValueNode(cs.getArgument(1)), getValueNode(cs.getArgument(0)));</span></div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="comment">// if (SVFUtil::isa<PointerType>(inst->getType()))</span></div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="comment">// addCopyEdge(getValueNode(cs.getArgument(0)), getValueNode(inst));</span></div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="comment">// }</span></div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  }</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae8423cc29f4de0225e30de6982e6a3a4">ExtAPI::EFT_L_A0__A2R_A0</a>:</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  {</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(inst->getType()))</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>  {</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>  <span class="comment">//Do the L_A0 part if the retval is used.</span></div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst);</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *src= cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(src->getType()))</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  {</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(src);</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  <span class="keywordflow">if</span>(vnS)</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(vnS,vnD);</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  }</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(vnD);</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>  }</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>  <span class="comment">//Do the A2R_A0 part.</span></div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(2));</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>  <span class="keywordflow">if</span>(vnD && vnS)</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>  }</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a035cf8a39c192608ec0e91d48e479899">ExtAPI::EFT_A0R_NEW</a>:</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4353ad2b443e7f7ce2151869eed9c097">ExtAPI::EFT_A1R_NEW</a>:</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a27b8dfa0742daa17c3e1a520d03dbd14">ExtAPI::EFT_A2R_NEW</a>:</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afe69efc20e29f95e0e333d1a462576a2">ExtAPI::EFT_A4R_NEW</a>:</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8b59b6966952577361826d09b95b76be">ExtAPI::EFT_A11R_NEW</a>:</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>  {</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<span class="stringliteral">"Alloc via arg cases are not handled here."</span>);</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>  }</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac57ade96d1d18b9f2d4d36bc6928c5c4">ExtAPI::EFT_ALLOC</a>:</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0">ExtAPI::EFT_NOSTRUCT_ALLOC</a>:</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a94f514e925fdb422632840ca44343af0">ExtAPI::EFT_STAT</a>:</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a515c2184a7461fc1788a514432a7ec22">ExtAPI::EFT_STAT2</a>:</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(inst->getType()))</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<span class="stringliteral">"alloc type func. are not handled here"</span>);</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>  {</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>  <span class="comment">// fdopen will return an integer in LLVM IR.</span></div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">"alloc type func do not return pointer type"</span>);</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  }</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef">ExtAPI::EFT_NOOP</a>:</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b98279d1926e4ebfb237a43536c7b73">ExtAPI::EFT_FREE</a>:</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afedd2f66497ed9404b8b3cb1d16a3f0b">ExtAPI::EFT_STD_RB_TREE_INSERT_AND_REBALANCE</a>:</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  {</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vArg1 = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1);</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vArg3 = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(3);</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> </div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>  <span class="comment">// We have vArg3 points to the entry of _Rb_tree_node_base { color; parent; left; right; }.</span></div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  <span class="comment">// Now we calculate the offset from base to vArg3</span></div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg3 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vArg3);</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>  <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> offset = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d">getLocationSetFromBaseNode</a>(vnArg3).<a class="code" href="classSVF_1_1LocationSet.html#ac098bc95299002b9016684fa7f2799ca">accumulateConstantOffset</a>();</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> </div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>  <span class="comment">// We get all flattened fields of base</span></div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>  vector<LocationSet> fields;</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *type = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">getBaseTypeAndFlattenedFields</a>(vArg3, fields);</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(fields.size() >= 4 && <span class="stringliteral">"_Rb_tree_node_base should have at least 4 fields.\n"</span>);</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> </div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>  <span class="comment">// We summarize the side effects: arg3->parent = arg1, arg3->left = arg1, arg3->right = arg1</span></div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>  <span class="comment">// Note that arg0 is aligned with "offset".</span></div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = offset + 1; i <= offset + 3; ++i)</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>  {</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">getGepValVar</a>(vArg3, fields[i], type, i);</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(vArg1);</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  <span class="keywordflow">if</span>(vnD && vnS)</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>  }</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>  }</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a31d0b620d3344c68ecfd71c9faf1d598">ExtAPI::EFT_STD_RB_TREE_INCREMENT</a>:</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  {</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(inst);</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> </div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vArg = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vArg);</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> offset = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d">getLocationSetFromBaseNode</a>(vnArg).<a class="code" href="classSVF_1_1LocationSet.html#ac098bc95299002b9016684fa7f2799ca">accumulateConstantOffset</a>();</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> </div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>  <span class="comment">// We get all fields</span></div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>  vector<LocationSet> fields;</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *type = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">getBaseTypeAndFlattenedFields</a>(vArg,fields);</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(fields.size() >= 4 && <span class="stringliteral">"_Rb_tree_node_base should have at least 4 fields.\n"</span>);</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> </div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>  <span class="comment">// We summarize the side effects: ret = arg->parent, ret = arg->left, ret = arg->right</span></div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>  <span class="comment">// Note that arg0 is aligned with "offset".</span></div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = offset + 1; i <= offset + 3; ++i)</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>  {</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">getGepValVar</a>(vArg, fields[i], type, i);</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>  <span class="keywordflow">if</span>(vnD && vnS)</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>  }</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>  }</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aed5f4c75cc5016c61f441abf06a2bf21">ExtAPI::EFT_STD_LIST_HOOK</a>:</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  {</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vSrc = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vDst = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1);</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vSrc);</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vDst);</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(src, dst);</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>  }</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae3e90095a170aa15d9b6c305469e32af">ExtAPI::CPP_EFT_A0R_A1</a>:</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>  {</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>  <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* symTable = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>();</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  <span class="keywordflow">if</span> (symTable-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a89e9c6da843e5eef25c51afd5d0937e5">getModelConstants</a>())</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>  {</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS, vnD);</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  }</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  }</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a7f75d2265448acf50cd59151a1241054">ExtAPI::CPP_EFT_A0R_A1R</a>:</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>  {</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>  <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* symTable = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>();</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>  <span class="keywordflow">if</span> (symTable-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a89e9c6da843e5eef25c51afd5d0937e5">getModelConstants</a>())</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>  {</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vnD && vnS && <span class="stringliteral">"dst or src not exist?"</span>);</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(vnS,dummy);</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(dummy,vnD);</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>  }</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>  }</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a3eb7d75552ce138f55c840b6635d32ed">ExtAPI::CPP_EFT_A1R</a>:</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>  {</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>  <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* symTable = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>();</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>  <span class="keywordflow">if</span> (symTable-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a89e9c6da843e5eef25c51afd5d0937e5">getModelConstants</a>())</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>  {</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vnS && <span class="stringliteral">"src not exist?"</span>);</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(vnS,dummy);</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>  }</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>  }</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6c9b3a6987d311c61156dab96e5ad3b9">ExtAPI::CPP_EFT_DYNAMIC_CAST</a>:</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>  {</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vArg0 = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *retVal = cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>();</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(vArg0);</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(src && <span class="stringliteral">"src not exist?"</span>);</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(retVal);</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dst && <span class="stringliteral">"dst not exist?"</span>);</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(src, dst);</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>  }</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9d9ec33eb5ecf285ccf2aa575bcba31a">ExtAPI::EFT_CXA_BEGIN_CATCH</a>:</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>  {</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>  }</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>  <span class="comment">//default:</span></div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac8af5ecc06abccdbcba873e2be3f11f9">ExtAPI::EFT_OTHER</a>:</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>  {</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(inst->getType()))</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  {</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>  std::string str;</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>  rawstr << <span class="stringliteral">"function "</span> << callee-><a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>() << <span class="stringliteral">" not in the external function summary list"</span>;</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(rawstr.str());</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>  <span class="comment">//assert("unknown ext.func type");</span></div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>  }</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>  }</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>  }</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>  }</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> </div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a5c2abeb363081381c3dc939ab511e3f0">isThreadForkCall</a>(inst))</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>  {</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* forkedFun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#ad98299033577f1e7f4e9bc73dff3b253">getLLVMFunction</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ac840e43fa58a90099de99a1953f091ac">getForkedFun</a>(inst)) )</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>  {</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>  forkedFun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a142e650415cb81011eb59dadd3cb0637">getDefFunForMultipleModule</a>(forkedFun)-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>();</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#aaeeb386d80b51d729322317065606454">getActualParmAtForkSite</a>(inst);</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((forkedFun->arg_size() <= 2) && <span class="stringliteral">"Size of formal parameter of start routine should be one"</span>);</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>  <span class="keywordflow">if</span>(forkedFun->arg_size() <= 2 && forkedFun->arg_size() >= 1)</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>  {</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* formalParm = &(*forkedFun->arg_begin());</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(actualParm->getType()) && SVFUtil::isa<PointerType>(formalParm->getType()) )</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>  {</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>  <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7a311f7789c6c7a028ad0f595c1e0295">addThreadForkEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(actualParm), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(formalParm),icfgNode);</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>  }</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>  }</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>  }</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>  {</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>  }</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>  }</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> </div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a28fbb7cc51eb7e25d88f43e3eb1f30fb">isHareParForCall</a>(inst))</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>  {</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* taskFunc = <a class="code" href="namespaceSVF_1_1SVFUtil.html#ad98299033577f1e7f4e9bc73dff3b253">getLLVMFunction</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab048cbce6e4f5a3d6ff90da3565220ff">getTaskFuncAtHareParForSite</a>(inst)) )</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>  {</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((taskFunc->arg_size() == 3) && <span class="stringliteral">"Size of formal parameter of hare_parallel_for's task routine should be 3"</span>);</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#ad3471260b66bdd7e6b790ad2a94fe7ce">getTaskDataAtHareParForSite</a>(inst);</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* formalParm = &(*taskFunc->arg_begin());</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(actualParm->getType()) && SVFUtil::isa<PointerType>(formalParm->getType()) )</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>  {</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>  <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7a311f7789c6c7a028ad0f595c1e0295">addThreadForkEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(actualParm), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(formalParm),icfgNode);</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>  }</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>  }</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>  {</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>  }</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>  }</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> </div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>  }</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> }</div><div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96">SVF::ExtAPI::EFT_L_A0</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00059">ExtAPI.h:59</a></div></div>
|
|
1985
|
+
<div class="fragment"><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> {</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>();</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a61ed4bb80d88b0f8dbc02535c224fdfb">isHeapAllocOrStaticExtCall</a>(cs))</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  {</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  <span class="comment">// case 1: ret = new obj</span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">isHeapAllocExtCallViaRet</a>(cs) || <a class="code" href="namespaceSVF_1_1SVFUtil.html#ae62938f722543d6d7fc201b685be1abf">isStaticExtCall</a>(cs))</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  {</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> val = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst);</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(inst);</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, val);</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  }</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  <span class="comment">// case 2: *arg = new obj</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  {</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aedfa6e9216c6c788c26aef1967689b76">isHeapAllocExtCallViaArg</a>(cs) && <span class="stringliteral">"Must be heap alloc call via arg."</span>);</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  <span class="keywordtype">int</span> arg_pos = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a73215bac62f1340a58f6c7f2ba9b0e7b">getHeapAllocHoldingArgPosition</a>(callee);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *arg = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(arg_pos);</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  <span class="keywordflow">if</span> (arg->getType()->isPointerTy())</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  {</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(arg);</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a18388bc282c5329a837c6a273893c4fb">addDummyObjNode</a>();</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  <span class="keywordflow">if</span> (vnArg && dummy && obj)</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  {</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, dummy);</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(dummy, vnArg);</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  }</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  }</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  {</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">"Arg receiving new object must be pointer type"</span>);</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  }</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  }</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  }</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  {</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(callee))</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  {</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">ExtAPI::extf_t</a> tF= <a class="code" href="namespaceSVF_1_1SVFUtil.html#ac3e7507fb376b1625bc1573132ab9f06">extCallTy</a>(callee);</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  <span class="keywordflow">switch</span>(tF)</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  {</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1f23e7b8cdd103943f515e807bf36b1c">ExtAPI::EFT_REALLOC</a>:</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  {</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  <span class="keywordflow">if</span>(!SVFUtil::isa<PointerType>(inst->getType()))</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  <span class="comment">// e.g. void *realloc(void *ptr, size_t size)</span></div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  <span class="comment">// if ptr is null then we will treat it as a malloc</span></div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  <span class="comment">// if ptr is not null, then we assume a new data memory will be attached to</span></div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  <span class="comment">// the tail of old allocated memory block.</span></div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  <span class="keywordflow">if</span>(SVFUtil::isa<ConstantPointerNull>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0)))</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  {</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> val = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst);</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(inst);</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, val);</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  }</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  }</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96">ExtAPI::EFT_L_A0</a>:</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aec63c85b24133af679d60dda42ab44ab">ExtAPI::EFT_L_A1</a>:</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac078d0307bec384b6df3da561045ff7d">ExtAPI::EFT_L_A2</a>:</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1e119ad93f66dbbf8014917febad843c">ExtAPI::EFT_L_A8</a>:</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  {</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  <span class="keywordflow">if</span>(!SVFUtil::isa<PointerType>(inst->getType()))</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst);</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> arg_pos;</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  <span class="keywordflow">switch</span>(tF)</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  {</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aec63c85b24133af679d60dda42ab44ab">ExtAPI::EFT_L_A1</a>:</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  arg_pos= 1;</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac078d0307bec384b6df3da561045ff7d">ExtAPI::EFT_L_A2</a>:</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  arg_pos= 2;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1e119ad93f66dbbf8014917febad843c">ExtAPI::EFT_L_A8</a>:</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  arg_pos= 8;</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  arg_pos= 0;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  }</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *src= cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(arg_pos);</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(src->getType()))</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  {</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(src);</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(srcNode, dstNode);</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  }</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dstNode);</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  }</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aa0cecd43037de38c00ec6017b03bbb3f">ExtAPI::EFT_L_A0__A0R_A1</a>:</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  {</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  <span class="comment">// this is only for memset(void *str, int c, size_t n)</span></div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>  <span class="comment">// which copies the character c (an unsigned char) to the first n characters of the string pointed to, by the argument str</span></div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  <span class="comment">// However, the second argument is non-pointer, thus we can not use addComplexConsForExt</span></div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  <span class="comment">// addComplexConsForExt(cs.getArgument(0), cs.getArgument(1));</span></div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(inst->getType()))</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0)), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst));</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  }</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a54aa3d7051aab7d65ee1154538bfbb48">ExtAPI::EFT_L_A0__A0R_A1R</a>:</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  {</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ab83a61a519cb0bb6fed823a938cf0602">addComplexConsForExt</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0), cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>  <span class="comment">//memcpy returns the dest.</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(inst->getType()))</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  {</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0)), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst));</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  }</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>  }</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae7e7e0702f480304f4afefa96f6c5002">ExtAPI::EFT_A1R_A0R</a>:</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ab83a61a519cb0bb6fed823a938cf0602">addComplexConsForExt</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1), cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a80ea82d0181911894919c181eb1f4e35">ExtAPI::EFT_L_A1__FunPtr</a>:</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  {</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *src = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1);</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gep = SVFUtil::dyn_cast<GetElementPtrInst>(src))</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  src = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a86763e6a3606598580cd0172aecb5bc7">stripConstantCasts</a>(gep->getPointerOperand());</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* glob = SVFUtil::dyn_cast<GlobalVariable>(src)){</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad9ebd847ed5d901cd30b1cfcdaec3462">ConstantDataArray</a>* constarray = SVFUtil::dyn_cast<ConstantDataArray>(glob->getInitializer())){</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6f82e03d880257527bd9cb5978e05604">getProgFunction</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aa67bbd366b93fb1ec7a540c83566c977">svfMod</a>,constarray->getAsCString().str())){</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(fun->getLLVMFun());</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(srcNode, <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst));</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  }</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  }</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  }</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>  }</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4ba81144ee1a70785fbf83ca5f0d4573">ExtAPI::EFT_A3R_A1R_NS</a>:</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  <span class="comment">//These func. are never used to copy structs, so the size is 1.</span></div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ab83a61a519cb0bb6fed823a938cf0602">addComplexConsForExt</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(3), cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1), 1);</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4c1361546aa103c26b11b0b89dc8d482">ExtAPI::EFT_A1R_A0</a>:</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  {</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  <span class="keywordflow">if</span>(vnD && vnS)</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>  }</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab8814290c2362cd812a7783802eb209a">ExtAPI::EFT_A2R_A1</a>:</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  {</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(2));</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>  <span class="keywordflow">if</span>(vnD && vnS)</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>  }</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac631e9cc3bb430a9c12d0c004d2ca97d">ExtAPI::EFT_A4R_A1</a>:</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>  {</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(4));</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  <span class="keywordflow">if</span>(vnD && vnS)</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  }</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aac3eaaf0865895ce144c035e429166be">ExtAPI::EFT_L_A0__A1_A0</a>:</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  {</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a> *load = SVFUtil::dyn_cast<LoadInst>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0))) {</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1)), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(load->getPointerOperand()));</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  <span class="keywordflow">if</span> (SVFUtil::isa<PointerType>(inst->getType()))</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(load->getPointerOperand()), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst));</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>  }</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> <span class="comment">// else if (const GetElementPtrInst *gep = SVFUtil::dyn_cast<GetElementPtrInst>(cs.getArgument(0))) {</span></div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="comment">// addStoreEdge(getValueNode(cs.getArgument(1)), getValueNode(cs.getArgument(0)));</span></div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="comment">// if (SVFUtil::isa<PointerType>(inst->getType()))</span></div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="comment">// addCopyEdge(getValueNode(cs.getArgument(0)), getValueNode(inst));</span></div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="comment">// }</span></div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  }</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae8423cc29f4de0225e30de6982e6a3a4">ExtAPI::EFT_L_A0__A2R_A0</a>:</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  {</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(inst->getType()))</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>  {</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>  <span class="comment">//Do the L_A0 part if the retval is used.</span></div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst);</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *src= cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(src->getType()))</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  {</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(src);</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  <span class="keywordflow">if</span>(vnS)</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(vnS,vnD);</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  }</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(vnD);</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>  }</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>  <span class="comment">//Do the A2R_A0 part.</span></div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(2));</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>  <span class="keywordflow">if</span>(vnD && vnS)</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>  }</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a035cf8a39c192608ec0e91d48e479899">ExtAPI::EFT_A0R_NEW</a>:</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4353ad2b443e7f7ce2151869eed9c097">ExtAPI::EFT_A1R_NEW</a>:</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a27b8dfa0742daa17c3e1a520d03dbd14">ExtAPI::EFT_A2R_NEW</a>:</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afe69efc20e29f95e0e333d1a462576a2">ExtAPI::EFT_A4R_NEW</a>:</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8b59b6966952577361826d09b95b76be">ExtAPI::EFT_A11R_NEW</a>:</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>  {</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<span class="stringliteral">"Alloc via arg cases are not handled here."</span>);</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>  }</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac57ade96d1d18b9f2d4d36bc6928c5c4">ExtAPI::EFT_ALLOC</a>:</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0">ExtAPI::EFT_NOSTRUCT_ALLOC</a>:</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a94f514e925fdb422632840ca44343af0">ExtAPI::EFT_STAT</a>:</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a515c2184a7461fc1788a514432a7ec22">ExtAPI::EFT_STAT2</a>:</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(inst->getType()))</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<span class="stringliteral">"alloc type func. are not handled here"</span>);</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>  {</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>  <span class="comment">// fdopen will return an integer in LLVM IR.</span></div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">"alloc type func do not return pointer type"</span>);</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  }</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef">ExtAPI::EFT_NOOP</a>:</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b98279d1926e4ebfb237a43536c7b73">ExtAPI::EFT_FREE</a>:</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afedd2f66497ed9404b8b3cb1d16a3f0b">ExtAPI::EFT_STD_RB_TREE_INSERT_AND_REBALANCE</a>:</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  {</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vArg1 = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1);</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vArg3 = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(3);</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> </div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>  <span class="comment">// We have vArg3 points to the entry of _Rb_tree_node_base { color; parent; left; right; }.</span></div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  <span class="comment">// Now we calculate the offset from base to vArg3</span></div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg3 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vArg3);</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>  <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> offset = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d">getLocationSetFromBaseNode</a>(vnArg3).<a class="code" href="classSVF_1_1LocationSet.html#a43de212ce81a29391cee13d8dbaa93eb">accumulateConstantFieldIdx</a>();</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> </div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>  <span class="comment">// We get all flattened fields of base</span></div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>  vector<LocationSet> fields;</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *type = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">getBaseTypeAndFlattenedFields</a>(vArg3, fields);</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(fields.size() >= 4 && <span class="stringliteral">"_Rb_tree_node_base should have at least 4 fields.\n"</span>);</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> </div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>  <span class="comment">// We summarize the side effects: arg3->parent = arg1, arg3->left = arg1, arg3->right = arg1</span></div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>  <span class="comment">// Note that arg0 is aligned with "offset".</span></div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = offset + 1; i <= offset + 3; ++i)</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>  {</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">getGepValVar</a>(vArg3, fields[i], type, i);</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(vArg1);</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  <span class="keywordflow">if</span>(vnD && vnS)</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>  }</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>  }</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a31d0b620d3344c68ecfd71c9faf1d598">ExtAPI::EFT_STD_RB_TREE_INCREMENT</a>:</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  {</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(inst);</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> </div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vArg = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vArg);</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> offset = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d">getLocationSetFromBaseNode</a>(vnArg).<a class="code" href="classSVF_1_1LocationSet.html#a43de212ce81a29391cee13d8dbaa93eb">accumulateConstantFieldIdx</a>();</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> </div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>  <span class="comment">// We get all fields</span></div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>  vector<LocationSet> fields;</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *type = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">getBaseTypeAndFlattenedFields</a>(vArg,fields);</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(fields.size() >= 4 && <span class="stringliteral">"_Rb_tree_node_base should have at least 4 fields.\n"</span>);</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> </div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>  <span class="comment">// We summarize the side effects: ret = arg->parent, ret = arg->left, ret = arg->right</span></div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>  <span class="comment">// Note that arg0 is aligned with "offset".</span></div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = offset + 1; i <= offset + 3; ++i)</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>  {</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">getGepValVar</a>(vArg, fields[i], type, i);</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>  <span class="keywordflow">if</span>(vnD && vnS)</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>  }</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>  }</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aed5f4c75cc5016c61f441abf06a2bf21">ExtAPI::EFT_STD_LIST_HOOK</a>:</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  {</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vSrc = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vDst = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1);</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vSrc);</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vDst);</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(src, dst);</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>  }</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae3e90095a170aa15d9b6c305469e32af">ExtAPI::CPP_EFT_A0R_A1</a>:</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>  {</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>  <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* symTable = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>();</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  <span class="keywordflow">if</span> (symTable-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a89e9c6da843e5eef25c51afd5d0937e5">getModelConstants</a>())</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>  {</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS, vnD);</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  }</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  }</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a7f75d2265448acf50cd59151a1241054">ExtAPI::CPP_EFT_A0R_A1R</a>:</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>  {</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>  <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* symTable = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>();</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>  <span class="keywordflow">if</span> (symTable-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a89e9c6da843e5eef25c51afd5d0937e5">getModelConstants</a>())</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>  {</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vnD && vnS && <span class="stringliteral">"dst or src not exist?"</span>);</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(vnS,dummy);</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(dummy,vnD);</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>  }</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>  }</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a3eb7d75552ce138f55c840b6635d32ed">ExtAPI::CPP_EFT_A1R</a>:</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>  {</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>  <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* symTable = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>();</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>  <span class="keywordflow">if</span> (symTable-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a89e9c6da843e5eef25c51afd5d0937e5">getModelConstants</a>())</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>  {</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vnS && <span class="stringliteral">"src not exist?"</span>);</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(vnS,dummy);</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>  }</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>  }</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6c9b3a6987d311c61156dab96e5ad3b9">ExtAPI::CPP_EFT_DYNAMIC_CAST</a>:</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>  {</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vArg0 = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *retVal = cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>();</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(vArg0);</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(src && <span class="stringliteral">"src not exist?"</span>);</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(retVal);</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dst && <span class="stringliteral">"dst not exist?"</span>);</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(src, dst);</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>  }</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9d9ec33eb5ecf285ccf2aa575bcba31a">ExtAPI::EFT_CXA_BEGIN_CATCH</a>:</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>  {</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>  }</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>  <span class="comment">//default:</span></div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>  <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac8af5ecc06abccdbcba873e2be3f11f9">ExtAPI::EFT_OTHER</a>:</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>  {</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(inst->getType()))</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  {</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>  std::string str;</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>  rawstr << <span class="stringliteral">"function "</span> << callee-><a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>() << <span class="stringliteral">" not in the external function summary list"</span>;</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(rawstr.str());</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>  <span class="comment">//assert("unknown ext.func type");</span></div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>  }</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>  }</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>  }</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>  }</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> </div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a5c2abeb363081381c3dc939ab511e3f0">isThreadForkCall</a>(inst))</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>  {</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* forkedFun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#ad98299033577f1e7f4e9bc73dff3b253">getLLVMFunction</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ac840e43fa58a90099de99a1953f091ac">getForkedFun</a>(inst)) )</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>  {</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>  forkedFun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a142e650415cb81011eb59dadd3cb0637">getDefFunForMultipleModule</a>(forkedFun)-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>();</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#aaeeb386d80b51d729322317065606454">getActualParmAtForkSite</a>(inst);</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((forkedFun->arg_size() <= 2) && <span class="stringliteral">"Size of formal parameter of start routine should be one"</span>);</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>  <span class="keywordflow">if</span>(forkedFun->arg_size() <= 2 && forkedFun->arg_size() >= 1)</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>  {</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* formalParm = &(*forkedFun->arg_begin());</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(actualParm->getType()) && SVFUtil::isa<PointerType>(formalParm->getType()) )</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>  {</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>  <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7a311f7789c6c7a028ad0f595c1e0295">addThreadForkEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(actualParm), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(formalParm),icfgNode);</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>  }</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>  }</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>  }</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>  {</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>  }</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>  }</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> </div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a28fbb7cc51eb7e25d88f43e3eb1f30fb">isHareParForCall</a>(inst))</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>  {</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* taskFunc = <a class="code" href="namespaceSVF_1_1SVFUtil.html#ad98299033577f1e7f4e9bc73dff3b253">getLLVMFunction</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab048cbce6e4f5a3d6ff90da3565220ff">getTaskFuncAtHareParForSite</a>(inst)) )</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>  {</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((taskFunc->arg_size() == 3) && <span class="stringliteral">"Size of formal parameter of hare_parallel_for's task routine should be 3"</span>);</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#ad3471260b66bdd7e6b790ad2a94fe7ce">getTaskDataAtHareParForSite</a>(inst);</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* formalParm = &(*taskFunc->arg_begin());</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(actualParm->getType()) && SVFUtil::isa<PointerType>(formalParm->getType()) )</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>  {</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>  <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7a311f7789c6c7a028ad0f595c1e0295">addThreadForkEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(actualParm), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(formalParm),icfgNode);</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>  }</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>  }</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>  {</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>  }</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>  }</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> </div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>  }</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> }</div><div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96">SVF::ExtAPI::EFT_L_A0</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00059">ExtAPI.h:59</a></div></div>
|
|
1980
1986
|
<div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094afedd2f66497ed9404b8b3cb1d16a3f0b"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afedd2f66497ed9404b8b3cb1d16a3f0b">SVF::ExtAPI::EFT_STD_RB_TREE_INSERT_AND_REBALANCE</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00081">ExtAPI.h:81</a></div></div>
|
|
1981
1987
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_ad98299033577f1e7f4e9bc73dff3b253"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ad98299033577f1e7f4e9bc73dff3b253">SVF::SVFUtil::getLLVMFunction</a></div><div class="ttdeci">const Function * getLLVMFunction(const Value *val)</div><div class="ttdoc">Return LLVM function if this value is. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00053">LLVMUtil.h:53</a></div></div>
|
|
1982
1988
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a3e80511758692d2ad4e5dbee15beb719"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">SVF::SVFIRBuilder::addBlackHoleAddrEdge</a></div><div class="ttdeci">PAGEdge * addBlackHoleAddrEdge(NodeID node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00281">SVFIRBuilder.h:281</a></div></div>
|
|
@@ -2060,7 +2066,6 @@ Private Attributes</h2></td></tr>
|
|
|
2060
2066
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_ad3471260b66bdd7e6b790ad2a94fe7ce"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ad3471260b66bdd7e6b790ad2a94fe7ce">SVF::SVFUtil::getTaskDataAtHareParForSite</a></div><div class="ttdeci">const Value * getTaskDataAtHareParForSite(const CallSite cs)</div><div class="ttdoc">Return the task data argument of the parallel_for rountine. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00378">LLVMUtil.h:378</a></div></div>
|
|
2061
2067
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5a93f3d13e2b3df126fbc42b1bd09006"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">SVF::SVFIRBuilder::getObjectNode</a></div><div class="ttdeci">NodeID getObjectNode(const Value *V)</div><div class="ttdoc">GetObject - Return the object node (stack/global/heap/function) according to a LLVM Value...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00095">SVFIRBuilder.h:95</a></div></div>
|
|
2062
2068
|
<div class="ttc" id="classSVF_1_1CallBlockNode_html"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html">SVF::CallBlockNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
|
|
2063
|
-
<div class="ttc" id="classSVF_1_1LocationSet_html_ac098bc95299002b9016684fa7f2799ca"><div class="ttname"><a href="classSVF_1_1LocationSet.html#ac098bc95299002b9016684fa7f2799ca">SVF::LocationSet::accumulateConstantOffset</a></div><div class="ttdeci">Size_t accumulateConstantOffset() const</div><div class="ttdoc">Get methods. </div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00154">LocationSet.h:154</a></div></div>
|
|
2064
2069
|
<div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
|
|
2065
2070
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a140defeb309d895394822f8780deda16"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">SVF::SVFIRBuilder::addCopyEdge</a></div><div class="ttdeci">CopyStmt * addCopyEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00296">SVFIRBuilder.h:296</a></div></div>
|
|
2066
2071
|
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
|
|
@@ -2070,6 +2075,7 @@ Private Attributes</h2></td></tr>
|
|
|
2070
2075
|
<div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a9d9ec33eb5ecf285ccf2aa575bcba31a"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9d9ec33eb5ecf285ccf2aa575bcba31a">SVF::ExtAPI::EFT_CXA_BEGIN_CATCH</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00088">ExtAPI.h:88</a></div></div>
|
|
2071
2076
|
<div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094aec63c85b24133af679d60dda42ab44ab"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aec63c85b24133af679d60dda42ab44ab">SVF::ExtAPI::EFT_L_A1</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00060">ExtAPI.h:60</a></div></div>
|
|
2072
2077
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a22ef185e767ff76c098e75126c885400"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVF::SVFUtil::isExtCall</a></div><div class="ttdeci">bool isExtCall(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00063">LLVMUtil.h:63</a></div></div>
|
|
2078
|
+
<div class="ttc" id="classSVF_1_1LocationSet_html_a43de212ce81a29391cee13d8dbaa93eb"><div class="ttname"><a href="classSVF_1_1LocationSet.html#a43de212ce81a29391cee13d8dbaa93eb">SVF::LocationSet::accumulateConstantFieldIdx</a></div><div class="ttdeci">Size_t accumulateConstantFieldIdx() const</div><div class="ttdoc">Get methods. </div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00154">LocationSet.h:154</a></div></div>
|
|
2073
2079
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ac03c4203e4b32a68dd548af64764fe2c"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">SVF::SVFIRBuilder::getBaseTypeAndFlattenedFields</a></div><div class="ttdeci">const Type * getBaseTypeAndFlattenedFields(const Value *V, std::vector< LocationSet > &fields)</div><div class="ttdoc">Get the base type and max offset. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00960">SVFIRBuilder.cpp:960</a></div></div>
|
|
2074
2080
|
<div class="ttc" id="classSVF_1_1SymbolTableInfo_html"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html">SVF::SymbolTableInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00047">SymbolTableInfo.h:47</a></div></div>
|
|
2075
2081
|
</div><!-- fragment -->
|
|
@@ -2322,7 +2328,8 @@ Private Attributes</h2></td></tr>
|
|
|
2322
2328
|
<p>We will have one unique function exit <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> for all returns </p>
|
|
2323
2329
|
|
|
2324
2330
|
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01556">1556</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
2325
|
-
<div class="fragment"><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> {</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>())</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> </div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a> && <span class="stringliteral">"current Val is nullptr?"</span>);</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>  edge-><a class="code" href="classSVF_1_1SVFStmt.html#a852730edf374d18a3fb3985211ed7623">setBB</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>);</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>  edge-><a class="code" href="classSVF_1_1SVFStmt.html#a24dddb4e346a6e569908e3efe8a6ecc0">setValue</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>);</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>  <span class="comment">// backmap in valuToEdgeMap</span></div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#aefe3143b33cee00c3c2611fea577c1ac">mapValueToEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>, edge);</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>  <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#ae3b8f1b45c75b5fc231da76d3a49ad57">getGlobalBlockNode</a>();</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *curInst = SVFUtil::dyn_cast<Instruction>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>  {</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* srcFun = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()->getFunction();</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* dstFun = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()->getFunction();</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>  <span class="keywordflow">if</span>(srcFun!=<span class="keyword">nullptr</span> && !SVFUtil::isa<RetPE>(edge) && !SVFUtil::isa<Function>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()->getValue())) {</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(srcFun==curInst->getFunction() && <span class="stringliteral">"SrcNode of the PAGEdge not in the same function?"</span>);</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>  }</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>  <span class="keywordflow">if</span>(dstFun!=<span class="keyword">nullptr</span> && !SVFUtil::isa<CallPE>(edge) && !SVFUtil::isa<Function>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()->getValue())) {</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dstFun==curInst->getFunction() && <span class="stringliteral">"DstNode of the PAGEdge not in the same function?"</span>);</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>  }</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> </div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>  <span class="keywordflow">if</span> (!(SVFUtil::isa<GepStmt>(edge) && SVFUtil::isa<GepValVar>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>())))</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a> && <span class="stringliteral">"instruction does not have a basic block??"</span>);</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> </div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac7dcc6103dee3a0bbc2fd2e02716a154">ReturnInst</a>* retInst = SVFUtil::dyn_cast<ReturnInst>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>)){</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(retInst->getParent()->getParent());</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>  icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#aa33426d57dc150956902945a17a29bcb">getFunExitBlockNode</a>(fun);</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>  }</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>  icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(curInst);</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>  }</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* arg = SVFUtil::dyn_cast<Argument>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>  {</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a> && (&<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>->getParent()->getEntryBlock() == <a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>));</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(arg->getParent());</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>  icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#ae1ef14cdda27a2062c4c454750444108">getFunEntryBlockNode</a>(fun);</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>  }</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<ConstantExpr>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>  {</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>  <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>)</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a">addGlobalPAGEdge</a>(edge);</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>  icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(&<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>->front());</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>  }</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<GlobalVariable>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>  SVFUtil::isa<Function>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>  SVFUtil::isa<Constant>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>  SVFUtil::isa<MetadataAsValue>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>  {</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a">addGlobalPAGEdge</a>(edge);</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>  }</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>  {</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"what else value can we have?"</span>);</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>  }</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> </div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6">addToSVFStmtList</a>(icfgNode,edge);</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>  icfgNode-><a class="code" href="classSVF_1_1ICFGNode.html#a820364ef4158270478e9c09e11b6c2ea">addPAGEdge</a>(edge);</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> }</div><div class="ttc" id="classSVF_1_1SVFIR_html_a6a84868ab4e2845e884fba08d82b40f6"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6">SVF::SVFIR::addToSVFStmtList</a></div><div class="ttdeci">void addToSVFStmtList(ICFGNode *inst, SVFStmt *edge)</div><div class="ttdoc">Add a SVFStmt into instruction map. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00191">SVFIR.h:191</a></div></div>
|
|
2331
|
+
<div class="fragment"><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> {</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>())</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> </div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a> && <span class="stringliteral">"current Val is nullptr?"</span>);</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>  edge-><a class="code" href="classSVF_1_1SVFStmt.html#a852730edf374d18a3fb3985211ed7623">setBB</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>);</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>  edge-><a class="code" href="classSVF_1_1SVFStmt.html#a24dddb4e346a6e569908e3efe8a6ecc0">setValue</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>);</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>  <span class="comment">// backmap in valuToEdgeMap</span></div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#aefe3143b33cee00c3c2611fea577c1ac">mapValueToEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>, edge);</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>  <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#ae3b8f1b45c75b5fc231da76d3a49ad57">getGlobalBlockNode</a>();</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *curInst = SVFUtil::dyn_cast<Instruction>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>  {</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* srcFun = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()->getFunction();</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* dstFun = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()->getFunction();</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>  <span class="keywordflow">if</span>(srcFun!=<span class="keyword">nullptr</span> && !SVFUtil::isa<RetPE>(edge) && !SVFUtil::isa<Function>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()->getValue())) {</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(srcFun==curInst->getFunction() && <span class="stringliteral">"SrcNode of the PAGEdge not in the same function?"</span>);</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>  }</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>  <span class="keywordflow">if</span>(dstFun!=<span class="keyword">nullptr</span> && !SVFUtil::isa<CallPE>(edge) && !SVFUtil::isa<Function>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()->getValue())) {</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dstFun==curInst->getFunction() && <span class="stringliteral">"DstNode of the PAGEdge not in the same function?"</span>);</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>  }</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> </div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>  <span class="keywordflow">if</span> (!(SVFUtil::isa<GepStmt>(edge) && SVFUtil::isa<GepValVar>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>())))</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a> && <span class="stringliteral">"instruction does not have a basic block??"</span>);</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> </div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac7dcc6103dee3a0bbc2fd2e02716a154">ReturnInst</a>* retInst = SVFUtil::dyn_cast<ReturnInst>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>)){</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(retInst->getParent()->getParent());</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>  icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#aa33426d57dc150956902945a17a29bcb">getFunExitBlockNode</a>(fun);</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>  }</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>  icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(curInst);</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>  }</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* arg = SVFUtil::dyn_cast<Argument>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>  {</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a> && (&<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>->getParent()->getEntryBlock() == <a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>));</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(arg->getParent());</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>  icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#ae1ef14cdda27a2062c4c454750444108">getFunEntryBlockNode</a>(fun);</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>  }</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<ConstantExpr>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>  {</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>  <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>)</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a">addGlobalPAGEdge</a>(edge);</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>  icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(&<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>->front());</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>  }</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<GlobalVariable>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>  SVFUtil::isa<Function>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>  SVFUtil::isa<Constant>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>  SVFUtil::isa<MetadataAsValue>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>  {</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a">addGlobalPAGEdge</a>(edge);</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>  }</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>  {</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"what else value can we have?"</span>);</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>  }</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> </div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6">addToSVFStmtList</a>(icfgNode,edge);</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>  icfgNode-><a class="code" href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">addSVFStmt</a>(edge);</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> }</div><div class="ttc" id="classSVF_1_1SVFIR_html_a6a84868ab4e2845e884fba08d82b40f6"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6">SVF::SVFIR::addToSVFStmtList</a></div><div class="ttdeci">void addToSVFStmtList(ICFGNode *inst, SVFStmt *edge)</div><div class="ttdoc">Add a SVFStmt into instruction map. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00191">SVFIR.h:191</a></div></div>
|
|
2332
|
+
<div class="ttc" id="classSVF_1_1ICFGNode_html_a8a133398c691ab3639ceefbc57cd33be"><div class="ttname"><a href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">SVF::ICFGNode::addSVFStmt</a></div><div class="ttdeci">void addSVFStmt(const SVFStmt *edge)</div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00116">ICFGNode.h:116</a></div></div>
|
|
2326
2333
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
2327
2334
|
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00233">BasicTypes.h:233</a></div></div>
|
|
2328
2335
|
<div class="ttc" id="classSVF_1_1IRGraph_html_aefe3143b33cee00c3c2611fea577c1ac"><div class="ttname"><a href="classSVF_1_1IRGraph.html#aefe3143b33cee00c3c2611fea577c1ac">SVF::IRGraph::mapValueToEdge</a></div><div class="ttdeci">void mapValueToEdge(const Value *V, SVFStmt *edge)</div><div class="ttdoc">Map a value to a set of edges. </div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00081">IRGraph.h:81</a></div></div>
|
|
@@ -2344,7 +2351,6 @@ Private Attributes</h2></td></tr>
|
|
|
2344
2351
|
<div class="ttc" id="classSVF_1_1ICFG_html_ae1ef14cdda27a2062c4c454750444108"><div class="ttname"><a href="classSVF_1_1ICFG.html#ae1ef14cdda27a2062c4c454750444108">SVF::ICFG::getFunEntryBlockNode</a></div><div class="ttdeci">FunEntryBlockNode * getFunEntryBlockNode(const SVFFunction *fun)</div><div class="ttdoc">Add a function entry node. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00230">ICFG.cpp:230</a></div></div>
|
|
2345
2352
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
|
|
2346
2353
|
<div class="ttc" id="classSVF_1_1SVFModule_html_a1357c876eccedd58b3abe68875b3a570"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVF::SVFModule::pagReadFromTXT</a></div><div class="ttdeci">static bool pagReadFromTXT()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00093">SVFModule.h:93</a></div></div>
|
|
2347
|
-
<div class="ttc" id="classSVF_1_1ICFGNode_html_a820364ef4158270478e9c09e11b6c2ea"><div class="ttname"><a href="classSVF_1_1ICFGNode.html#a820364ef4158270478e9c09e11b6c2ea">SVF::ICFGNode::addPAGEdge</a></div><div class="ttdeci">void addPAGEdge(const SVFStmt *edge)</div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00116">ICFGNode.h:116</a></div></div>
|
|
2348
2354
|
<div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
|
|
2349
2355
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_a547b3bc62de65b9dbfc6dee55c063dd7"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">SVF::LLVMModuleSet::getSVFFunction</a></div><div class="ttdeci">const SVFFunction * getSVFFunction(const Function *fun) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00112">LLVMModule.h:112</a></div></div>
|
|
2350
2356
|
<div class="ttc" id="classSVF_1_1ICFG_html_ab7b0b3088b46ad65451905cc4f567a7b"><div class="ttname"><a href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">SVF::ICFG::getBlockICFGNode</a></div><div class="ttdeci">ICFGNode * getBlockICFGNode(const Instruction *inst)</div><div class="ttdoc">Get a basic block ICFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00181">ICFG.cpp:181</a></div></div>
|
|
@@ -2514,7 +2520,7 @@ Private Attributes</h2></td></tr>
|
|
|
2514
2520
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
2515
2521
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
2516
2522
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
|
|
2517
|
-
<div class="ttc" id="classSVF_1_1BinaryOPStmt_html"><div class="ttname"><a href="classSVF_1_1BinaryOPStmt.html">SVF::BinaryOPStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#
|
|
2523
|
+
<div class="ttc" id="classSVF_1_1BinaryOPStmt_html"><div class="ttname"><a href="classSVF_1_1BinaryOPStmt.html">SVF::BinaryOPStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00809">SVFStatements.h:809</a></div></div>
|
|
2518
2524
|
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
|
|
2519
2525
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5832c14f0c8bf4d2f41921383c40340e"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5832c14f0c8bf4d2f41921383c40340e">SVF::SVFIRBuilder::addBinaryOPEdge</a></div><div class="ttdeci">BinaryOPStmt * addBinaryOPEdge(NodeID op1, NodeID op2, NodeID dst, u32_t opcode)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00317">SVFIRBuilder.h:317</a></div></div>
|
|
2520
2526
|
</div><!-- fragment -->
|
|
@@ -2544,7 +2550,7 @@ Private Attributes</h2></td></tr>
|
|
|
2544
2550
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
|
|
2545
2551
|
<div class="ttc" id="classSVF_1_1IRGraph_html_a3de9a2a565c303f68a90c32dc59febd5"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">SVF::IRGraph::getNullPtr</a></div><div class="ttdeci">NodeID getNullPtr() const</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00156">IRGraph.h:156</a></div></div>
|
|
2546
2552
|
<div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00079">BasicTypes.h:79</a></div></div>
|
|
2547
|
-
<div class="ttc" id="classSVF_1_1BranchStmt_html"><div class="ttname"><a href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#
|
|
2553
|
+
<div class="ttc" id="classSVF_1_1BranchStmt_html"><div class="ttname"><a href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00908">SVFStatements.h:908</a></div></div>
|
|
2548
2554
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
|
|
2549
2555
|
<div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
|
|
2550
2556
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ae0a1f66dee058f6af0f6b074db38db8e"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ae0a1f66dee058f6af0f6b074db38db8e">SVF::SVFIRBuilder::addBranchStmt</a></div><div class="ttdeci">BranchStmt * addBranchStmt(NodeID br, NodeID cond, const std::vector< const ICFGNode *> succs)</div><div class="ttdoc">Add Branch statement. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00331">SVFIRBuilder.h:331</a></div></div>
|
|
@@ -2708,7 +2714,7 @@ Private Attributes</h2></td></tr>
|
|
|
2708
2714
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
2709
2715
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
2710
2716
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
|
|
2711
|
-
<div class="ttc" id="classSVF_1_1CmpStmt_html"><div class="ttname"><a href="classSVF_1_1CmpStmt.html">SVF::CmpStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#
|
|
2717
|
+
<div class="ttc" id="classSVF_1_1CmpStmt_html"><div class="ttname"><a href="classSVF_1_1CmpStmt.html">SVF::CmpStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00763">SVFStatements.h:763</a></div></div>
|
|
2712
2718
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a0a7183291291e3f91188607ead065c81"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a0a7183291291e3f91188607ead065c81">SVF::SVFIRBuilder::addCmpEdge</a></div><div class="ttdeci">CmpStmt * addCmpEdge(NodeID op1, NodeID op2, NodeID dst, u32_t predict)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00310">SVFIRBuilder.h:310</a></div></div>
|
|
2713
2719
|
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
|
|
2714
2720
|
</div><!-- fragment -->
|
|
@@ -3279,7 +3285,7 @@ Private Attributes</h2></td></tr>
|
|
|
3279
3285
|
<div class="ttc" id="classSVF_1_1ICFGNode_html"><div class="ttname"><a href="classSVF_1_1ICFGNode.html">SVF::ICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00054">ICFGNode.h:54</a></div></div>
|
|
3280
3286
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
|
|
3281
3287
|
<div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00079">BasicTypes.h:79</a></div></div>
|
|
3282
|
-
<div class="ttc" id="classSVF_1_1BranchStmt_html"><div class="ttname"><a href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#
|
|
3288
|
+
<div class="ttc" id="classSVF_1_1BranchStmt_html"><div class="ttname"><a href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00908">SVFStatements.h:908</a></div></div>
|
|
3283
3289
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
|
|
3284
3290
|
<div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
|
|
3285
3291
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ae0a1f66dee058f6af0f6b074db38db8e"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ae0a1f66dee058f6af0f6b074db38db8e">SVF::SVFIRBuilder::addBranchStmt</a></div><div class="ttdeci">BranchStmt * addBranchStmt(NodeID br, NodeID cond, const std::vector< const ICFGNode *> succs)</div><div class="ttdoc">Add Branch statement. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00331">SVFIRBuilder.h:331</a></div></div>
|
|
@@ -3310,7 +3316,7 @@ Private Attributes</h2></td></tr>
|
|
|
3310
3316
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a6102431dd8a8d7b050d5773e499d0fbf"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a6102431dd8a8d7b050d5773e499d0fbf">SVF::SVFIRBuilder::addUnaryOPEdge</a></div><div class="ttdeci">UnaryOPStmt * addUnaryOPEdge(NodeID src, NodeID dst, u32_t opcode)</div><div class="ttdoc">Add Unary edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00324">SVFIRBuilder.h:324</a></div></div>
|
|
3311
3317
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
3312
3318
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
|
|
3313
|
-
<div class="ttc" id="classSVF_1_1UnaryOPStmt_html"><div class="ttname"><a href="classSVF_1_1UnaryOPStmt.html">SVF::UnaryOPStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#
|
|
3319
|
+
<div class="ttc" id="classSVF_1_1UnaryOPStmt_html"><div class="ttname"><a href="classSVF_1_1UnaryOPStmt.html">SVF::UnaryOPStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00854">SVFStatements.h:854</a></div></div>
|
|
3314
3320
|
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
|
|
3315
3321
|
</div><!-- fragment -->
|
|
3316
3322
|
</div>
|