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
|
@@ -66,7 +66,7 @@ $(function() {
|
|
|
66
66
|
<div class="title">SymbolTableInfo.cpp</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="SymbolTableInfo_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- SymbolTableInfo.cpp -- Symbol information from IR------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">/*</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * SymbolTableInfo.cpp</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Created on: Nov 11, 2013</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> */</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <memory></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="SymbolTableInfo_8h.html">MemoryModel/SymbolTableInfo.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a>* SymbolTableInfo::dl = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* SymbolTableInfo::symInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> StInfo::maxFieldLimit = 0;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">/*</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment"> * Initial the memory object here (for a dummy object)</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment"> */</span></div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a76971ba9b579907ef937cd7adda89562"> 49</a></span> <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* SymbolTableInfo::createObjTypeInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* typeInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>(StInfo::getMaxFieldLimit(),type);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  typeInfo-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a66692043a56c327ac7ac00cc3126cd78">analyzeHeapObjType</a>(type);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">return</span> typeInfo;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11"> 59</a></span> <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* SymbolTableInfo::SymbolInfo()</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">if</span> (symInfo == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  symInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>();</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  symInfo->setModelConstants(Options::ModelConsts);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> symInfo;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aa99cab5480116905dd41ab0ad24b9462"> 72</a></span> <span class="keywordtype">void</span> SymbolTableInfo::collectTypeInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ty)</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(typeToFieldInfo.find(ty) == typeToFieldInfo.end() && <span class="stringliteral">"this type has been collected before"</span>);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* aty = SVFUtil::dyn_cast<ArrayType>(ty))</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  collectArrayInfo(aty);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a>* sty = SVFUtil::dyn_cast<StructType>(ty))</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  collectStructInfo(sty);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  collectSimpleTypeInfo(ty);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aea1c4ec32c307feb5da455a41cc51b5e"> 88</a></span> <span class="keywordtype">void</span> SymbolTableInfo::collectArrayInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* ty)</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>();</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  typeToFieldInfo[ty] = stinfo;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> out_num = ty->getNumElements();</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">llvm::Type</a>* elemTy = ty->getElementType();</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> out_stride = getTypeSizeInBytes(elemTy);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* aty = SVFUtil::dyn_cast<ArrayType>(elemTy))</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  out_num *= aty->getNumElements();</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  elemTy = aty->getElementType();</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  out_stride = getTypeSizeInBytes(elemTy);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#a7011600965de6fe5401b87f5c71e684f">addFldWithType</a>(0,elemTy);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* elemStInfo = getStructInfo(elemTy);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfE = elemStInfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().size();</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j < nfE; j++)</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> idx = elemStInfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenFldIdx();</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* fieldTy = elemStInfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenElemTy();</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(idx, fieldTy);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab5297b79a02d8afce647a8b61bdab804"> 124</a></span> <span class="keywordtype">void</span> SymbolTableInfo::collectStructInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *sty)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  typeToFieldInfo[sty] = stinfo;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="comment">// Number of fields after flattening the struct</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nf = 0;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="comment">// field of the current struct</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx = 0;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">for</span> (StructType::element_iterator it = sty->element_begin(), ie =</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  sty->element_end(); it != ie; ++it, ++field_idx)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *et = *it;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#a7011600965de6fe5401b87f5c71e684f">addFldWithType</a>(nf, et);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">if</span> (SVFUtil::isa<StructType>(et) || SVFUtil::isa<ArrayType>(et))</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> * subStinfo = getStructInfo(et);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfE = subStinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().size();</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="comment">//Copy ST's info, whose element 0 is the size of ST itself.</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j < nfE; j++)</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fldIdx = nf + subStinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenFldIdx();</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = subStinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenElemTy();</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(fldIdx, elemTy);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  nf += nfE;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  }</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">else</span> <span class="comment">//simple type</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(nf, et);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  ++nf;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="comment">//Record the size of the complete struct and update max_struct.</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">if</span> (nf > maxStSize)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  maxStruct = sty;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  maxStSize = nf;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div><div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#abf7567c655499d6744de8df689c11fad"> 175</a></span> <span class="keywordtype">void</span> SymbolTableInfo::collectSimpleTypeInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ty)</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> {</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>();</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  typeToFieldInfo[ty] = stinfo;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#a7011600965de6fe5401b87f5c71e684f">addFldWithType</a>(0, ty);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(0, ty);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div><div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a480a7565dcb5d9a94f4b0ffb44b127ee"> 191</a></span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> SymbolTableInfo::getModulusOffset(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls)</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> offset = ls.<a class="code" href="classSVF_1_1LocationSet.html#ac098bc95299002b9016684fa7f2799ca">accumulateConstantOffset</a>();</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">if</span>(offset < 0)</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">"try to create a gep node with negative offset."</span>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  offset = abs(offset);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> maxOffset = obj-><a class="code" href="classSVF_1_1MemObj.html#afccbd809fe7c2acf4741383987036807">getMaxFieldOffsetLimit</a>();</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">if</span> (maxOffset != 0)</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  offset = offset % maxOffset;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  offset = 0;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offset);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> }</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </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> </div><div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a87cc3289dd69e5378487dd9ae2c9e82e"> 218</a></span> <span class="keywordtype">void</span> SymbolTableInfo::destroy()</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> </div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordflow">for</span> (IDToMemMapTy::iterator iter = objMap.begin(); iter != objMap.end();</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  ++iter)</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  {</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">if</span> (iter->second)</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keyword">delete</span> iter->second;</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="keywordflow">for</span> (TypeToFieldInfoMap::iterator iter = typeToFieldInfo.begin();</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  iter != typeToFieldInfo.end(); ++iter)</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">if</span> (iter->second)</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keyword">delete</span> iter->second;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  }</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">if</span>(dl){</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keyword">delete</span> dl;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  dl = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">if</span>(mod){</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keyword">delete</span> mod;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  mod = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div><div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a65a7e9d6d238a04291cb7d0aa15ece90"> 247</a></span> <span class="keywordtype">bool</span> SymbolTableInfo::isNullPtrSym(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> {</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* v = SVFUtil::dyn_cast<Constant>(val))</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="keywordflow">return</span> v->isNullValue() && v->getType()->isPointerTy();</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>  <span class="keywordflow">return</span> <span class="keyword">false</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> </div><div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab15112d3900f28525848cbe5fad37deb"> 259</a></span> <span class="keywordtype">bool</span> SymbolTableInfo::isBlackholeSym(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">return</span> (SVFUtil::isa<UndefValue>(val));</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> }</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div><div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a61bda1c1c52fb765d0027d8141d35c35"> 267</a></span> <span class="keywordtype">bool</span> SymbolTableInfo::isConstantObjSym(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</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">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* v = SVFUtil::dyn_cast<GlobalVariable>(val))</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">cppUtil::isValVtbl</a>(const_cast<GlobalVariable*>(v)))</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!v->hasInitializer()){</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">if</span>(v->isExternalLinkage(v->getLinkage()))</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> *stInfo = getStructInfo(v->getInitializer()->getType());</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keyword">const</span> std::vector<FlattenedFieldInfo> &fields = stInfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>();</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="keywordflow">for</span> (std::vector<FlattenedFieldInfo>::const_iterator it = fields.begin(), eit = fields.end(); it != eit; ++it)</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  {</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> &field = *it;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *elemTy = field.<a class="code" href="classSVF_1_1FlattenedFieldInfo.html#a92c1b65c36feeabf09541c9af4650f14">getFlattenElemTy</a>();</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!SVFUtil::isa<FunctionType>(elemTy) && <span class="stringliteral">"Initializer of a global is a function?"</span>);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">if</span> (SVFUtil::isa<PointerType>(elemTy))</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">return</span> v->isConstant();</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  }</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9e85d445e8b7b205134acd3874bba388">SVFUtil::isConstantData</a>(val);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> }</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a6ddf057415f641bd8ad15bded1415776"> 299</a></span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* SymbolTableInfo::createBlkObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(isBlkObj(symId));</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end());</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo());</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  objMap[symId] = obj;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keywordflow">return</span> obj;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> }</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div><div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab5c9d593aa68c7150cd382db230eec3e"> 308</a></span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* SymbolTableInfo::createConstantObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId)</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span> {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(isConstantObj(symId));</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end());</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo());</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  objMap[symId] = obj;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordflow">return</span> obj;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div><div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a8e40c578ccdd3a108a10a191a309bd18"> 317</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* SymbolTableInfo::createDummyObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end() && <span class="stringliteral">"this dummy obj has been created before"</span>);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* memObj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo(type));</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  objMap[symId] = memObj;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">return</span> memObj;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> }</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div><div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ac50e1d8f8b8e514d098a55bfbac86010"> 325</a></span> <span class="keyword">const</span> std::vector<u32_t>& SymbolTableInfo::getFlattenedFieldIdxVec(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T)</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> {</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">return</span> getStructInfoIter(T)->second->getFlattenedFieldIdxVec();</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div><div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0"> 330</a></span> <span class="keyword">const</span> std::vector<FlattenedFieldInfo>& SymbolTableInfo::getFlattenedFieldInfoVec(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T)</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">return</span> getStructInfoIter(T)->second->getFlattenedFieldInfoVec();</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div><div class="line"><a name="l00335"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a866085ff37b7841606c523817c621f49"> 335</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* SymbolTableInfo::getOriginalFieldType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* baseType, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx)</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> {</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">return</span> getStructInfoIter(baseType)->second->getOriginalFieldType(field_idx);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a666d1dff7a629bd34abbd2031c1037a4"> 340</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* SymbolTableInfo::getFlatternedFieldType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* baseType, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx){</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">return</span> getStructInfoIter(baseType)->second->getFlatternedFieldType(field_idx);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="comment">/*</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="comment"> * Print out the composite type information</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="comment"> */</span></div><div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aa40ff2fcaba3d4297d63269b74738737"> 347</a></span> <span class="keywordtype">void</span> SymbolTableInfo::printFlattenFields(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a> *at = SVFUtil::dyn_cast<ArrayType> (type))</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  at->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\tarray type "</span>;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t [element size = "</span> << getTypeSizeInBytes(at->getElementType()) << <span class="stringliteral">"]\n"</span>;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  }</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">else</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> (type))</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  {</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  st->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  std::vector<FlattenedFieldInfo>& finfo = getStructInfo(st)->getFlattenedFieldInfoVec();</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordtype">int</span> field_idx = 0;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keywordflow">for</span>(std::vector<FlattenedFieldInfo>::iterator it = finfo.begin(), eit = finfo.end();</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  it!=eit; ++it, field_idx++)</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  {</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" \tField_idx = "</span> << (*it).getFlattenFldIdx();</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">", field type: "</span>;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  (*it).getFlattenElemTy()->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">", field size: "</span> << getTypeSizeInBytes((*it).getFlattenElemTy());</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  }</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* pt= SVFUtil::dyn_cast<PointerType> (type))</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  {</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sizeInBits = getTypeSizeInBytes(type);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> eSize = getTypeSizeInBytes(pt->getElementType());</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  pt->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">"\t [pointer size = "</span> << sizeInBits << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">"\t [target size = "</span> << eSize << <span class="stringliteral">"]\n"</span>;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  }</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">FunctionType</a>* fu= SVFUtil::dyn_cast<FunctionType> (type))</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  {</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  fu->getReturnType()->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"(Function)}\n\n"</span>;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> </div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type->isSingleValueType() && <span class="stringliteral">"not a single value type, then what else!!"</span>);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> eSize = getTypeSizeInBytes(type);</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  type->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">"\t [object size = "</span> << eSize << <span class="stringliteral">"]\n"</span>;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  }</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> }</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div><div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a7d3001549966444622d5918e5811e89e"> 411</a></span> std::string SymbolTableInfo::toString(<a class="code" href="classSVF_1_1SymbolTableInfo.html#afd2cf6ef6d7f2a583c709a72067be89b">SYMTYPE</a> symtype)</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keywordflow">switch</span> (symtype) {</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keywordflow">case</span> SYMTYPE::BlackHole: {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordflow">return</span> <span class="stringliteral">"BlackHole"</span>;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  }</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">case</span> SYMTYPE::ConstantObj: {</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ConstantObj"</span>;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  }</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">case</span> SYMTYPE::BlkPtr: {</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordflow">return</span> <span class="stringliteral">"BlkPtr"</span>;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  }</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordflow">case</span> SYMTYPE::NullPtr: {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keywordflow">return</span> <span class="stringliteral">"NullPtr"</span>;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordflow">case</span> SYMTYPE::ValSymbol: {</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ValSym"</span>;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordflow">case</span> SYMTYPE::ObjSymbol: {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ObjSym"</span>;</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  }</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">case</span> SYMTYPE::RetSymbol: {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">return</span> <span class="stringliteral">"RetSym"</span>;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">case</span> SYMTYPE::VarargSymbol: {</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">return</span> <span class="stringliteral">"VarargSym"</span>;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keywordflow">default</span>: {</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Invalid SYMTYPE"</span>;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  }</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span> }</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div><div class="line"><a name="l00444"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a9f4cf6914b400b9f69c7852f13c496a9"> 444</a></span> <span class="keywordtype">void</span> SymbolTableInfo::dump()</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span> {</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap<SymID, Value*></a> idmap;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> maxid = 0;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">for</span> (ValueToIDMapTy::iterator iter = valSymMap.begin(); iter != valSymMap.end();</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  ++iter)</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter->second;</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  maxid = max(i, maxid);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter->first;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  idmap[i] = val;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keywordflow">for</span> (ValueToIDMapTy::iterator iter = objSymMap.begin(); iter != objSymMap.end();</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  ++iter)</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  {</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter->second;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  maxid = max(i, maxid);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter->first;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  idmap[i] = val;</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  }</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">for</span> (FunToIDMapTy::iterator iter = returnSymMap.begin(); iter != returnSymMap.end();</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  ++iter)</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  {</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter->second;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  maxid = max(i, maxid);</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter->first;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  idmap[i] = val;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  }</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keywordflow">for</span> (FunToIDMapTy::iterator iter = varargSymMap.begin(); iter != varargSymMap.end();</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  ++iter)</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  {</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter->second;</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  maxid = max(i, maxid);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter->first;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  idmap[i] = val;</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  }</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"{SymbolTableInfo \n"</span>;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter : idmap) {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << iter.first << <span class="stringliteral">" "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(iter.second) << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  }</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span> }</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span> </div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="comment">/*</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="comment"> * Get the type size given a target data layout</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="comment"> */</span></div><div class="line"><a name="l00490"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#af4239ff717303dee25f1f4ba60070f9e"> 490</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> SymbolTableInfo::getTypeSizeInBytes(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span> {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> </div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="comment">// if the type has size then simply return it, otherwise just return 0</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <span class="keywordflow">if</span>(type->isSized())</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keywordflow">return</span> getDataLayout(LLVMModuleSet::getLLVMModuleSet()->getMainLLVMModule())->getTypeStoreSize(const_cast<Type*>(type));</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div><div class="line"><a name="l00500"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ada63ac47515daa4402914083058baec8"> 500</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> SymbolTableInfo::getTypeSizeInBytes(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *sty, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx)</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span> {</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a52c8654c221bb53a59f70ea3cb1e5c45">StructLayout</a> *stTySL = getDataLayout(LLVMModuleSet::getLLVMModuleSet()->getMainLLVMModule())->getStructLayout( const_cast<StructType *>(sty) );</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="keywordflow">if</span>(sty->isOpaque())</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keywordflow">return</span> stTySL->getElementOffset(field_idx);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span> </div><div class="line"><a name="l00516"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#a66692043a56c327ac7ac00cc3126cd78"> 516</a></span> <span class="keywordtype">void</span> ObjTypeInfo::analyzeHeapObjType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>*)</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="comment">// TODO: Heap and static objects are considered as pointers right now.</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <span class="comment">// Refine this function to get more details about heap and static objects.</span></div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  setFlag(HEAP_OBJ);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  setFlag(HASPTR_OBJ);</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> }</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div><div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#aa8b97a2cbd2de56b3c6c5c0e2e0a2211"> 527</a></span> <span class="keywordtype">void</span> ObjTypeInfo::analyzeStaticObjType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>*)</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> {</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="comment">// TODO: Heap and static objects are considered as pointers right now.</span></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="comment">// Refine this function to get more details about heap and static objects.</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  setFlag(STATIC_OBJ);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  setFlag(HASPTR_OBJ);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> }</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span> </div><div class="line"><a name="l00538"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac"> 538</a></span> <span class="keywordtype">bool</span> ObjTypeInfo::isNonPtrFieldObj(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls)</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span> {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordflow">if</span> (isHeap() || isStaticObj())</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> </div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ety = getType();</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a> *AT= SVFUtil::dyn_cast<ArrayType>(ety))</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  {</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  ety = AT->getElementType();</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  }</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> </div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keywordflow">if</span> (SVFUtil::isa<StructType>(ety) || SVFUtil::isa<ArrayType>(ety))</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordtype">bool</span> hasIntersection = <span class="keyword">false</span>;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keyword">const</span> vector<FlattenedFieldInfo> &infovec = SymbolTableInfo::SymbolInfo()->getFlattenedFieldInfoVec(ety);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  vector<FlattenedFieldInfo>::const_iterator it = infovec.begin();</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  vector<FlattenedFieldInfo>::const_iterator eit = infovec.end();</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="keywordflow">for</span> (; it != eit; ++it)</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  {</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a>& fieldLS = *it;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordflow">if</span> (ls.<a class="code" href="classSVF_1_1LocationSet.html#a0e1cddc4228e310c95f68c661c7b94c8">intersects</a>(<a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(fieldLS)))</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  {</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  hasIntersection = <span class="keyword">true</span>;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <span class="keywordflow">if</span> (fieldLS.<a class="code" href="classSVF_1_1FlattenedFieldInfo.html#a92c1b65c36feeabf09541c9af4650f14">getFlattenElemTy</a>()->isPointerTy())</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  }</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  }</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(hasIntersection && <span class="stringliteral">"cannot find field of specified offset"</span>);</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  }</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">if</span> (isStaticObj() || isHeap())</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="comment">// TODO: Objects which cannot find proper field for a certain offset including</span></div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="comment">// arguments in main(), static objects allocated before main and heap</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="comment">// objects. Right now they're considered to have infinite fields and we</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="comment">// treat each field as pointers conservatively.</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="comment">// Try to model static and heap objects more accurately in the future.</span></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  {</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <span class="comment">// TODO: Using new memory model (locMM) may create objects with spurious offset</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="comment">// as we simply return new offset by mod operation without checking its</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <span class="comment">// correctness in LocSymTableInfo::getModulusOffset(). So the following</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="comment">// assertion may fail. Try to refine the new memory model.</span></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="comment">//assert(ls.getOffset() == 0 && "cannot get a field from a non-struct type");</span></div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keywordflow">return</span> (hasPtrObj() == <span class="keyword">false</span>);</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  }</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span> }</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span> </div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div><div class="line"><a name="l00595"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a981b7424901ef74467f725ffc9fec0ca"> 595</a></span> <span class="keywordtype">void</span> MemObj::setFieldSensitive()</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  typeInfo->setMaxFieldOffsetLimit(StInfo::getMaxFieldLimit());</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> }</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> </div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span> </div><div class="line"><a name="l00604"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#afc62b5dbcaf790e561c852f567ca5bd1"> 604</a></span> MemObj::MemObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> <span class="keywordtype">id</span>, <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* ti, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val) :</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  symId(id), refVal(val), typeInfo(ti)</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span> {</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span> }</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span> </div><div class="line"><a name="l00612"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c"> 612</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c">MemObj::isBlackHoleObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="keyword"></span>{</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#ad9cdb21e20182f3bc95f04bbb97712f3">SymbolTableInfo::isBlkObj</a>(<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>());</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span> }</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> </div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span> </div><div class="line"><a name="l00619"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216"> 619</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216">MemObj::getType</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="keyword"></span>{</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">isHeap</a>() == <span class="keyword">false</span>)</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* type = SVFUtil::dyn_cast<PointerType>(<a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>()))</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keywordflow">return</span> type->getElementType();</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>();</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  }</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>() && SVFUtil::isa<Instruction>(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()))</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a973113323e30a01fd904b35ac18d40ce">SVFUtil::getTypeOfHeapAlloc</a>(SVFUtil::cast<Instruction>(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()));</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>();</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span> }</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="comment">/*</span></div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="comment"> * Destroy the fields of the memory object</span></div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="comment"> */</span></div><div class="line"><a name="l00636"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735"> 636</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735">MemObj::destroy</a>()</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> {</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span> }</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span> </div><div class="line"><a name="l00643"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#afccbd809fe7c2acf4741383987036807"> 643</a></span> <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> <a class="code" href="classSVF_1_1MemObj.html#afccbd809fe7c2acf4741383987036807">MemObj::getMaxFieldOffsetLimit</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="keyword"></span>{</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a81bc3d785062c7e527ecf8e564cd52a4">getMaxFieldOffsetLimit</a>();</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span> }</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span> </div><div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc"> 649</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">MemObj::isFieldInsensitive</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keyword"></span>{</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#afccbd809fe7c2acf4741383987036807">getMaxFieldOffsetLimit</a>() == 0;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span> }</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span> </div><div class="line"><a name="l00655"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c"> 655</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c">MemObj::setFieldInsensitive</a>()</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span> {</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a9fff869c63776c6ebeff78933e0f6092">setMaxFieldOffsetLimit</a>(0);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span> }</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div><div class="line"><a name="l00660"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b"> 660</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b">MemObj::isFunction</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keyword"></span>{</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#ac99fa14fdf7bc0dd3e9ff36c7a3a351f">isFunction</a>();</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span> }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span> </div><div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4"> 665</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">MemObj::isGlobalObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="keyword"></span>{</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#aa2855b69150287e5f04a7a683dc4c91f">isGlobalObj</a>();</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span> }</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span> </div><div class="line"><a name="l00670"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e"> 670</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e">MemObj::isStaticObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="keyword"></span>{</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a3594dc1c1943dbac0ab72f2ff163c523">isStaticObj</a>();</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span> }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div><div class="line"><a name="l00675"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee"> 675</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">MemObj::isStack</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="keyword"></span>{</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#aa568dc82decd28d2ef40785a4a647602">isStack</a>();</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span> }</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span> </div><div class="line"><a name="l00680"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1"> 680</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">MemObj::isHeap</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="keyword"></span>{</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a26c179394fbda9a9261d0bf3f52b619d">isHeap</a>();</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span> }</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span> </div><div class="line"><a name="l00685"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286"> 685</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286">MemObj::isStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="keyword"></span>{</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a06493939f797f122b70b90bbf22cad7a">isStruct</a>();</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span> }</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span> </div><div class="line"><a name="l00690"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af"> 690</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af">MemObj::isArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="keyword"></span>{</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a0627e8b9dda2e13cc77c334eefab21e1">isArray</a>();</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span> }</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span> </div><div class="line"><a name="l00695"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf"> 695</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf">MemObj::isVarStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="keyword"></span>{</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a40d6703875b370aed2c6dc41c0594af5">isVarStruct</a>();</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span> }</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span> </div><div class="line"><a name="l00700"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a616e9f4d6f82a253f94391c47668b9a6"> 700</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a616e9f4d6f82a253f94391c47668b9a6">MemObj::isVarArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keyword"></span>{</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#aca1e900f9b0a774684af77666cf033e3">isVarArray</a>();</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span> }</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span> </div><div class="line"><a name="l00705"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a0f5283e512d6c749b33ba9cfc2d70d17"> 705</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a0f5283e512d6c749b33ba9cfc2d70d17">MemObj::isConstStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="keyword"></span>{</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a5d4afc5e1ba5cbcedf049467f75ef7c4">isConstStruct</a>();</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span> }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span> </div><div class="line"><a name="l00710"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ae30d2d8f6f621795a70ba046ca25af2d"> 710</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ae30d2d8f6f621795a70ba046ca25af2d">MemObj::isConstArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="keyword"></span>{</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#ad90ea6a01cca9c370b7f17b408dcc5a7">isConstArray</a>();</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span> }</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span> </div><div class="line"><a name="l00715"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a3f429b085f749ed0c8269517eb9094ae"> 715</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a3f429b085f749ed0c8269517eb9094ae">MemObj::isConstant</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="keyword"></span>{</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a8c0ae8e177452b88b3a4ec81bf77c378">isConstant</a>();</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span> }</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span> </div><div class="line"><a name="l00720"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a6dae1b3429c6049f0153ec006d329082"> 720</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a6dae1b3429c6049f0153ec006d329082">MemObj::hasPtrObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="keyword"></span>{</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#ac5bae1e7917f415193a805e8d2e29320">hasPtrObj</a>();</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span> }</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span> </div><div class="line"><a name="l00725"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ad6926becf26a625cfe165aec120b2a1e"> 725</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ad6926becf26a625cfe165aec120b2a1e">MemObj::isNonPtrFieldObj</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls)<span class="keyword"> const</span></div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="keyword"></span>{</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac">isNonPtrFieldObj</a>(ls);</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span> }</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span> </div><div class="line"><a name="l00730"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a614b26f4a3db926055a576b13842c1d7"> 730</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1MemObj.html#a614b26f4a3db926055a576b13842c1d7">MemObj::toString</a>()<span class="keyword"> const</span>{</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  std::string str;</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  rawstr << <span class="stringliteral">"MemObj : "</span> << <a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">SVFUtil::value2String</a>(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>())<< <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span> }</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span> </div><div class="ttc" id="classSVF_1_1MemObj_html_a750770ea992d39b22c8b2dda9aff2eaf"><div class="ttname"><a href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">SVF::MemObj::typeInfo</a></div><div class="ttdeci">ObjTypeInfo * typeInfo</div><div class="ttdoc">Type information of this object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00423">SymbolTableInfo.h:423</a></div></div>
|
|
69
|
+
<a href="SymbolTableInfo_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- SymbolTableInfo.cpp -- Symbol information from IR------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">/*</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * SymbolTableInfo.cpp</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Created on: Nov 11, 2013</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> */</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <memory></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="SymbolTableInfo_8h.html">MemoryModel/SymbolTableInfo.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a>* SymbolTableInfo::dl = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* SymbolTableInfo::symInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> StInfo::maxFieldLimit = 0;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">/*</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment"> * Initial the memory object here (for a dummy object)</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment"> */</span></div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a76971ba9b579907ef937cd7adda89562"> 49</a></span> <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* SymbolTableInfo::createObjTypeInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* typeInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>(StInfo::getMaxFieldLimit(),type);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  typeInfo-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a66692043a56c327ac7ac00cc3126cd78">analyzeHeapObjType</a>(type);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">return</span> typeInfo;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11"> 59</a></span> <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* SymbolTableInfo::SymbolInfo()</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">if</span> (symInfo == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  symInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>();</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  symInfo->setModelConstants(Options::ModelConsts);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> symInfo;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aa99cab5480116905dd41ab0ad24b9462"> 72</a></span> <span class="keywordtype">void</span> SymbolTableInfo::collectTypeInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ty)</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(typeToFieldInfo.find(ty) == typeToFieldInfo.end() && <span class="stringliteral">"this type has been collected before"</span>);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* aty = SVFUtil::dyn_cast<ArrayType>(ty))</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  collectArrayInfo(aty);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a>* sty = SVFUtil::dyn_cast<StructType>(ty))</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  collectStructInfo(sty);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  collectSimpleTypeInfo(ty);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aea1c4ec32c307feb5da455a41cc51b5e"> 88</a></span> <span class="keywordtype">void</span> SymbolTableInfo::collectArrayInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* ty)</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>();</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  typeToFieldInfo[ty] = stinfo;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> out_num = ty->getNumElements();</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">llvm::Type</a>* elemTy = ty->getElementType();</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> out_stride = getTypeSizeInBytes(elemTy);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* aty = SVFUtil::dyn_cast<ArrayType>(elemTy))</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  out_num *= aty->getNumElements();</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  elemTy = aty->getElementType();</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  out_stride = getTypeSizeInBytes(elemTy);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#a7011600965de6fe5401b87f5c71e684f">addFldWithType</a>(0,elemTy);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* elemStInfo = getStructInfo(elemTy);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfE = elemStInfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().size();</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j < nfE; j++)</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> idx = elemStInfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenFldIdx();</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* fieldTy = elemStInfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenElemTy();</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(idx, fieldTy);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab5297b79a02d8afce647a8b61bdab804"> 124</a></span> <span class="keywordtype">void</span> SymbolTableInfo::collectStructInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *sty)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  typeToFieldInfo[sty] = stinfo;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="comment">// Number of fields after flattening the struct</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nf = 0;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="comment">// field of the current struct</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx = 0;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">for</span> (StructType::element_iterator it = sty->element_begin(), ie =</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  sty->element_end(); it != ie; ++it, ++field_idx)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *et = *it;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#a7011600965de6fe5401b87f5c71e684f">addFldWithType</a>(nf, et);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">if</span> (SVFUtil::isa<StructType>(et) || SVFUtil::isa<ArrayType>(et))</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> * subStinfo = getStructInfo(et);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfE = subStinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().size();</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="comment">//Copy ST's info, whose element 0 is the size of ST itself.</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j < nfE; j++)</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fldIdx = nf + subStinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenFldIdx();</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = subStinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenElemTy();</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(fldIdx, elemTy);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  nf += nfE;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  }</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">else</span> <span class="comment">//simple type</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(nf, et);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  ++nf;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="comment">//Record the size of the complete struct and update max_struct.</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">if</span> (nf > maxStSize)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  maxStruct = sty;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  maxStSize = nf;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div><div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#abf7567c655499d6744de8df689c11fad"> 175</a></span> <span class="keywordtype">void</span> SymbolTableInfo::collectSimpleTypeInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ty)</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> {</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>();</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  typeToFieldInfo[ty] = stinfo;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#a7011600965de6fe5401b87f5c71e684f">addFldWithType</a>(0, ty);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(0, ty);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div><div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a480a7565dcb5d9a94f4b0ffb44b127ee"> 191</a></span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> SymbolTableInfo::getModulusOffset(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls)</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> offset = ls.<a class="code" href="classSVF_1_1LocationSet.html#a43de212ce81a29391cee13d8dbaa93eb">accumulateConstantFieldIdx</a>();</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">if</span>(offset < 0)</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">"try to create a gep node with negative offset."</span>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  offset = abs(offset);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> maxOffset = obj-><a class="code" href="classSVF_1_1MemObj.html#afccbd809fe7c2acf4741383987036807">getMaxFieldOffsetLimit</a>();</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">if</span> (maxOffset != 0)</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  offset = offset % maxOffset;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  offset = 0;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offset);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> }</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </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> </div><div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a87cc3289dd69e5378487dd9ae2c9e82e"> 218</a></span> <span class="keywordtype">void</span> SymbolTableInfo::destroy()</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> </div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordflow">for</span> (IDToMemMapTy::iterator iter = objMap.begin(); iter != objMap.end();</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  ++iter)</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  {</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">if</span> (iter->second)</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keyword">delete</span> iter->second;</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="keywordflow">for</span> (TypeToFieldInfoMap::iterator iter = typeToFieldInfo.begin();</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  iter != typeToFieldInfo.end(); ++iter)</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">if</span> (iter->second)</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keyword">delete</span> iter->second;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  }</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">if</span>(dl){</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keyword">delete</span> dl;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  dl = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">if</span>(mod){</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keyword">delete</span> mod;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  mod = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div><div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a65a7e9d6d238a04291cb7d0aa15ece90"> 247</a></span> <span class="keywordtype">bool</span> SymbolTableInfo::isNullPtrSym(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> {</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* v = SVFUtil::dyn_cast<Constant>(val))</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="keywordflow">return</span> v->isNullValue() && v->getType()->isPointerTy();</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>  <span class="keywordflow">return</span> <span class="keyword">false</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> </div><div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab15112d3900f28525848cbe5fad37deb"> 259</a></span> <span class="keywordtype">bool</span> SymbolTableInfo::isBlackholeSym(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">return</span> (SVFUtil::isa<UndefValue>(val));</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> }</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div><div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a61bda1c1c52fb765d0027d8141d35c35"> 267</a></span> <span class="keywordtype">bool</span> SymbolTableInfo::isConstantObjSym(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</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">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* v = SVFUtil::dyn_cast<GlobalVariable>(val))</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">cppUtil::isValVtbl</a>(const_cast<GlobalVariable*>(v)))</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!v->hasInitializer()){</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">if</span>(v->isExternalLinkage(v->getLinkage()))</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> *stInfo = getStructInfo(v->getInitializer()->getType());</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keyword">const</span> std::vector<FlattenedFieldInfo> &fields = stInfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>();</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="keywordflow">for</span> (std::vector<FlattenedFieldInfo>::const_iterator it = fields.begin(), eit = fields.end(); it != eit; ++it)</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  {</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> &field = *it;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *elemTy = field.<a class="code" href="classSVF_1_1FlattenedFieldInfo.html#a92c1b65c36feeabf09541c9af4650f14">getFlattenElemTy</a>();</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!SVFUtil::isa<FunctionType>(elemTy) && <span class="stringliteral">"Initializer of a global is a function?"</span>);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">if</span> (SVFUtil::isa<PointerType>(elemTy))</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">return</span> v->isConstant();</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  }</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9e85d445e8b7b205134acd3874bba388">SVFUtil::isConstantData</a>(val);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> }</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a6ddf057415f641bd8ad15bded1415776"> 299</a></span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* SymbolTableInfo::createBlkObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(isBlkObj(symId));</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end());</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo());</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  objMap[symId] = obj;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keywordflow">return</span> obj;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> }</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div><div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab5c9d593aa68c7150cd382db230eec3e"> 308</a></span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* SymbolTableInfo::createConstantObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId)</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span> {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(isConstantObj(symId));</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end());</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo());</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  objMap[symId] = obj;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordflow">return</span> obj;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div><div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a8e40c578ccdd3a108a10a191a309bd18"> 317</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* SymbolTableInfo::createDummyObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end() && <span class="stringliteral">"this dummy obj has been created before"</span>);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* memObj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo(type));</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  objMap[symId] = memObj;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">return</span> memObj;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> }</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div><div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ac50e1d8f8b8e514d098a55bfbac86010"> 325</a></span> <span class="keyword">const</span> std::vector<u32_t>& SymbolTableInfo::getFlattenedFieldIdxVec(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T)</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> {</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">return</span> getStructInfoIter(T)->second->getFlattenedFieldIdxVec();</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div><div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0"> 330</a></span> <span class="keyword">const</span> std::vector<FlattenedFieldInfo>& SymbolTableInfo::getFlattenedFieldInfoVec(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T)</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">return</span> getStructInfoIter(T)->second->getFlattenedFieldInfoVec();</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div><div class="line"><a name="l00335"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a866085ff37b7841606c523817c621f49"> 335</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* SymbolTableInfo::getOriginalFieldType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* baseType, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx)</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> {</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">return</span> getStructInfoIter(baseType)->second->getOriginalFieldType(field_idx);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a666d1dff7a629bd34abbd2031c1037a4"> 340</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* SymbolTableInfo::getFlatternedFieldType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* baseType, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx){</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">return</span> getStructInfoIter(baseType)->second->getFlatternedFieldType(field_idx);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="comment">/*</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="comment"> * Print out the composite type information</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="comment"> */</span></div><div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aa40ff2fcaba3d4297d63269b74738737"> 347</a></span> <span class="keywordtype">void</span> SymbolTableInfo::printFlattenFields(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a> *at = SVFUtil::dyn_cast<ArrayType> (type))</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  at->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\tarray type "</span>;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t [element size = "</span> << getTypeSizeInBytes(at->getElementType()) << <span class="stringliteral">"]\n"</span>;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  }</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">else</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> (type))</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  {</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  st->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  std::vector<FlattenedFieldInfo>& finfo = getStructInfo(st)->getFlattenedFieldInfoVec();</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordtype">int</span> field_idx = 0;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keywordflow">for</span>(std::vector<FlattenedFieldInfo>::iterator it = finfo.begin(), eit = finfo.end();</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  it!=eit; ++it, field_idx++)</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  {</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" \tField_idx = "</span> << (*it).getFlattenFldIdx();</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">", field type: "</span>;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  (*it).getFlattenElemTy()->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">", field size: "</span> << getTypeSizeInBytes((*it).getFlattenElemTy());</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  }</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* pt= SVFUtil::dyn_cast<PointerType> (type))</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  {</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sizeInBits = getTypeSizeInBytes(type);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> eSize = getTypeSizeInBytes(pt->getElementType());</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  pt->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">"\t [pointer size = "</span> << sizeInBits << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">"\t [target size = "</span> << eSize << <span class="stringliteral">"]\n"</span>;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  }</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">FunctionType</a>* fu= SVFUtil::dyn_cast<FunctionType> (type))</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  {</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  fu->getReturnType()->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"(Function)}\n\n"</span>;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> </div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type->isSingleValueType() && <span class="stringliteral">"not a single value type, then what else!!"</span>);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> eSize = getTypeSizeInBytes(type);</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  type->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">"\t [object size = "</span> << eSize << <span class="stringliteral">"]\n"</span>;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  }</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> }</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div><div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a7d3001549966444622d5918e5811e89e"> 411</a></span> std::string SymbolTableInfo::toString(<a class="code" href="classSVF_1_1SymbolTableInfo.html#afd2cf6ef6d7f2a583c709a72067be89b">SYMTYPE</a> symtype)</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keywordflow">switch</span> (symtype) {</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keywordflow">case</span> SYMTYPE::BlackHole: {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordflow">return</span> <span class="stringliteral">"BlackHole"</span>;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  }</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">case</span> SYMTYPE::ConstantObj: {</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ConstantObj"</span>;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  }</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">case</span> SYMTYPE::BlkPtr: {</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordflow">return</span> <span class="stringliteral">"BlkPtr"</span>;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  }</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordflow">case</span> SYMTYPE::NullPtr: {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keywordflow">return</span> <span class="stringliteral">"NullPtr"</span>;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordflow">case</span> SYMTYPE::ValSymbol: {</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ValSym"</span>;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordflow">case</span> SYMTYPE::ObjSymbol: {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ObjSym"</span>;</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  }</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">case</span> SYMTYPE::RetSymbol: {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">return</span> <span class="stringliteral">"RetSym"</span>;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">case</span> SYMTYPE::VarargSymbol: {</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">return</span> <span class="stringliteral">"VarargSym"</span>;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keywordflow">default</span>: {</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Invalid SYMTYPE"</span>;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  }</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span> }</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div><div class="line"><a name="l00444"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a9f4cf6914b400b9f69c7852f13c496a9"> 444</a></span> <span class="keywordtype">void</span> SymbolTableInfo::dump()</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span> {</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap<SymID, Value*></a> idmap;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> maxid = 0;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">for</span> (ValueToIDMapTy::iterator iter = valSymMap.begin(); iter != valSymMap.end();</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  ++iter)</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter->second;</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  maxid = max(i, maxid);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter->first;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  idmap[i] = val;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keywordflow">for</span> (ValueToIDMapTy::iterator iter = objSymMap.begin(); iter != objSymMap.end();</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  ++iter)</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  {</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter->second;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  maxid = max(i, maxid);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter->first;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  idmap[i] = val;</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  }</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">for</span> (FunToIDMapTy::iterator iter = returnSymMap.begin(); iter != returnSymMap.end();</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  ++iter)</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  {</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter->second;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  maxid = max(i, maxid);</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter->first;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  idmap[i] = val;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  }</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keywordflow">for</span> (FunToIDMapTy::iterator iter = varargSymMap.begin(); iter != varargSymMap.end();</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  ++iter)</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  {</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter->second;</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  maxid = max(i, maxid);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter->first;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  idmap[i] = val;</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  }</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"{SymbolTableInfo \n"</span>;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter : idmap) {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << iter.first << <span class="stringliteral">" "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(iter.second) << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  }</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span> }</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span> </div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="comment">/*</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="comment"> * Get the type size given a target data layout</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="comment"> */</span></div><div class="line"><a name="l00490"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#af4239ff717303dee25f1f4ba60070f9e"> 490</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> SymbolTableInfo::getTypeSizeInBytes(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span> {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> </div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="comment">// if the type has size then simply return it, otherwise just return 0</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <span class="keywordflow">if</span>(type->isSized())</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keywordflow">return</span> getDataLayout(LLVMModuleSet::getLLVMModuleSet()->getMainLLVMModule())->getTypeStoreSize(const_cast<Type*>(type));</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div><div class="line"><a name="l00500"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ada63ac47515daa4402914083058baec8"> 500</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> SymbolTableInfo::getTypeSizeInBytes(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *sty, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx)</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span> {</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a52c8654c221bb53a59f70ea3cb1e5c45">StructLayout</a> *stTySL = getDataLayout(LLVMModuleSet::getLLVMModuleSet()->getMainLLVMModule())->getStructLayout( const_cast<StructType *>(sty) );</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="keywordflow">if</span>(sty->isOpaque())</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keywordflow">return</span> stTySL->getElementOffset(field_idx);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span> </div><div class="line"><a name="l00516"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#a66692043a56c327ac7ac00cc3126cd78"> 516</a></span> <span class="keywordtype">void</span> ObjTypeInfo::analyzeHeapObjType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>*)</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="comment">// TODO: Heap and static objects are considered as pointers right now.</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <span class="comment">// Refine this function to get more details about heap and static objects.</span></div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  setFlag(HEAP_OBJ);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  setFlag(HASPTR_OBJ);</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> }</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div><div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#aa8b97a2cbd2de56b3c6c5c0e2e0a2211"> 527</a></span> <span class="keywordtype">void</span> ObjTypeInfo::analyzeStaticObjType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>*)</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> {</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="comment">// TODO: Heap and static objects are considered as pointers right now.</span></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="comment">// Refine this function to get more details about heap and static objects.</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  setFlag(STATIC_OBJ);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  setFlag(HASPTR_OBJ);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> }</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span> </div><div class="line"><a name="l00538"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac"> 538</a></span> <span class="keywordtype">bool</span> ObjTypeInfo::isNonPtrFieldObj(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls)</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span> {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordflow">if</span> (isHeap() || isStaticObj())</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> </div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ety = getType();</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a> *AT= SVFUtil::dyn_cast<ArrayType>(ety))</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  {</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  ety = AT->getElementType();</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  }</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> </div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keywordflow">if</span> (SVFUtil::isa<StructType>(ety) || SVFUtil::isa<ArrayType>(ety))</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordtype">bool</span> hasIntersection = <span class="keyword">false</span>;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keyword">const</span> vector<FlattenedFieldInfo> &infovec = SymbolTableInfo::SymbolInfo()->getFlattenedFieldInfoVec(ety);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  vector<FlattenedFieldInfo>::const_iterator it = infovec.begin();</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  vector<FlattenedFieldInfo>::const_iterator eit = infovec.end();</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="keywordflow">for</span> (; it != eit; ++it)</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  {</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a>& fieldLS = *it;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordflow">if</span> (ls.<a class="code" href="classSVF_1_1LocationSet.html#a0e1cddc4228e310c95f68c661c7b94c8">intersects</a>(<a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(fieldLS)))</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  {</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  hasIntersection = <span class="keyword">true</span>;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <span class="keywordflow">if</span> (fieldLS.<a class="code" href="classSVF_1_1FlattenedFieldInfo.html#a92c1b65c36feeabf09541c9af4650f14">getFlattenElemTy</a>()->isPointerTy())</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  }</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  }</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(hasIntersection && <span class="stringliteral">"cannot find field of specified offset"</span>);</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  }</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">if</span> (isStaticObj() || isHeap())</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="comment">// TODO: Objects which cannot find proper field for a certain offset including</span></div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="comment">// arguments in main(), static objects allocated before main and heap</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="comment">// objects. Right now they're considered to have infinite fields and we</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="comment">// treat each field as pointers conservatively.</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="comment">// Try to model static and heap objects more accurately in the future.</span></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  {</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <span class="comment">// TODO: Using new memory model (locMM) may create objects with spurious offset</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="comment">// as we simply return new offset by mod operation without checking its</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <span class="comment">// correctness in LocSymTableInfo::getModulusOffset(). So the following</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="comment">// assertion may fail. Try to refine the new memory model.</span></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="comment">//assert(ls.getFieldOffset() == 0 && "cannot get a field from a non-struct type");</span></div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keywordflow">return</span> (hasPtrObj() == <span class="keyword">false</span>);</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  }</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span> }</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span> </div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div><div class="line"><a name="l00595"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a981b7424901ef74467f725ffc9fec0ca"> 595</a></span> <span class="keywordtype">void</span> MemObj::setFieldSensitive()</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  typeInfo->setMaxFieldOffsetLimit(StInfo::getMaxFieldLimit());</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> }</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> </div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span> </div><div class="line"><a name="l00604"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#afc62b5dbcaf790e561c852f567ca5bd1"> 604</a></span> MemObj::MemObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> <span class="keywordtype">id</span>, <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* ti, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val) :</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  symId(id), refVal(val), typeInfo(ti)</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span> {</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span> }</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span> </div><div class="line"><a name="l00612"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c"> 612</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c">MemObj::isBlackHoleObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="keyword"></span>{</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#ad9cdb21e20182f3bc95f04bbb97712f3">SymbolTableInfo::isBlkObj</a>(<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>());</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span> }</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> </div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span> </div><div class="line"><a name="l00619"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216"> 619</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216">MemObj::getType</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="keyword"></span>{</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">isHeap</a>() == <span class="keyword">false</span>)</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* type = SVFUtil::dyn_cast<PointerType>(<a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>()))</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keywordflow">return</span> type->getElementType();</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>();</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  }</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>() && SVFUtil::isa<Instruction>(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()))</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a973113323e30a01fd904b35ac18d40ce">SVFUtil::getTypeOfHeapAlloc</a>(SVFUtil::cast<Instruction>(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()));</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>();</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span> }</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="comment">/*</span></div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="comment"> * Destroy the fields of the memory object</span></div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="comment"> */</span></div><div class="line"><a name="l00636"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735"> 636</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735">MemObj::destroy</a>()</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> {</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span> }</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span> </div><div class="line"><a name="l00643"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#afccbd809fe7c2acf4741383987036807"> 643</a></span> <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> <a class="code" href="classSVF_1_1MemObj.html#afccbd809fe7c2acf4741383987036807">MemObj::getMaxFieldOffsetLimit</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="keyword"></span>{</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a81bc3d785062c7e527ecf8e564cd52a4">getMaxFieldOffsetLimit</a>();</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span> }</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span> </div><div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc"> 649</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">MemObj::isFieldInsensitive</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keyword"></span>{</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#afccbd809fe7c2acf4741383987036807">getMaxFieldOffsetLimit</a>() == 0;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span> }</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span> </div><div class="line"><a name="l00655"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c"> 655</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c">MemObj::setFieldInsensitive</a>()</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span> {</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a9fff869c63776c6ebeff78933e0f6092">setMaxFieldOffsetLimit</a>(0);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span> }</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div><div class="line"><a name="l00660"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b"> 660</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b">MemObj::isFunction</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keyword"></span>{</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#ac99fa14fdf7bc0dd3e9ff36c7a3a351f">isFunction</a>();</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span> }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span> </div><div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4"> 665</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">MemObj::isGlobalObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="keyword"></span>{</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#aa2855b69150287e5f04a7a683dc4c91f">isGlobalObj</a>();</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span> }</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span> </div><div class="line"><a name="l00670"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e"> 670</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e">MemObj::isStaticObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="keyword"></span>{</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a3594dc1c1943dbac0ab72f2ff163c523">isStaticObj</a>();</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span> }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div><div class="line"><a name="l00675"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee"> 675</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">MemObj::isStack</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="keyword"></span>{</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#aa568dc82decd28d2ef40785a4a647602">isStack</a>();</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span> }</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span> </div><div class="line"><a name="l00680"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1"> 680</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">MemObj::isHeap</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="keyword"></span>{</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a26c179394fbda9a9261d0bf3f52b619d">isHeap</a>();</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span> }</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span> </div><div class="line"><a name="l00685"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286"> 685</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286">MemObj::isStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="keyword"></span>{</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a06493939f797f122b70b90bbf22cad7a">isStruct</a>();</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span> }</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span> </div><div class="line"><a name="l00690"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af"> 690</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af">MemObj::isArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="keyword"></span>{</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a0627e8b9dda2e13cc77c334eefab21e1">isArray</a>();</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span> }</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span> </div><div class="line"><a name="l00695"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf"> 695</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf">MemObj::isVarStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="keyword"></span>{</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a40d6703875b370aed2c6dc41c0594af5">isVarStruct</a>();</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span> }</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span> </div><div class="line"><a name="l00700"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a616e9f4d6f82a253f94391c47668b9a6"> 700</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a616e9f4d6f82a253f94391c47668b9a6">MemObj::isVarArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keyword"></span>{</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#aca1e900f9b0a774684af77666cf033e3">isVarArray</a>();</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span> }</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span> </div><div class="line"><a name="l00705"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a0f5283e512d6c749b33ba9cfc2d70d17"> 705</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a0f5283e512d6c749b33ba9cfc2d70d17">MemObj::isConstStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="keyword"></span>{</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a5d4afc5e1ba5cbcedf049467f75ef7c4">isConstStruct</a>();</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span> }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span> </div><div class="line"><a name="l00710"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ae30d2d8f6f621795a70ba046ca25af2d"> 710</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ae30d2d8f6f621795a70ba046ca25af2d">MemObj::isConstArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="keyword"></span>{</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#ad90ea6a01cca9c370b7f17b408dcc5a7">isConstArray</a>();</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span> }</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span> </div><div class="line"><a name="l00715"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a3f429b085f749ed0c8269517eb9094ae"> 715</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a3f429b085f749ed0c8269517eb9094ae">MemObj::isConstant</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="keyword"></span>{</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a8c0ae8e177452b88b3a4ec81bf77c378">isConstant</a>();</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span> }</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span> </div><div class="line"><a name="l00720"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a6dae1b3429c6049f0153ec006d329082"> 720</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a6dae1b3429c6049f0153ec006d329082">MemObj::hasPtrObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="keyword"></span>{</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#ac5bae1e7917f415193a805e8d2e29320">hasPtrObj</a>();</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span> }</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span> </div><div class="line"><a name="l00725"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ad6926becf26a625cfe165aec120b2a1e"> 725</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ad6926becf26a625cfe165aec120b2a1e">MemObj::isNonPtrFieldObj</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls)<span class="keyword"> const</span></div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="keyword"></span>{</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac">isNonPtrFieldObj</a>(ls);</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span> }</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span> </div><div class="line"><a name="l00730"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a614b26f4a3db926055a576b13842c1d7"> 730</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1MemObj.html#a614b26f4a3db926055a576b13842c1d7">MemObj::toString</a>()<span class="keyword"> const</span>{</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  std::string str;</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  rawstr << <span class="stringliteral">"MemObj : "</span> << <a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">SVFUtil::value2String</a>(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>())<< <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span> }</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span> </div><div class="ttc" id="classSVF_1_1MemObj_html_a750770ea992d39b22c8b2dda9aff2eaf"><div class="ttname"><a href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">SVF::MemObj::typeInfo</a></div><div class="ttdeci">ObjTypeInfo * typeInfo</div><div class="ttdoc">Type information of this object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00423">SymbolTableInfo.h:423</a></div></div>
|
|
70
70
|
<div class="ttc" id="classSVF_1_1MemObj_html_a132df66e2751e5db6b0ba82d767a3286"><div class="ttname"><a href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286">SVF::MemObj::isStruct</a></div><div class="ttdeci">bool isStruct() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00685">SymbolTableInfo.cpp:685</a></div></div>
|
|
71
71
|
<div class="ttc" id="classSVF_1_1MemObj_html_a7b890ca9e93b1c61cc6437b7e6a82a8c"><div class="ttname"><a href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c">SVF::MemObj::isBlackHoleObj</a></div><div class="ttdeci">bool isBlackHoleObj() const</div><div class="ttdoc">Whether it is a black hole object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00612">SymbolTableInfo.cpp:612</a></div></div>
|
|
72
72
|
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_ad90ea6a01cca9c370b7f17b408dcc5a7"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#ad90ea6a01cca9c370b7f17b408dcc5a7">SVF::ObjTypeInfo::isConstArray</a></div><div class="ttdeci">bool isConstArray()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00704">SymbolTableInfo.h:704</a></div></div>
|
|
@@ -139,12 +139,12 @@ $(function() {
|
|
|
139
139
|
<div class="ttc" id="classSVF_1_1StInfo_html_ab5908115f11eccee61bd0759a51d5af0"><div class="ttname"><a href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">SVF::StInfo::getFlattenedFieldInfoVec</a></div><div class="ttdeci">std::vector< FlattenedFieldInfo > & getFlattenedFieldInfoVec()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00562">SymbolTableInfo.h:562</a></div></div>
|
|
140
140
|
<div class="ttc" id="classSVF_1_1StInfo_html_a7011600965de6fe5401b87f5c71e684f"><div class="ttname"><a href="classSVF_1_1StInfo.html#a7011600965de6fe5401b87f5c71e684f">SVF::StInfo::addFldWithType</a></div><div class="ttdeci">void addFldWithType(u32_t fldIdx, const Type *type)</div><div class="ttdoc">Add field (index and offset) with its corresponding type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00569">SymbolTableInfo.h:569</a></div></div>
|
|
141
141
|
<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>
|
|
142
|
-
<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>
|
|
143
142
|
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html">SVF::ObjTypeInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00579">SymbolTableInfo.h:579</a></div></div>
|
|
144
143
|
<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>
|
|
145
144
|
<div class="ttc" id="classSVF_1_1StInfo_html"><div class="ttname"><a href="classSVF_1_1StInfo.html">SVF::StInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00505">SymbolTableInfo.h:505</a></div></div>
|
|
146
145
|
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a66692043a56c327ac7ac00cc3126cd78"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a66692043a56c327ac7ac00cc3126cd78">SVF::ObjTypeInfo::analyzeHeapObjType</a></div><div class="ttdeci">void analyzeHeapObjType(const Type *type)</div><div class="ttdoc">Analyse types of heap and static objects. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00516">SymbolTableInfo.cpp:516</a></div></div>
|
|
147
146
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a973113323e30a01fd904b35ac18d40ce"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a973113323e30a01fd904b35ac18d40ce">SVF::SVFUtil::getTypeOfHeapAlloc</a></div><div class="ttdeci">const Type * getTypeOfHeapAlloc(const llvm::Instruction *inst)</div><div class="ttdoc">Get the type of the heap allocation. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00269">LLVMUtil.cpp:269</a></div></div>
|
|
147
|
+
<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>
|
|
148
148
|
<div class="ttc" id="namespaceSVF_html_a366625858f450a1ea5f985a3c83e0f14"><div class="ttname"><a href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">SVF::u64_t</a></div><div class="ttdeci">unsigned long long u64_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00076">SVFBasicTypes.h:76</a></div></div>
|
|
149
149
|
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_aa2855b69150287e5f04a7a683dc4c91f"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#aa2855b69150287e5f04a7a683dc4c91f">SVF::ObjTypeInfo::isGlobalObj</a></div><div class="ttdeci">bool isGlobalObj()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00667">SymbolTableInfo.h:667</a></div></div>
|
|
150
150
|
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a06493939f797f122b70b90bbf22cad7a"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a06493939f797f122b70b90bbf22cad7a">SVF::ObjTypeInfo::isStruct</a></div><div class="ttdeci">bool isStruct()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00696">SymbolTableInfo.h:696</a></div></div>
|