svf-tools 1.0.829 → 1.0.830
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/AccessPath_8cpp_source.html +225 -224
- package/SVF-doxygen/html/AccessPath_8h_source.html +11 -11
- package/SVF-doxygen/html/AndersenSFR_8cpp_source.html +1 -1
- package/SVF-doxygen/html/Andersen_8cpp_source.html +1 -1
- package/SVF-doxygen/html/BasicTypes_8h.html +2 -0
- package/SVF-doxygen/html/BasicTypes_8h_source.html +123 -121
- package/SVF-doxygen/html/CFLAlias_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CFLGraphBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CHGBuilder_8cpp_source.html +11 -11
- package/SVF-doxygen/html/ConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ConsG_8h_source.html +1 -1
- package/SVF-doxygen/html/ContextDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ContextDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/CxtStmt_8h_source.html +1 -1
- package/SVF-doxygen/html/DCHG_8cpp_source.html +12 -12
- package/SVF-doxygen/html/DCHG_8h_source.html +5 -5
- package/SVF-doxygen/html/DDAClient_8cpp_source.html +2 -2
- package/SVF-doxygen/html/DDAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/DDAVFSolver_8h_source.html +4 -4
- package/SVF-doxygen/html/FlowDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/FlowDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/FlowSensitiveStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ICFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ICFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/IRGraph_8h_source.html +2 -2
- package/SVF-doxygen/html/LLVMModule_8cpp_source.html +145 -144
- package/SVF-doxygen/html/LLVMModule_8h_source.html +3 -3
- package/SVF-doxygen/html/LLVMUtil_8cpp_source.html +1138 -1066
- package/SVF-doxygen/html/LLVMUtil_8h.html +2 -0
- package/SVF-doxygen/html/LLVMUtil_8h_source.html +419 -414
- package/SVF-doxygen/html/LockResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/MHP_8cpp_source.html +1 -1
- package/SVF-doxygen/html/MTAAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/MemRegion_8cpp_source.html +3 -3
- package/SVF-doxygen/html/MemSSA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/PointerAnalysisImpl_8cpp_source.html +4 -4
- package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +363 -362
- package/SVF-doxygen/html/PointerAnalysis_8h_source.html +13 -13
- package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +7 -7
- package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +11 -10
- package/SVF-doxygen/html/SVFIRBuilder_8cpp_source.html +927 -924
- package/SVF-doxygen/html/SVFIRBuilder_8h_source.html +35 -34
- package/SVF-doxygen/html/SVFIRExtAPI_8cpp_source.html +2 -2
- package/SVF-doxygen/html/SVFIR_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFIR_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFStat_8cpp_source.html +12 -12
- package/SVF-doxygen/html/SVFStatements_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFStatements_8h_source.html +2 -2
- package/SVF-doxygen/html/SVFType_8cpp_source.html +38 -37
- package/SVF-doxygen/html/SVFType_8h_source.html +5 -5
- package/SVF-doxygen/html/SVFValue_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFValue_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFVariables_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFVariables_8h_source.html +1 -1
- package/SVF-doxygen/html/SaberSVFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/Steensgaard_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SymbolTableBuilder_8cpp_source.html +653 -651
- package/SVF-doxygen/html/SymbolTableBuilder_8h_source.html +17 -17
- package/SVF-doxygen/html/SymbolTableInfo_8cpp_source.html +339 -338
- package/SVF-doxygen/html/SymbolTableInfo_8h_source.html +33 -33
- package/SVF-doxygen/html/ThreadCallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1AccessPath-members.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1AccessPath.html +236 -235
- package/SVF-doxygen/html/classSVF_1_1ActualINSVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1AddrStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1AliasDDAClient.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1Andersen.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1AndersenSFR.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1BVDataPTAImpl.html +4 -4
- package/SVF-doxygen/html/classSVF_1_1BinaryOPStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1BranchStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CFLAlias.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1CHGBuilder.html +11 -11
- package/SVF-doxygen/html/classSVF_1_1CallCFGEdge.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CallPE.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CmpStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CmpVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ContextDDA.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1CopyStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CxtStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CxtThread.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1CxtThreadStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1DCHGraph.html +12 -12
- package/SVF-doxygen/html/classSVF_1_1DDAStat.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1DDAVFSolver.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1DoubleFreeChecker.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1FIObjVar.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ForkJoinAnalysis.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1FunptrDDAClient.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1GepObjVar.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1GepStmt.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1GepValVar.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ICFG.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ICFGBuilder.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1IRGraph.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1InterPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1IntraCFGEdge.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1IntraICFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1LLVMModuleSet.html +141 -140
- package/SVF-doxygen/html/classSVF_1_1LeakChecker.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1LoadStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1LockResultValidator.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1MHP.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1MRGenerator.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1MTAAnnotator.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1MTAResultValidator.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1MemObj.html +121 -121
- package/SVF-doxygen/html/classSVF_1_1MemSSA.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ObjTypeInfo.html +29 -29
- package/SVF-doxygen/html/classSVF_1_1ObjVar.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1PHIVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1PhiStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1PointerAnalysis.html +342 -341
- package/SVF-doxygen/html/classSVF_1_1RetCFGEdge.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1RetPE.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SVFArrayType.html +4 -4
- package/SVF-doxygen/html/classSVF_1_1SVFFunctionType.html +4 -4
- package/SVF-doxygen/html/classSVF_1_1SVFIR.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +6 -6
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +11 -10
- package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +868 -864
- package/SVF-doxygen/html/classSVF_1_1SVFIntegerType.html +7 -7
- package/SVF-doxygen/html/classSVF_1_1SVFOtherType.html +4 -4
- package/SVF-doxygen/html/classSVF_1_1SVFPointerType.html +3 -2
- package/SVF-doxygen/html/classSVF_1_1SVFStat.html +12 -12
- package/SVF-doxygen/html/classSVF_1_1SVFStructType.html +4 -4
- package/SVF-doxygen/html/classSVF_1_1SVFValue.html +23 -23
- package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SelectStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1Steensgaard.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1StoreStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +634 -631
- package/SVF-doxygen/html/classSVF_1_1SymbolTableInfo.html +125 -124
- package/SVF-doxygen/html/classSVF_1_1TCT.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1TDForkPE.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1TDJoinPE.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ThreadCallGraph.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1TypeAnalysis.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1UnaryOPStmt.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ValVar.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
- package/SVF-doxygen/html/functions_func_g.html +10 -10
- package/SVF-doxygen/html/functions_func_p.html +1 -1
- package/SVF-doxygen/html/functions_g.html +6 -6
- package/SVF-doxygen/html/functions_r.html +2 -2
- package/SVF-doxygen/html/functions_s.html +5 -5
- package/SVF-doxygen/html/functions_t.html +7 -7
- package/SVF-doxygen/html/functions_v.html +3 -1
- package/SVF-doxygen/html/functions_w.html +8 -8
- package/SVF-doxygen/html/namespaceSVF.html +43 -25
- package/SVF-doxygen/html/namespaceSVF_1_1LLVMUtil.html +1233 -1138
- package/SVF-doxygen/html/namespacemembers_func_g.html +6 -3
- package/SVF-doxygen/html/namespacemembers_g.html +10 -4
- package/SVF-doxygen/html/namespacemembers_type_g.html +3 -0
- package/SVF-doxygen/html/search/all_10.js +324 -324
- package/SVF-doxygen/html/search/all_11.js +223 -223
- package/SVF-doxygen/html/search/all_12.js +553 -553
- package/SVF-doxygen/html/search/all_13.js +192 -192
- package/SVF-doxygen/html/search/all_14.js +67 -67
- package/SVF-doxygen/html/search/all_15.js +167 -167
- package/SVF-doxygen/html/search/all_16.js +63 -63
- package/SVF-doxygen/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/search/all_18.js +1 -1
- package/SVF-doxygen/html/search/all_19.js +11 -11
- package/SVF-doxygen/html/search/all_1a.js +172 -172
- package/SVF-doxygen/html/search/all_7.js +895 -893
- package/SVF-doxygen/html/search/all_8.js +198 -198
- package/SVF-doxygen/html/search/all_9.js +607 -607
- package/SVF-doxygen/html/search/all_a.js +46 -46
- package/SVF-doxygen/html/search/all_b.js +26 -26
- package/SVF-doxygen/html/search/all_c.js +115 -115
- package/SVF-doxygen/html/search/all_d.js +198 -198
- package/SVF-doxygen/html/search/all_e.js +207 -207
- package/SVF-doxygen/html/search/all_f.js +116 -116
- package/SVF-doxygen/html/search/classes_0.js +26 -26
- package/SVF-doxygen/html/search/classes_1.js +9 -9
- package/SVF-doxygen/html/search/classes_10.js +73 -73
- package/SVF-doxygen/html/search/classes_11.js +15 -15
- package/SVF-doxygen/html/search/classes_12.js +2 -2
- package/SVF-doxygen/html/search/classes_13.js +10 -10
- package/SVF-doxygen/html/search/classes_14.js +14 -14
- package/SVF-doxygen/html/search/classes_15.js +1 -1
- package/SVF-doxygen/html/search/classes_2.js +80 -80
- package/SVF-doxygen/html/search/classes_3.js +37 -37
- package/SVF-doxygen/html/search/classes_4.js +9 -9
- package/SVF-doxygen/html/search/classes_5.js +28 -28
- package/SVF-doxygen/html/search/classes_6.js +104 -104
- package/SVF-doxygen/html/search/classes_7.js +34 -34
- package/SVF-doxygen/html/search/classes_8.js +56 -56
- package/SVF-doxygen/html/search/classes_9.js +1 -1
- package/SVF-doxygen/html/search/classes_a.js +12 -12
- package/SVF-doxygen/html/search/classes_b.js +29 -29
- package/SVF-doxygen/html/search/classes_c.js +6 -6
- package/SVF-doxygen/html/search/classes_d.js +18 -18
- package/SVF-doxygen/html/search/classes_e.js +36 -36
- package/SVF-doxygen/html/search/classes_f.js +25 -25
- package/SVF-doxygen/html/search/defines_0.js +3 -3
- package/SVF-doxygen/html/search/defines_1.js +2 -2
- package/SVF-doxygen/html/search/defines_2.js +30 -30
- package/SVF-doxygen/html/search/defines_3.js +21 -21
- package/SVF-doxygen/html/search/defines_4.js +2 -2
- package/SVF-doxygen/html/search/defines_5.js +4 -4
- package/SVF-doxygen/html/search/defines_6.js +2 -2
- package/SVF-doxygen/html/search/defines_7.js +5 -5
- package/SVF-doxygen/html/search/defines_8.js +11 -11
- package/SVF-doxygen/html/search/defines_9.js +9 -9
- package/SVF-doxygen/html/search/defines_a.js +2 -2
- package/SVF-doxygen/html/search/defines_b.js +1 -1
- package/SVF-doxygen/html/search/defines_c.js +3 -3
- package/SVF-doxygen/html/search/defines_d.js +2 -2
- package/SVF-doxygen/html/search/defines_e.js +7 -7
- package/SVF-doxygen/html/search/defines_f.js +3 -3
- package/SVF-doxygen/html/search/enums_0.js +3 -3
- package/SVF-doxygen/html/search/enums_1.js +2 -2
- package/SVF-doxygen/html/search/enums_10.js +1 -1
- package/SVF-doxygen/html/search/enums_11.js +1 -1
- package/SVF-doxygen/html/search/enums_2.js +8 -8
- package/SVF-doxygen/html/search/enums_3.js +1 -1
- package/SVF-doxygen/html/search/enums_4.js +3 -3
- package/SVF-doxygen/html/search/enums_5.js +1 -1
- package/SVF-doxygen/html/search/enums_6.js +2 -2
- package/SVF-doxygen/html/search/enums_7.js +2 -2
- package/SVF-doxygen/html/search/enums_8.js +4 -4
- package/SVF-doxygen/html/search/enums_9.js +1 -1
- package/SVF-doxygen/html/search/enums_a.js +1 -1
- package/SVF-doxygen/html/search/enums_b.js +7 -7
- package/SVF-doxygen/html/search/enums_c.js +1 -1
- package/SVF-doxygen/html/search/enums_d.js +4 -4
- package/SVF-doxygen/html/search/enums_e.js +2 -2
- package/SVF-doxygen/html/search/enums_f.js +4 -4
- package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
- package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
- package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
- package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
- package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
- package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
- package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
- package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
- package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
- package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
- package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
- package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
- package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
- package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
- package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
- package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
- package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
- package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
- package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
- package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
- package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
- package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
- package/SVF-doxygen/html/search/files_0.js +13 -13
- package/SVF-doxygen/html/search/files_1.js +7 -7
- package/SVF-doxygen/html/search/files_10.js +8 -8
- package/SVF-doxygen/html/search/files_11.js +8 -8
- package/SVF-doxygen/html/search/files_12.js +2 -2
- package/SVF-doxygen/html/search/files_2.js +55 -55
- package/SVF-doxygen/html/search/files_3.js +14 -14
- package/SVF-doxygen/html/search/files_4.js +5 -5
- package/SVF-doxygen/html/search/files_5.js +13 -13
- package/SVF-doxygen/html/search/files_6.js +9 -9
- package/SVF-doxygen/html/search/files_7.js +14 -14
- package/SVF-doxygen/html/search/files_8.js +13 -13
- package/SVF-doxygen/html/search/files_9.js +18 -18
- package/SVF-doxygen/html/search/files_a.js +3 -3
- package/SVF-doxygen/html/search/files_b.js +2 -2
- package/SVF-doxygen/html/search/files_c.js +20 -20
- package/SVF-doxygen/html/search/files_d.js +4 -4
- package/SVF-doxygen/html/search/files_e.js +62 -62
- package/SVF-doxygen/html/search/files_f.js +8 -8
- package/SVF-doxygen/html/search/functions_0.js +13 -13
- package/SVF-doxygen/html/search/functions_1.js +360 -360
- package/SVF-doxygen/html/search/functions_10.js +140 -140
- package/SVF-doxygen/html/search/functions_11.js +139 -139
- package/SVF-doxygen/html/search/functions_12.js +288 -288
- package/SVF-doxygen/html/search/functions_13.js +59 -59
- package/SVF-doxygen/html/search/functions_14.js +39 -39
- package/SVF-doxygen/html/search/functions_15.js +71 -71
- package/SVF-doxygen/html/search/functions_16.js +32 -32
- package/SVF-doxygen/html/search/functions_17.js +3 -3
- package/SVF-doxygen/html/search/functions_18.js +172 -172
- package/SVF-doxygen/html/search/functions_2.js +89 -89
- package/SVF-doxygen/html/search/functions_3.js +258 -258
- package/SVF-doxygen/html/search/functions_4.js +78 -78
- package/SVF-doxygen/html/search/functions_5.js +53 -53
- package/SVF-doxygen/html/search/functions_6.js +60 -60
- package/SVF-doxygen/html/search/functions_7.js +857 -856
- package/SVF-doxygen/html/search/functions_8.js +149 -149
- package/SVF-doxygen/html/search/functions_9.js +423 -423
- package/SVF-doxygen/html/search/functions_a.js +30 -30
- package/SVF-doxygen/html/search/functions_b.js +2 -2
- package/SVF-doxygen/html/search/functions_c.js +25 -25
- package/SVF-doxygen/html/search/functions_d.js +79 -79
- package/SVF-doxygen/html/search/functions_e.js +35 -35
- package/SVF-doxygen/html/search/functions_f.js +56 -56
- package/SVF-doxygen/html/search/namespaces_0.js +1 -1
- package/SVF-doxygen/html/search/namespaces_1.js +7 -7
- package/SVF-doxygen/html/search/related_0.js +2 -2
- package/SVF-doxygen/html/search/related_1.js +2 -2
- package/SVF-doxygen/html/search/related_2.js +2 -2
- package/SVF-doxygen/html/search/related_3.js +2 -2
- package/SVF-doxygen/html/search/related_4.js +2 -2
- package/SVF-doxygen/html/search/related_5.js +1 -1
- package/SVF-doxygen/html/search/related_6.js +2 -2
- package/SVF-doxygen/html/search/related_7.js +4 -4
- package/SVF-doxygen/html/search/related_8.js +2 -2
- package/SVF-doxygen/html/search/related_9.js +4 -4
- package/SVF-doxygen/html/search/related_a.js +19 -19
- package/SVF-doxygen/html/search/related_b.js +4 -4
- package/SVF-doxygen/html/search/related_c.js +2 -2
- package/SVF-doxygen/html/search/related_d.js +12 -12
- package/SVF-doxygen/html/search/related_e.js +2 -2
- package/SVF-doxygen/html/search/related_f.js +2 -2
- package/SVF-doxygen/html/search/typedefs_0.js +19 -19
- package/SVF-doxygen/html/search/typedefs_1.js +26 -26
- package/SVF-doxygen/html/search/typedefs_10.js +61 -61
- package/SVF-doxygen/html/search/typedefs_11.js +13 -13
- package/SVF-doxygen/html/search/typedefs_12.js +11 -11
- package/SVF-doxygen/html/search/typedefs_13.js +33 -33
- package/SVF-doxygen/html/search/typedefs_14.js +8 -8
- package/SVF-doxygen/html/search/typedefs_2.js +129 -129
- package/SVF-doxygen/html/search/typedefs_3.js +39 -39
- package/SVF-doxygen/html/search/typedefs_4.js +17 -17
- package/SVF-doxygen/html/search/typedefs_5.js +41 -41
- package/SVF-doxygen/html/search/typedefs_6.js +56 -55
- package/SVF-doxygen/html/search/typedefs_7.js +44 -44
- package/SVF-doxygen/html/search/typedefs_8.js +1 -1
- package/SVF-doxygen/html/search/typedefs_9.js +6 -6
- package/SVF-doxygen/html/search/typedefs_a.js +29 -29
- package/SVF-doxygen/html/search/typedefs_b.js +29 -29
- package/SVF-doxygen/html/search/typedefs_c.js +41 -41
- package/SVF-doxygen/html/search/typedefs_d.js +14 -14
- package/SVF-doxygen/html/search/typedefs_e.js +52 -52
- package/SVF-doxygen/html/search/typedefs_f.js +14 -14
- package/SVF-doxygen/html/search/variables_0.js +151 -151
- package/SVF-doxygen/html/search/variables_1.js +75 -75
- package/SVF-doxygen/html/search/variables_10.js +97 -97
- package/SVF-doxygen/html/search/variables_11.js +44 -44
- package/SVF-doxygen/html/search/variables_12.js +92 -92
- package/SVF-doxygen/html/search/variables_13.js +76 -76
- package/SVF-doxygen/html/search/variables_14.js +14 -14
- package/SVF-doxygen/html/search/variables_15.js +48 -48
- package/SVF-doxygen/html/search/variables_16.js +9 -9
- package/SVF-doxygen/html/search/variables_17.js +1 -1
- package/SVF-doxygen/html/search/variables_18.js +2 -2
- package/SVF-doxygen/html/search/variables_2.js +38 -38
- package/SVF-doxygen/html/search/variables_3.js +142 -142
- package/SVF-doxygen/html/search/variables_4.js +55 -55
- package/SVF-doxygen/html/search/variables_5.js +37 -37
- package/SVF-doxygen/html/search/variables_6.js +66 -66
- package/SVF-doxygen/html/search/variables_7.js +34 -34
- package/SVF-doxygen/html/search/variables_8.js +7 -7
- package/SVF-doxygen/html/search/variables_9.js +78 -78
- package/SVF-doxygen/html/search/variables_a.js +4 -4
- package/SVF-doxygen/html/search/variables_b.js +10 -10
- package/SVF-doxygen/html/search/variables_c.js +45 -45
- package/SVF-doxygen/html/search/variables_d.js +56 -56
- package/SVF-doxygen/html/search/variables_e.js +123 -123
- package/SVF-doxygen/html/search/variables_f.js +30 -30
- package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/svf-ex_8cpp.html +1 -1
- package/SVF-doxygen/html/svf-ex_8cpp_source.html +1 -1
- package/package.json +1 -1
- package/svf/include/MemoryModel/AccessPath.h +2 -2
- package/svf/lib/AbstractExecution/SVFIR2ConsExeState.cpp +2 -2
- package/svf/lib/AbstractExecution/SVFIR2ItvExeState.cpp +4 -4
- package/svf/lib/MemoryModel/AccessPath.cpp +6 -5
- package/svf/lib/MemoryModel/PointerAnalysis.cpp +1 -0
- package/svf/lib/SVFIR/SVFType.cpp +1 -0
- package/svf/lib/SVFIR/SymbolTableInfo.cpp +1 -0
- package/svf-llvm/include/SVF-LLVM/BasicTypes.h +1 -0
- package/svf-llvm/include/SVF-LLVM/LLVMUtil.h +6 -0
- package/svf-llvm/lib/LLVMModule.cpp +1 -0
- package/svf-llvm/lib/LLVMUtil.cpp +70 -0
- package/svf-llvm/lib/SVFIRBuilder.cpp +3 -1
- package/svf-llvm/lib/SymbolTableBuilder.cpp +4 -1
|
@@ -286,1053 +286,1121 @@ $(function() {
|
|
|
286
286
|
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">return</span> val;</div>
|
|
287
287
|
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> }</div>
|
|
288
288
|
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  </div>
|
|
289
|
-
<div class="line"><a name="
|
|
290
|
-
<div class="line"><a name="
|
|
291
|
-
<div class="line"><a name="
|
|
292
|
-
<div class="line"><a name="
|
|
293
|
-
<div class="line"><a name="
|
|
294
|
-
<div class="line"><a name="
|
|
295
|
-
<div class="line"><a name="
|
|
296
|
-
<div class="line"><a name="
|
|
297
|
-
<div class="line"><a name="
|
|
298
|
-
<div class="line"><a name="
|
|
299
|
-
<div class="line"><a name="
|
|
300
|
-
<div class="line"><a name="
|
|
301
|
-
<div class="line"><a name="
|
|
302
|
-
<div class="line"><a name="
|
|
303
|
-
<div class="line"><a name="
|
|
304
|
-
<div class="line"><a name="
|
|
305
|
-
<div class="line"><a name="
|
|
306
|
-
<div class="line"><a name="
|
|
307
|
-
<div class="line"><a name="
|
|
308
|
-
<div class="line"><a name="
|
|
309
|
-
<div class="line"><a name="
|
|
310
|
-
<div class="line"><a name="
|
|
311
|
-
<div class="line"><a name="
|
|
312
|
-
<div class="line"><a name="
|
|
313
|
-
<div class="line"><a name="
|
|
314
|
-
<div class="line"><a name="
|
|
315
|
-
<div class="line"><a name="
|
|
316
|
-
<div class="line"><a name="
|
|
317
|
-
<div class="line"><a name="
|
|
318
|
-
<div class="line"><a name="
|
|
319
|
-
<div class="line"><a name="
|
|
320
|
-
<div class="line"><a name="
|
|
321
|
-
<div class="line"><a name="
|
|
322
|
-
<div class="line"><a name="
|
|
323
|
-
<div class="line"><a name="
|
|
324
|
-
<div class="line"><a name="
|
|
325
|
-
<div class="line"><a name="
|
|
326
|
-
<div class="line"><a name="
|
|
327
|
-
<div class="line"><a name="
|
|
328
|
-
<div class="line"><a name="
|
|
329
|
-
<div class="line"><a name="
|
|
330
|
-
<div class="line"><a name="
|
|
331
|
-
<div class="line"><a name="
|
|
332
|
-
<div class="line"><a name="
|
|
333
|
-
<div class="line"><a name="
|
|
334
|
-
<div class="line"><a name="
|
|
335
|
-
<div class="line"><a name="
|
|
336
|
-
<div class="line"><a name="
|
|
337
|
-
<div class="line"><a name="
|
|
338
|
-
<div class="line"><a name="
|
|
339
|
-
<div class="line"><a name="
|
|
340
|
-
<div class="line"><a name="
|
|
341
|
-
<div class="line"><a name="
|
|
342
|
-
<div class="line"><a name="
|
|
343
|
-
<div class="line"><a name="
|
|
344
|
-
<div class="line"><a name="
|
|
345
|
-
<div class="line"><a name="
|
|
346
|
-
<div class="line"><a name="
|
|
347
|
-
<div class="line"><a name="
|
|
348
|
-
<div class="line"><a name="
|
|
349
|
-
<div class="line"><a name="
|
|
350
|
-
<div class="line"><a name="
|
|
351
|
-
<div class="line"><a name="
|
|
352
|
-
<div class="line"><a name="
|
|
353
|
-
<div class="line"><a name="
|
|
354
|
-
<div class="line"><a name="
|
|
355
|
-
<div class="line"><a name="
|
|
356
|
-
<div class="line"><a name="
|
|
357
|
-
<div class="line"><a name="
|
|
358
|
-
<div class="line"><a name="
|
|
359
|
-
<div class="line"><a name="
|
|
289
|
+
<div class="line"><a name="l00246"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a4b5d4c7ca2c580ace7305bfed58ffce8"> 246</a></span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4b5d4c7ca2c580ace7305bfed58ffce8">LLVMUtil::getPointeeType</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *value)</div>
|
|
290
|
+
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> {</div>
|
|
291
|
+
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  assert(value && <span class="stringliteral">"value cannot be nullptr!"</span>);</div>
|
|
292
|
+
<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#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a> *loadInst = SVFUtil::dyn_cast<LoadInst>(value))</div>
|
|
293
|
+
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  {</div>
|
|
294
|
+
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="comment">// get the pointee type of rhs based on lhs</span></div>
|
|
295
|
+
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="comment">// e.g., for `%lhs = load i64, ptr %rhs`, we return i64</span></div>
|
|
296
|
+
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordflow">return</span> loadInst->getType();</div>
|
|
297
|
+
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  }</div>
|
|
298
|
+
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> *storeInst = SVFUtil::dyn_cast<StoreInst>(value))</div>
|
|
299
|
+
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  {</div>
|
|
300
|
+
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="comment">// get the pointee type of op1 based on op0</span></div>
|
|
301
|
+
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="comment">// e.g., for `store i64 %op0, ptr %op1`, we return i64</span></div>
|
|
302
|
+
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordflow">return</span> storeInst->getValueOperand()->getType();</div>
|
|
303
|
+
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  }</div>
|
|
304
|
+
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a> *gepInst = SVFUtil::dyn_cast<GetElementPtrInst>(value))</div>
|
|
305
|
+
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  {</div>
|
|
306
|
+
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="comment">// get the source element type of a gep instruction</span></div>
|
|
307
|
+
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="comment">// e.g., for `gep %struct.foo, ptr %base, i64 0`, we return struct.foo</span></div>
|
|
308
|
+
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keywordflow">return</span> gepInst->getSourceElementType();</div>
|
|
309
|
+
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  }</div>
|
|
310
|
+
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a893c345ff98bb2808ae905cf9f3671c5">GEPOperator</a>* gepOperator = SVFUtil::dyn_cast<GEPOperator>(value))</div>
|
|
311
|
+
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  {</div>
|
|
312
|
+
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="comment">// get the source element type of a gep instruction</span></div>
|
|
313
|
+
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="comment">// e.g., for `gep %struct.foo, ptr %base, i64 0`, we return struct.foo</span></div>
|
|
314
|
+
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">return</span> gepOperator->getSourceElementType();</div>
|
|
315
|
+
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  }</div>
|
|
316
|
+
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a> *callInst = SVFUtil::dyn_cast<CallInst>(value))</div>
|
|
317
|
+
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  {</div>
|
|
318
|
+
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="comment">// get the pointee type of return value</span></div>
|
|
319
|
+
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="comment">// e.g., for `%call = call ptr @_Znwm(i64 noundef 8)`, we return i64</span></div>
|
|
320
|
+
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordflow">return</span> callInst->getFunctionType();</div>
|
|
321
|
+
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  }</div>
|
|
322
|
+
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *callBase = SVFUtil::dyn_cast<CallBase>(value))</div>
|
|
323
|
+
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  {</div>
|
|
324
|
+
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="comment">// get the pointee type of return value</span></div>
|
|
325
|
+
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="comment">// e.g., for `%call = call ptr @_Znwm(i64 noundef 8)`, we return i64</span></div>
|
|
326
|
+
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="keywordflow">return</span> callBase->getFunctionType();</div>
|
|
327
|
+
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  }</div>
|
|
328
|
+
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">AllocaInst</a> *allocaInst = SVFUtil::dyn_cast<AllocaInst>(value))</div>
|
|
329
|
+
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  {</div>
|
|
330
|
+
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="comment">// get the type of the allocated memory</span></div>
|
|
331
|
+
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="comment">// e.g., for `%retval = alloca i64, align 4`, we return i64</span></div>
|
|
332
|
+
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">return</span> allocaInst->getAllocatedType();</div>
|
|
333
|
+
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  }</div>
|
|
334
|
+
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *globalVar = SVFUtil::dyn_cast<GlobalVariable>(value))</div>
|
|
335
|
+
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  {</div>
|
|
336
|
+
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="comment">// get the pointee type of the global pointer</span></div>
|
|
337
|
+
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">return</span> globalVar->getValueType();</div>
|
|
338
|
+
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  }</div>
|
|
339
|
+
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = SVFUtil::dyn_cast<Function>(value))</div>
|
|
340
|
+
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  {</div>
|
|
341
|
+
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="comment">// get the pointee type of return value</span></div>
|
|
342
|
+
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="comment">// e.g., for `%call = call ptr @_Znwm(i64 noundef 8)`, we return i64</span></div>
|
|
343
|
+
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordflow">return</span> func->getFunctionType();</div>
|
|
344
|
+
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  }</div>
|
|
345
|
+
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">else</span></div>
|
|
346
|
+
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  {</div>
|
|
347
|
+
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  assert(<span class="keyword">false</span> && (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#afa2f8c8ab19c75547c26ede53b9f6159">LLVMUtil::dumpValue</a>(value) + <span class="stringliteral">"Unknown llvm Type, cannot get Ptr Element Type"</span>).c_str());</div>
|
|
348
|
+
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  abort();</div>
|
|
349
|
+
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  }</div>
|
|
350
|
+
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> }</div>
|
|
351
|
+
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  </div>
|
|
352
|
+
<div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#abc9c437b7da5cfe3d988dadfcbd0635f"> 309</a></span> <span class="keywordtype">void</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#abc9c437b7da5cfe3d988dadfcbd0635f">LLVMUtil::viewCFG</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun)</div>
|
|
353
|
+
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> {</div>
|
|
354
|
+
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">if</span> (fun != <span class="keyword">nullptr</span>)</div>
|
|
355
|
+
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  {</div>
|
|
356
|
+
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  fun->viewCFG();</div>
|
|
357
|
+
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div>
|
|
358
|
+
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> }</div>
|
|
359
|
+
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  </div>
|
|
360
|
+
<div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a2abbe4ed46b2031a981d93b3ba9d3fbd"> 317</a></span> <span class="keywordtype">void</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2abbe4ed46b2031a981d93b3ba9d3fbd">LLVMUtil::viewCFGOnly</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun)</div>
|
|
361
|
+
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> {</div>
|
|
362
|
+
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keywordflow">if</span> (fun != <span class="keyword">nullptr</span>)</div>
|
|
360
363
|
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  {</div>
|
|
361
|
-
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> 
|
|
362
|
-
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> 
|
|
363
|
-
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> 
|
|
364
|
-
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> 
|
|
365
|
-
<div class="line"><a name="
|
|
366
|
-
<div class="line"><a name="
|
|
367
|
-
<div class="line"><a name="
|
|
368
|
-
<div class="line"><a name="
|
|
369
|
-
<div class="line"><a name="
|
|
370
|
-
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* BB = curInst->getParent();</div>
|
|
371
|
-
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="comment">// Visit all successors of BB in the CFG</span></div>
|
|
372
|
-
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c943191dc4e242704943e5f594ae99e">const_pred_iterator</a> it = pred_begin(BB), ie = pred_end(BB); it != ie; ++it)</div>
|
|
364
|
+
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  fun->viewCFGOnly();</div>
|
|
365
|
+
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  }</div>
|
|
366
|
+
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> }</div>
|
|
367
|
+
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  </div>
|
|
368
|
+
<div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c"> 328</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">LLVMUtil::stripAllCasts</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val)</div>
|
|
369
|
+
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> {</div>
|
|
370
|
+
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div>
|
|
371
|
+
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  {</div>
|
|
372
|
+
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a962e9a9044a46fc4bd2367384f6e0827">CastInst</a> *ci = SVFUtil::dyn_cast<CastInst>(val))</div>
|
|
373
373
|
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  {</div>
|
|
374
|
-
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> 
|
|
375
|
-
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> 
|
|
376
|
-
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> 
|
|
377
|
-
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> 
|
|
378
|
-
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keywordflow">
|
|
379
|
-
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> 
|
|
380
|
-
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> 
|
|
381
|
-
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> 
|
|
382
|
-
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</div>
|
|
383
|
-
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  </div>
|
|
384
|
-
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> 
|
|
385
|
-
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> 
|
|
386
|
-
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> 
|
|
387
|
-
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> 
|
|
388
|
-
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> 
|
|
389
|
-
<div class="line"><a name="l00349"></a><span class="lineno"
|
|
390
|
-
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> 
|
|
391
|
-
<div class="line"><a name="
|
|
392
|
-
<div class="line"><a name="
|
|
393
|
-
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">if</span> (
|
|
374
|
+
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  val = ci->getOperand(0);</div>
|
|
375
|
+
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div>
|
|
376
|
+
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *ce = SVFUtil::dyn_cast<ConstantExpr>(val))</div>
|
|
377
|
+
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  {</div>
|
|
378
|
+
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keywordflow">if</span>(ce->isCast())</div>
|
|
379
|
+
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  val = ce->getOperand(0);</div>
|
|
380
|
+
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordflow">else</span></div>
|
|
381
|
+
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">return</span> val;</div>
|
|
382
|
+
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  }</div>
|
|
383
|
+
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordflow">else</span></div>
|
|
384
|
+
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  {</div>
|
|
385
|
+
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keywordflow">return</span> val;</div>
|
|
386
|
+
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  }</div>
|
|
387
|
+
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  }</div>
|
|
388
|
+
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
|
|
389
|
+
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> }</div>
|
|
390
|
+
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  </div>
|
|
391
|
+
<div class="line"><a name="l00352"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7"> 352</a></span> <span class="keywordtype">void</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">LLVMUtil::getNextInsts</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* curInst, std::vector<const SVFInstruction*>& instList)</div>
|
|
392
|
+
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> {</div>
|
|
393
|
+
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">if</span> (!curInst->isTerminator())</div>
|
|
394
394
|
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  {</div>
|
|
395
|
-
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="
|
|
396
|
-
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> 
|
|
397
|
-
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> 
|
|
398
|
-
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <
|
|
399
|
-
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> 
|
|
400
|
-
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> 
|
|
401
|
-
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> 
|
|
402
|
-
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> 
|
|
403
|
-
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> 
|
|
404
|
-
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> 
|
|
405
|
-
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> 
|
|
406
|
-
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> 
|
|
407
|
-
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> 
|
|
408
|
-
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> 
|
|
409
|
-
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> 
|
|
410
|
-
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  </div>
|
|
411
|
-
<div class="line"><a name="
|
|
412
|
-
<div class="line"><a name="
|
|
413
|
-
<div class="line"><a name="
|
|
414
|
-
<div class="line"><a name="
|
|
415
|
-
<div class="line"><a name="
|
|
416
|
-
<div class="line"><a name="
|
|
417
|
-
<div class="line"><a name="
|
|
418
|
-
<div class="line"><a name="
|
|
419
|
-
<div class="line"><a name="
|
|
420
|
-
<div class="line"><a name="
|
|
421
|
-
<div class="line"><a name="
|
|
422
|
-
<div class="line"><a name="
|
|
423
|
-
<div class="line"><a name="
|
|
424
|
-
<div class="line"><a name="
|
|
425
|
-
<div class="line"><a name="
|
|
426
|
-
<div class="line"><a name="
|
|
427
|
-
<div class="line"><a name="
|
|
428
|
-
<div class="line"><a name="
|
|
429
|
-
<div class="line"><a name="
|
|
430
|
-
<div class="line"><a name="
|
|
431
|
-
<div class="line"><a name="
|
|
432
|
-
<div class="line"><a name="
|
|
433
|
-
<div class="line"><a name="
|
|
434
|
-
<div class="line"><a name="
|
|
435
|
-
<div class="line"><a name="
|
|
436
|
-
<div class="line"><a name="
|
|
437
|
-
<div class="line"><a name="
|
|
438
|
-
<div class="line"><a name="
|
|
439
|
-
<div class="line"><a name="
|
|
440
|
-
<div class="line"><a name="
|
|
441
|
-
<div class="line"><a name="
|
|
442
|
-
<div class="line"><a name="
|
|
443
|
-
<div class="line"><a name="
|
|
444
|
-
<div class="line"><a name="
|
|
445
|
-
<div class="line"><a name="
|
|
446
|
-
<div class="line"><a name="
|
|
447
|
-
<div class="line"><a name="
|
|
448
|
-
<div class="line"><a name="
|
|
449
|
-
<div class="line"><a name="
|
|
450
|
-
<div class="line"><a name="
|
|
451
|
-
<div class="line"><a name="
|
|
452
|
-
<div class="line"><a name="
|
|
453
|
-
<div class="line"><a name="
|
|
454
|
-
<div class="line"><a name="
|
|
455
|
-
<div class="line"><a name="
|
|
456
|
-
<div class="line"><a name="
|
|
457
|
-
<div class="line"><a name="
|
|
458
|
-
<div class="line"><a name="
|
|
459
|
-
<div class="line"><a name="
|
|
460
|
-
<div class="line"><a name="
|
|
461
|
-
<div class="line"><a name="
|
|
462
|
-
<div class="line"><a name="
|
|
463
|
-
<div class="line"><a name="
|
|
464
|
-
<div class="line"><a name="
|
|
465
|
-
<div class="line"><a name="
|
|
466
|
-
<div class="line"><a name="
|
|
467
|
-
<div class="line"><a name="
|
|
468
|
-
<div class="line"><a name="
|
|
469
|
-
<div class="line"><a name="
|
|
470
|
-
<div class="line"><a name="
|
|
471
|
-
<div class="line"><a name="
|
|
472
|
-
<div class="line"><a name="
|
|
473
|
-
<div class="line"><a name="
|
|
474
|
-
<div class="line"><a name="
|
|
475
|
-
<div class="line"><a name="
|
|
476
|
-
<div class="line"><a name="
|
|
477
|
-
<div class="line"><a name="
|
|
478
|
-
<div class="line"><a name="
|
|
479
|
-
<div class="line"><a name="
|
|
480
|
-
<div class="line"><a name="
|
|
481
|
-
<div class="line"><a name="
|
|
482
|
-
<div class="line"><a name="
|
|
483
|
-
<div class="line"><a name="
|
|
484
|
-
<div class="line"><a name="
|
|
485
|
-
<div class="line"><a name="
|
|
486
|
-
<div class="line"><a name="
|
|
487
|
-
<div class="line"><a name="
|
|
488
|
-
<div class="line"><a name="
|
|
489
|
-
<div class="line"><a name="
|
|
490
|
-
<div class="line"><a name="
|
|
491
|
-
<div class="line"><a name="
|
|
492
|
-
<div class="line"><a name="
|
|
493
|
-
<div class="line"><a name="
|
|
494
|
-
<div class="line"><a name="
|
|
495
|
-
<div class="line"><a name="
|
|
496
|
-
<div class="line"><a name="
|
|
497
|
-
<div class="line"><a name="
|
|
498
|
-
<div class="line"><a name="
|
|
499
|
-
<div class="line"><a name="
|
|
500
|
-
<div class="line"><a name="
|
|
501
|
-
<div class="line"><a name="
|
|
502
|
-
<div class="line"><a name="
|
|
503
|
-
<div class="line"><a name="
|
|
504
|
-
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> 
|
|
505
|
-
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> 
|
|
506
|
-
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <
|
|
507
|
-
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> 
|
|
508
|
-
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> 
|
|
509
|
-
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> 
|
|
510
|
-
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> 
|
|
395
|
+
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* nextInst = curInst->getNextNode();</div>
|
|
396
|
+
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfNextInst = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(nextInst);</div>
|
|
397
|
+
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(nextInst))</div>
|
|
398
|
+
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">getNextInsts</a>(nextInst, instList);</div>
|
|
399
|
+
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">else</span></div>
|
|
400
|
+
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  instList.push_back(svfNextInst);</div>
|
|
401
|
+
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  }</div>
|
|
402
|
+
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">else</span></div>
|
|
403
|
+
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  {</div>
|
|
404
|
+
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* BB = curInst->getParent();</div>
|
|
405
|
+
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="comment">// Visit all successors of BB in the CFG</span></div>
|
|
406
|
+
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">succ_const_iterator</a> it = succ_begin(BB), ie = succ_end(BB); it != ie; ++it)</div>
|
|
407
|
+
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  {</div>
|
|
408
|
+
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* nextInst = &((*it)->front());</div>
|
|
409
|
+
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfNextInst = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(nextInst);</div>
|
|
410
|
+
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(nextInst))</div>
|
|
411
|
+
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">getNextInsts</a>(nextInst, instList);</div>
|
|
412
|
+
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keywordflow">else</span></div>
|
|
413
|
+
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  instList.push_back(svfNextInst);</div>
|
|
414
|
+
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  }</div>
|
|
415
|
+
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  }</div>
|
|
416
|
+
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> }</div>
|
|
417
|
+
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  </div>
|
|
418
|
+
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  </div>
|
|
419
|
+
<div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd"> 381</a></span> <span class="keywordtype">void</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">LLVMUtil::getPrevInsts</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* curInst, std::vector<const SVFInstruction*>& instList)</div>
|
|
420
|
+
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> {</div>
|
|
421
|
+
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  </div>
|
|
422
|
+
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">if</span> (curInst != &(curInst->getParent()->front()))</div>
|
|
423
|
+
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  {</div>
|
|
424
|
+
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevInst = curInst->getPrevNode();</div>
|
|
425
|
+
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfPrevInst = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(prevInst);</div>
|
|
426
|
+
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(prevInst))</div>
|
|
427
|
+
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">getPrevInsts</a>(prevInst, instList);</div>
|
|
428
|
+
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keywordflow">else</span></div>
|
|
429
|
+
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  instList.push_back(svfPrevInst);</div>
|
|
430
|
+
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  }</div>
|
|
431
|
+
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keywordflow">else</span></div>
|
|
432
|
+
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  {</div>
|
|
433
|
+
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* BB = curInst->getParent();</div>
|
|
434
|
+
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="comment">// Visit all successors of BB in the CFG</span></div>
|
|
435
|
+
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c943191dc4e242704943e5f594ae99e">const_pred_iterator</a> it = pred_begin(BB), ie = pred_end(BB); it != ie; ++it)</div>
|
|
436
|
+
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  {</div>
|
|
437
|
+
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevInst = &((*it)->back());</div>
|
|
438
|
+
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfPrevInst = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(prevInst);</div>
|
|
439
|
+
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(prevInst))</div>
|
|
440
|
+
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">getPrevInsts</a>(prevInst, instList);</div>
|
|
441
|
+
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keywordflow">else</span></div>
|
|
442
|
+
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  instList.push_back(svfPrevInst);</div>
|
|
443
|
+
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  }</div>
|
|
444
|
+
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  }</div>
|
|
445
|
+
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> }</div>
|
|
446
|
+
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  </div>
|
|
447
|
+
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="comment">/*</span></div>
|
|
448
|
+
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="comment"> * Get the first dominated cast instruction for heap allocations since they typically come from void* (i8*)</span></div>
|
|
449
|
+
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="comment"> * for example, %4 = call align 16 i8* @malloc(i64 10); %5 = bitcast i8* %4 to i32*</span></div>
|
|
450
|
+
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="comment"> * return %5 whose type is i32* but not %4 whose type is i8*</span></div>
|
|
451
|
+
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="comment"> */</span></div>
|
|
452
|
+
<div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a200539f965bff5627abac41920498ee8"> 414</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a200539f965bff5627abac41920498ee8">LLVMUtil::getFirstUseViaCastInst</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val)</div>
|
|
453
|
+
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> {</div>
|
|
454
|
+
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a> * <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = SVFUtil::dyn_cast<PointerType>(val->getType());</div>
|
|
455
|
+
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  assert(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> && <span class="stringliteral">"this value should be a pointer type!"</span>);</div>
|
|
456
|
+
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="comment">// TODO: getPtrElementType to be removed</span></div>
|
|
457
|
+
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a3d9e7f32dc17fe8d40f8d6a011403b91">IntegerType</a> *IT = SVFUtil::dyn_cast<IntegerType>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)))</div>
|
|
458
|
+
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  {</div>
|
|
459
|
+
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keywordflow">if</span> (IT->getBitWidth() == 8)</div>
|
|
460
|
+
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  {</div>
|
|
461
|
+
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *latestUse = <span class="keyword">nullptr</span>;</div>
|
|
462
|
+
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &it : val->uses())</div>
|
|
463
|
+
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  {</div>
|
|
464
|
+
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">if</span> (SVFUtil::isa<BitCastInst>(it.getUser()))</div>
|
|
465
|
+
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  latestUse = it.getUser();</div>
|
|
466
|
+
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordflow">else</span></div>
|
|
467
|
+
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  latestUse = <span class="keyword">nullptr</span>;</div>
|
|
468
|
+
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  }</div>
|
|
469
|
+
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">return</span> latestUse;</div>
|
|
470
|
+
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  }</div>
|
|
471
|
+
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  }</div>
|
|
472
|
+
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
|
|
473
|
+
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> }</div>
|
|
474
|
+
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  </div>
|
|
475
|
+
<div class="line"><a name="l00441"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#ae368713463c84425f9a1ad27ff401a47"> 441</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ae368713463c84425f9a1ad27ff401a47">LLVMUtil::getTypeOfHeapAlloc</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)</div>
|
|
476
|
+
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> {</div>
|
|
477
|
+
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = SVFUtil::dyn_cast<PointerType>(inst->getType());</div>
|
|
478
|
+
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfinst = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(inst);</div>
|
|
479
|
+
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVFUtil::isHeapAllocExtCallViaRet</a>(svfinst))</div>
|
|
480
|
+
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  {</div>
|
|
481
|
+
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* v = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a200539f965bff5627abac41920498ee8">getFirstUseViaCastInst</a>(inst))</div>
|
|
482
|
+
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  {</div>
|
|
483
|
+
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* newTy = SVFUtil::dyn_cast<PointerType>(v->getType()))</div>
|
|
484
|
+
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = newTy;</div>
|
|
485
|
+
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  }</div>
|
|
486
|
+
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  }</div>
|
|
487
|
+
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aedfa6e9216c6c788c26aef1967689b76">SVFUtil::isHeapAllocExtCallViaArg</a>(svfinst))</div>
|
|
488
|
+
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  {</div>
|
|
489
|
+
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a0095d23a9c9d5d62ec4a23c56824b5f0">LLVMUtil::getLLVMCallSite</a>(inst);</div>
|
|
490
|
+
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keywordtype">int</span> arg_pos = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a73215bac62f1340a58f6c7f2ba9b0e7b">SVFUtil::getHeapAllocHoldingArgPosition</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(svfinst));</div>
|
|
491
|
+
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* arg = cs->getArgOperand(arg_pos);</div>
|
|
492
|
+
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = SVFUtil::dyn_cast<PointerType>(arg->getType());</div>
|
|
493
|
+
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  }</div>
|
|
494
|
+
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="keywordflow">else</span></div>
|
|
495
|
+
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  {</div>
|
|
496
|
+
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  assert( <span class="keyword">false</span> && <span class="stringliteral">"not a heap allocation instruction?"</span>);</div>
|
|
497
|
+
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  }</div>
|
|
498
|
+
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  </div>
|
|
499
|
+
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  assert(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> && <span class="stringliteral">"not a pointer type?"</span>);</div>
|
|
500
|
+
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="comment">// TODO: getPtrElementType need type inference</span></div>
|
|
501
|
+
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>);</div>
|
|
502
|
+
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> }</div>
|
|
503
|
+
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  </div>
|
|
504
|
+
<div class="line"><a name="l00473"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#ae617611b584e3d899984c376a6e91987"> 473</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ae617611b584e3d899984c376a6e91987">LLVMUtil::getBBPredecessorNum</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* BB)</div>
|
|
505
|
+
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> {</div>
|
|
506
|
+
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div>
|
|
507
|
+
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c943191dc4e242704943e5f594ae99e">const_pred_iterator</a> it = pred_begin(BB), et = pred_end(BB); it != et; ++it)</div>
|
|
508
|
+
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  num++;</div>
|
|
509
|
+
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="keywordflow">return</span> num;</div>
|
|
510
|
+
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> }</div>
|
|
511
511
|
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  </div>
|
|
512
|
-
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> 
|
|
513
|
-
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> 
|
|
514
|
-
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> 
|
|
515
|
-
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> 
|
|
516
|
-
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> 
|
|
517
|
-
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> 
|
|
518
|
-
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> 
|
|
519
|
-
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> 
|
|
520
|
-
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> 
|
|
521
|
-
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">
|
|
522
|
-
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> 
|
|
523
|
-
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  </div>
|
|
524
|
-
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <
|
|
525
|
-
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> 
|
|
526
|
-
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> 
|
|
527
|
-
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> 
|
|
528
|
-
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> 
|
|
529
|
-
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> 
|
|
530
|
-
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> 
|
|
531
|
-
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> 
|
|
532
|
-
<div class="line"><a name="
|
|
533
|
-
<div class="line"><a name="
|
|
534
|
-
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  </div>
|
|
535
|
-
<div class="line"><a name="l00504"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a523a8c3f9bfaea178733822ac598d552"> 504</a></span> <span class="keywordtype">void</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a523a8c3f9bfaea178733822ac598d552">LLVMUtil::removeFunAnnotations</a>(std::vector<Function*>& removedFuncList)</div>
|
|
512
|
+
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="comment">/*</span></div>
|
|
513
|
+
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="comment"> * Reference functions:</span></div>
|
|
514
|
+
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="comment"> * llvm::parseIRFile (lib/IRReader/IRReader.cpp)</span></div>
|
|
515
|
+
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="comment"> * llvm::parseIR (lib/IRReader/IRReader.cpp)</span></div>
|
|
516
|
+
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="comment"> */</span></div>
|
|
517
|
+
<div class="line"><a name="l00486"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41"> 486</a></span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41">LLVMUtil::isIRFile</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &filename)</div>
|
|
518
|
+
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> {</div>
|
|
519
|
+
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> FileOrErr = llvm::MemoryBuffer::getFileOrSTDIN(filename);</div>
|
|
520
|
+
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="keywordflow">if</span> (FileOrErr.getError())</div>
|
|
521
|
+
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
522
|
+
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  llvm::MemoryBufferRef Buffer = FileOrErr.get()->getMemBufferRef();</div>
|
|
523
|
+
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *bufferStart =</div>
|
|
524
|
+
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)Buffer.getBufferStart();</div>
|
|
525
|
+
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *bufferEnd =</div>
|
|
526
|
+
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)Buffer.getBufferEnd();</div>
|
|
527
|
+
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keywordflow">return</span> llvm::isBitcode(bufferStart, bufferEnd) ? <a class="code" href="cJSON_8cpp.html#a930920b2bc42824a5c03be681830f4b2">true</a> :</div>
|
|
528
|
+
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  Buffer.getBuffer().startswith(<span class="stringliteral">"; ModuleID ="</span>);</div>
|
|
529
|
+
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> }</div>
|
|
530
|
+
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  </div>
|
|
531
|
+
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  </div>
|
|
532
|
+
<div class="line"><a name="l00503"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#accdd44093d6d145dc92edeaaff3f5732"> 503</a></span> <span class="keywordtype">void</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#accdd44093d6d145dc92edeaaff3f5732">LLVMUtil::processArguments</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv, <span class="keywordtype">int</span> &arg_num, <span class="keywordtype">char</span> **arg_value,</div>
|
|
533
|
+
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  std::vector<std::string> &moduleNameVec)</div>
|
|
536
534
|
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> {</div>
|
|
537
|
-
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="
|
|
538
|
-
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> 
|
|
539
|
-
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> 
|
|
540
|
-
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> 
|
|
541
|
-
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> 
|
|
542
|
-
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> 
|
|
543
|
-
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> 
|
|
544
|
-
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  </div>
|
|
545
|
-
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> 
|
|
546
|
-
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> 
|
|
547
|
-
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> 
|
|
548
|
-
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> 
|
|
549
|
-
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> 
|
|
550
|
-
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> 
|
|
551
|
-
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> 
|
|
552
|
-
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> 
|
|
553
|
-
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordflow">
|
|
554
|
-
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> 
|
|
555
|
-
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> 
|
|
556
|
-
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> 
|
|
557
|
-
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> 
|
|
558
|
-
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> 
|
|
559
|
-
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> 
|
|
560
|
-
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> 
|
|
561
|
-
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> 
|
|
562
|
-
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> 
|
|
563
|
-
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> 
|
|
564
|
-
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> 
|
|
565
|
-
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> 
|
|
566
|
-
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> 
|
|
567
|
-
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  </div>
|
|
568
|
-
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> 
|
|
569
|
-
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> 
|
|
570
|
-
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> 
|
|
571
|
-
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  </div>
|
|
572
|
-
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> 
|
|
573
|
-
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> 
|
|
574
|
-
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> 
|
|
575
|
-
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> 
|
|
576
|
-
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> 
|
|
577
|
-
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  </div>
|
|
578
|
-
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> 
|
|
579
|
-
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> 
|
|
580
|
-
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> 
|
|
581
|
-
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> 
|
|
582
|
-
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> 
|
|
583
|
-
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  </div>
|
|
584
|
-
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> 
|
|
585
|
-
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> 
|
|
586
|
-
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> 
|
|
587
|
-
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  </div>
|
|
588
|
-
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> 
|
|
589
|
-
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> 
|
|
590
|
-
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> 
|
|
591
|
-
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  </div>
|
|
592
|
-
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> 
|
|
593
|
-
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> 
|
|
594
|
-
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> 
|
|
595
|
-
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  </div>
|
|
596
|
-
<div class="line"><a name="
|
|
597
|
-
<div class="line"><a name="
|
|
598
|
-
<div class="line"><a name="
|
|
599
|
-
<div class="line"><a name="
|
|
600
|
-
<div class="line"><a name="
|
|
601
|
-
<div class="line"><a name="
|
|
602
|
-
<div class="line"><a name="
|
|
603
|
-
<div class="line"><a name="
|
|
604
|
-
<div class="line"><a name="
|
|
605
|
-
<div class="line"><a name="
|
|
606
|
-
<div class="line"><a name="
|
|
607
|
-
<div class="line"><a name="
|
|
608
|
-
<div class="line"><a name="
|
|
609
|
-
<div class="line"><a name="
|
|
610
|
-
<div class="line"><a name="
|
|
611
|
-
<div class="line"><a name="
|
|
612
|
-
<div class="line"><a name="
|
|
613
|
-
<div class="line"><a name="
|
|
535
|
+
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keywordtype">bool</span> first_ir_file = <span class="keyword">true</span>;</div>
|
|
536
|
+
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < argc; ++i)</div>
|
|
537
|
+
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  {</div>
|
|
538
|
+
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> argument(argv[i]);</div>
|
|
539
|
+
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41">LLVMUtil::isIRFile</a>(argument))</div>
|
|
540
|
+
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  {</div>
|
|
541
|
+
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keywordflow">if</span> (find(moduleNameVec.begin(), moduleNameVec.end(), argument)</div>
|
|
542
|
+
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  == moduleNameVec.end())</div>
|
|
543
|
+
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  moduleNameVec.push_back(argument);</div>
|
|
544
|
+
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keywordflow">if</span> (first_ir_file)</div>
|
|
545
|
+
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  {</div>
|
|
546
|
+
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  arg_value[arg_num] = argv[i];</div>
|
|
547
|
+
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  arg_num++;</div>
|
|
548
|
+
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  first_ir_file = <span class="keyword">false</span>;</div>
|
|
549
|
+
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  }</div>
|
|
550
|
+
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  }</div>
|
|
551
|
+
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordflow">else</span></div>
|
|
552
|
+
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  {</div>
|
|
553
|
+
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  arg_value[arg_num] = argv[i];</div>
|
|
554
|
+
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  arg_num++;</div>
|
|
555
|
+
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  }</div>
|
|
556
|
+
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  }</div>
|
|
557
|
+
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> }</div>
|
|
558
|
+
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  </div>
|
|
559
|
+
<div class="line"><a name="l00530"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a8cd4d6410017b9e5f47f2f88450b78d8"> 530</a></span> std::vector<std::string> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8cd4d6410017b9e5f47f2f88450b78d8">LLVMUtil::getFunAnnotations</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun)</div>
|
|
560
|
+
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> {</div>
|
|
561
|
+
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  std::vector<std::string> annotations;</div>
|
|
562
|
+
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="comment">// Get annotation variable</span></div>
|
|
563
|
+
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *glob = fun->getParent()->getGlobalVariable(<span class="stringliteral">"llvm.global.annotations"</span>);</div>
|
|
564
|
+
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keywordflow">if</span> (glob == <span class="keyword">nullptr</span> || !glob->hasInitializer())</div>
|
|
565
|
+
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <span class="keywordflow">return</span> annotations;</div>
|
|
566
|
+
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  </div>
|
|
567
|
+
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *ca = SVFUtil::dyn_cast<ConstantArray>(glob->getInitializer());</div>
|
|
568
|
+
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordflow">if</span> (ca == <span class="keyword">nullptr</span>)</div>
|
|
569
|
+
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordflow">return</span> annotations;</div>
|
|
570
|
+
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  </div>
|
|
571
|
+
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < ca->getNumOperands(); ++i)</div>
|
|
572
|
+
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  {</div>
|
|
573
|
+
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *structAn = SVFUtil::dyn_cast<ConstantStruct>(ca->getOperand(i));</div>
|
|
574
|
+
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="keywordflow">if</span> (structAn == <span class="keyword">nullptr</span>)</div>
|
|
575
|
+
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="keywordflow">continue</span>;</div>
|
|
576
|
+
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  </div>
|
|
577
|
+
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *expr = SVFUtil::dyn_cast<ConstantExpr>(structAn->getOperand(0));</div>
|
|
578
|
+
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keywordflow">if</span> (expr == <span class="keyword">nullptr</span> || expr->getOpcode() != Instruction::BitCast || expr->getOperand(0) != fun)</div>
|
|
579
|
+
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">continue</span>;</div>
|
|
580
|
+
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  </div>
|
|
581
|
+
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *note = SVFUtil::cast<ConstantExpr>(structAn->getOperand(1));</div>
|
|
582
|
+
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keywordflow">if</span> (note->getOpcode() != Instruction::GetElementPtr)</div>
|
|
583
|
+
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="keywordflow">continue</span>;</div>
|
|
584
|
+
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  </div>
|
|
585
|
+
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *annotateStr = SVFUtil::dyn_cast<GlobalVariable>(note->getOperand(0));</div>
|
|
586
|
+
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="keywordflow">if</span> (annotateStr == <span class="keyword">nullptr</span> || !annotateStr->hasInitializer())</div>
|
|
587
|
+
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordflow">continue</span>;</div>
|
|
588
|
+
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  </div>
|
|
589
|
+
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <a class="code" href="namespaceSVF.html#a8ad3aa124fabddc2fdd07c50403d70a9">ConstantDataSequential</a> *data = SVFUtil::dyn_cast<ConstantDataSequential>(annotateStr->getInitializer());</div>
|
|
590
|
+
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <span class="keywordflow">if</span> (data->isString())</div>
|
|
591
|
+
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  {</div>
|
|
592
|
+
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> annotation = data->getAsString().str();</div>
|
|
593
|
+
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keywordflow">if</span> (!annotation.empty())</div>
|
|
594
|
+
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  annotations.push_back(annotation);</div>
|
|
595
|
+
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  }</div>
|
|
596
|
+
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  }</div>
|
|
597
|
+
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">return</span> annotations;</div>
|
|
598
|
+
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> }</div>
|
|
599
|
+
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  </div>
|
|
600
|
+
<div class="line"><a name="l00571"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a523a8c3f9bfaea178733822ac598d552"> 571</a></span> <span class="keywordtype">void</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a523a8c3f9bfaea178733822ac598d552">LLVMUtil::removeFunAnnotations</a>(std::vector<Function*>& removedFuncList)</div>
|
|
601
|
+
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> {</div>
|
|
602
|
+
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keywordflow">if</span> (removedFuncList.empty())</div>
|
|
603
|
+
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordflow">return</span>; <span class="comment">// No functions to remove annotations in extapi.bc module</span></div>
|
|
604
|
+
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  </div>
|
|
605
|
+
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* module = removedFuncList[0]->getParent();</div>
|
|
606
|
+
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* glob = module->getGlobalVariable(<span class="stringliteral">"llvm.global.annotations"</span>);</div>
|
|
607
|
+
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <span class="keywordflow">if</span> (glob == <span class="keyword">nullptr</span> || !glob->hasInitializer())</div>
|
|
608
|
+
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="keywordflow">return</span>;</div>
|
|
609
|
+
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  </div>
|
|
610
|
+
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a>* ca = SVFUtil::dyn_cast<ConstantArray>(glob->getInitializer());</div>
|
|
611
|
+
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keywordflow">if</span> (ca == <span class="keyword">nullptr</span>)</div>
|
|
612
|
+
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <span class="keywordflow">return</span>;</div>
|
|
614
613
|
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  </div>
|
|
615
|
-
<div class="line"><a name="l00585"></a><span class="lineno"
|
|
616
|
-
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> 
|
|
617
|
-
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> 
|
|
618
|
-
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> 
|
|
619
|
-
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordflow">
|
|
620
|
-
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> 
|
|
621
|
-
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> 
|
|
622
|
-
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <
|
|
623
|
-
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keywordflow">
|
|
624
|
-
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> 
|
|
625
|
-
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> 
|
|
626
|
-
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> 
|
|
627
|
-
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> 
|
|
628
|
-
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> }</div>
|
|
614
|
+
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  std::vector<Constant*> newAnnotations;</div>
|
|
615
|
+
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < ca->getNumOperands(); ++i)</div>
|
|
616
|
+
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  {</div>
|
|
617
|
+
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a>* structAn = SVFUtil::dyn_cast<ConstantStruct>(ca->getOperand(i));</div>
|
|
618
|
+
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordflow">if</span> (structAn == <span class="keyword">nullptr</span>)</div>
|
|
619
|
+
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <span class="keywordflow">continue</span>;</div>
|
|
620
|
+
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  </div>
|
|
621
|
+
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* expr = SVFUtil::dyn_cast<ConstantExpr>(structAn->getOperand(0));</div>
|
|
622
|
+
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keywordflow">if</span> (expr == <span class="keyword">nullptr</span> || expr->getOpcode() != Instruction::BitCast)</div>
|
|
623
|
+
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  {</div>
|
|
624
|
+
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="comment">// Keep the annotation if it's not created using BitCast</span></div>
|
|
625
|
+
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  newAnnotations.push_back(structAn);</div>
|
|
626
|
+
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="keywordflow">continue</span>;</div>
|
|
627
|
+
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  }</div>
|
|
629
628
|
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  </div>
|
|
630
|
-
<div class="line"><a name="l00600"></a><span class="lineno"
|
|
631
|
-
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> 
|
|
632
|
-
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> 
|
|
633
|
-
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> 
|
|
634
|
-
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> 
|
|
635
|
-
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> 
|
|
636
|
-
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> 
|
|
637
|
-
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> 
|
|
638
|
-
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  </div>
|
|
639
|
-
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> 
|
|
640
|
-
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> 
|
|
641
|
-
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> 
|
|
642
|
-
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> 
|
|
629
|
+
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* annotatedFunc = SVFUtil::dyn_cast<Function>(expr->getOperand(0));</div>
|
|
630
|
+
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keywordflow">if</span> (annotatedFunc == <span class="keyword">nullptr</span> || std::find(removedFuncList.begin(), removedFuncList.end(), annotatedFunc) != removedFuncList.end())</div>
|
|
631
|
+
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keywordflow">continue</span>;</div>
|
|
632
|
+
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  </div>
|
|
633
|
+
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="comment">// Keep the annotation for all other functions</span></div>
|
|
634
|
+
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  newAnnotations.push_back(structAn);</div>
|
|
635
|
+
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  }</div>
|
|
636
|
+
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  </div>
|
|
637
|
+
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <span class="keywordflow">if</span> (newAnnotations.size() == ca->getNumOperands())</div>
|
|
638
|
+
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="keywordflow">return</span>; <span class="comment">// No annotations to remove</span></div>
|
|
639
|
+
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  </div>
|
|
640
|
+
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* annotationsType = ArrayType::get(ca->getType()->getElementType(), newAnnotations.size());</div>
|
|
641
|
+
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* newCA = ConstantArray::get(annotationsType, newAnnotations);</div>
|
|
643
642
|
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  </div>
|
|
644
|
-
<div class="line"><a name="
|
|
645
|
-
<div class="line"><a name="
|
|
646
|
-
<div class="line"><a name="
|
|
647
|
-
<div class="line"><a name="
|
|
643
|
+
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="comment">// Check if a global variable with the name llvm.global.annotations already exists</span></div>
|
|
644
|
+
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* existingGlobal = module->getGlobalVariable(<span class="stringliteral">"llvm.global.annotations"</span>);</div>
|
|
645
|
+
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  <span class="keywordflow">if</span> (existingGlobal)</div>
|
|
646
|
+
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="comment">// Rename the existing llvm.global.annotations to llvm.global.annotations_old</span></div>
|
|
647
|
+
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  existingGlobal->setName(<span class="stringliteral">"llvm.global.annotations_old"</span>);</div>
|
|
648
648
|
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  </div>
|
|
649
|
-
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <
|
|
650
|
-
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <
|
|
651
|
-
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> 
|
|
649
|
+
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="comment">// Create a new global variable with the updated annotations</span></div>
|
|
650
|
+
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* newGlobal = <span class="keyword">new</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>(*module, newCA->getType(), glob->isConstant(),</div>
|
|
651
|
+
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  glob->getLinkage(), newCA, <span class="stringliteral">"llvm.global.annotations"</span>, glob, glob->getThreadLocalMode());</div>
|
|
652
652
|
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  </div>
|
|
653
|
-
<div class="line"><a name="
|
|
654
|
-
<div class="line"><a name="
|
|
655
|
-
<div class="line"><a name="
|
|
656
|
-
<div class="line"><a name="
|
|
657
|
-
<div class="line"><a name="
|
|
658
|
-
<div class="line"><a name="
|
|
659
|
-
<div class="line"><a name="
|
|
653
|
+
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="comment">// Copy other properties from the old global variable to the new one</span></div>
|
|
654
|
+
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  newGlobal->setSection(glob->getSection());</div>
|
|
655
|
+
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  newGlobal->setAlignment(llvm::MaybeAlign(glob->getAlignment()));</div>
|
|
656
|
+
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  </div>
|
|
657
|
+
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="comment">// Remove the old global variable</span></div>
|
|
658
|
+
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  glob->eraseFromParent();</div>
|
|
659
|
+
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> }</div>
|
|
660
|
+
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  </div>
|
|
661
|
+
<div class="line"><a name="l00633"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a47d2af43ff12d9e1014fa19256619466"> 633</a></span> std::vector<const Function *> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a47d2af43ff12d9e1014fa19256619466">LLVMUtil::getCalledFunctions</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
|
|
662
|
+
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> {</div>
|
|
663
|
+
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  std::vector<const Function *> calledFunctions;</div>
|
|
664
|
+
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> &I : instructions(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>))</div>
|
|
665
|
+
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  {</div>
|
|
666
|
+
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *callInst = SVFUtil::dyn_cast<CallBase>(&I))</div>
|
|
660
667
|
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  {</div>
|
|
661
|
-
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <a class="code" href="namespaceSVF.html#
|
|
662
|
-
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <span class="keywordflow">if</span> (
|
|
663
|
-
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> 
|
|
664
|
-
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> 
|
|
665
|
-
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> 
|
|
666
|
-
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> 
|
|
667
|
-
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> 
|
|
668
|
-
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> 
|
|
669
|
-
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> 
|
|
670
|
-
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> 
|
|
671
|
-
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> 
|
|
672
|
-
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> 
|
|
673
|
-
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> 
|
|
674
|
-
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> 
|
|
675
|
-
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> 
|
|
676
|
-
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> 
|
|
677
|
-
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> 
|
|
678
|
-
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="keywordflow">
|
|
679
|
-
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> 
|
|
680
|
-
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> 
|
|
681
|
-
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> 
|
|
682
|
-
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> 
|
|
683
|
-
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  </div>
|
|
684
|
-
<div class="line"><a name="l00663"></a><span class="lineno"
|
|
685
|
-
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> 
|
|
686
|
-
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> 
|
|
687
|
-
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> 
|
|
688
|
-
<div class="line"><a name="l00667"></a><span class="lineno"
|
|
689
|
-
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> 
|
|
690
|
-
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> 
|
|
691
|
-
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> 
|
|
692
|
-
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  </div>
|
|
693
|
-
<div class="line"><a name="l00672"></a><span class="lineno"
|
|
694
|
-
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> 
|
|
695
|
-
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> 
|
|
696
|
-
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> 
|
|
697
|
-
<div class="line"><a name="
|
|
698
|
-
<div class="line"><a name="
|
|
699
|
-
<div class="line"><a name="
|
|
700
|
-
<div class="line"><a name="
|
|
701
|
-
<div class="line"><a name="
|
|
702
|
-
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  </div>
|
|
703
|
-
<div class="line"><a name="
|
|
704
|
-
<div class="line"><a name="
|
|
705
|
-
<div class="line"><a name="
|
|
706
|
-
<div class="line"><a name="
|
|
707
|
-
<div class="line"><a name="
|
|
708
|
-
<div class="line"><a name="
|
|
709
|
-
<div class="line"><a name="
|
|
668
|
+
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *calledFunction = callInst->getCalledFunction();</div>
|
|
669
|
+
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <span class="keywordflow">if</span> (calledFunction)</div>
|
|
670
|
+
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  {</div>
|
|
671
|
+
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  calledFunctions.push_back(calledFunction);</div>
|
|
672
|
+
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  std::vector<const Function *> nestedCalledFunctions = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a47d2af43ff12d9e1014fa19256619466">getCalledFunctions</a>(calledFunction);</div>
|
|
673
|
+
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  calledFunctions.insert(calledFunctions.end(), nestedCalledFunctions.begin(), nestedCalledFunctions.end());</div>
|
|
674
|
+
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  }</div>
|
|
675
|
+
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  }</div>
|
|
676
|
+
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  }</div>
|
|
677
|
+
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="keywordflow">return</span> calledFunctions;</div>
|
|
678
|
+
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> }</div>
|
|
679
|
+
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  </div>
|
|
680
|
+
<div class="line"><a name="l00652"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#acee7c2fb08e111eda4d91ce5479de05e"> 652</a></span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#acee7c2fb08e111eda4d91ce5479de05e">LLVMUtil::isUnusedGlobalVariable</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>& global)</div>
|
|
681
|
+
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> {</div>
|
|
682
|
+
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="comment">// Check if it is an empty global annotations</span></div>
|
|
683
|
+
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keywordflow">if</span> (global.getName() == <span class="stringliteral">"llvm.global.annotations"</span> && SVFUtil::isa<ConstantArray>(global.getInitializer()))</div>
|
|
684
|
+
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
685
|
+
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="keywordflow">else</span></div>
|
|
686
|
+
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  {</div>
|
|
687
|
+
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <span class="comment">// Check if any global strings has at least one effective user</span></div>
|
|
688
|
+
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>& use : global.uses())</div>
|
|
689
|
+
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="keywordflow">if</span> (use.getUser()->getNumUses() != 0)</div>
|
|
690
|
+
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
691
|
+
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  }</div>
|
|
692
|
+
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
693
|
+
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> }</div>
|
|
694
|
+
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  </div>
|
|
695
|
+
<div class="line"><a name="l00667"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#ae2b444bb3e7a27d77386f588a78af8e2"> 667</a></span> <span class="keywordtype">void</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ae2b444bb3e7a27d77386f588a78af8e2">LLVMUtil::removeUnusedGlobalVariables</a>(<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* module)</div>
|
|
696
|
+
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> {</div>
|
|
697
|
+
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  assert(module && <span class="stringliteral">"Null module pointer!"</span>);</div>
|
|
698
|
+
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  std::vector<GlobalVariable*> unusedGlobals;</div>
|
|
699
|
+
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>& global : module->globals())</div>
|
|
700
|
+
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#acee7c2fb08e111eda4d91ce5479de05e">isUnusedGlobalVariable</a>(global))</div>
|
|
701
|
+
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <span class="comment">// Record unused global variables</span></div>
|
|
702
|
+
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  unusedGlobals.push_back(&global);</div>
|
|
703
|
+
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  </div>
|
|
704
|
+
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="comment">// Delete unused global variables</span></div>
|
|
705
|
+
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* global : unusedGlobals)</div>
|
|
706
|
+
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  global->eraseFromParent();</div>
|
|
707
|
+
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> }</div>
|
|
708
|
+
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  </div>
|
|
709
|
+
<div class="line"><a name="l00682"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a0ecff33105811b1e5ebc83afee76da27"> 682</a></span> <span class="keywordtype">void</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a0ecff33105811b1e5ebc83afee76da27">LLVMUtil::removeUnusedFuncsAndAnnotationsAndGlobalVariables</a>(std::vector<Function*> removedFuncList)</div>
|
|
710
|
+
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> {</div>
|
|
711
|
+
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordflow">if</span> (removedFuncList.empty())</div>
|
|
712
|
+
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="keywordflow">return</span>;</div>
|
|
713
|
+
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  </div>
|
|
714
|
+
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* mod = removedFuncList[0]->getParent();</div>
|
|
715
|
+
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="keywordflow">if</span> (mod->getName().str() != <a class="code" href="classSVF_1_1ExtAPI.html#a58a764c27354d5f9b70995d30de65f1d">ExtAPI::getExtAPI</a>()-><a class="code" href="classSVF_1_1ExtAPI.html#a26bc352dbfd1b2fe34106a73f1f6d50c">getExtBcPath</a>())</div>
|
|
716
|
+
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <span class="keywordflow">return</span>;</div>
|
|
717
|
+
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  </div>
|
|
718
|
+
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a523a8c3f9bfaea178733822ac598d552">LLVMUtil::removeFunAnnotations</a>(removedFuncList);</div>
|
|
710
719
|
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  </div>
|
|
711
|
-
<div class="line"><a name="
|
|
712
|
-
<div class="line"><a name="
|
|
713
|
-
<div class="line"><a name="
|
|
714
|
-
<div class="line"><a name="
|
|
715
|
-
<div class="line"><a name="
|
|
716
|
-
<div class="line"><a name="
|
|
717
|
-
<div class="line"><a name="
|
|
718
|
-
<div class="line"><a name="
|
|
719
|
-
<div class="line"><a name="
|
|
720
|
-
<div class="line"><a name="
|
|
721
|
-
<div class="line"><a name="
|
|
722
|
-
<div class="line"><a name="
|
|
723
|
-
<div class="line"><a name="
|
|
724
|
-
<div class="line"><a name="
|
|
725
|
-
<div class="line"><a name="
|
|
726
|
-
<div class="line"><a name="
|
|
727
|
-
<div class="line"><a name="
|
|
728
|
-
<div class="line"><a name="
|
|
729
|
-
<div class="line"><a name="
|
|
730
|
-
<div class="line"><a name="
|
|
731
|
-
<div class="line"><a name="
|
|
732
|
-
<div class="line"><a name="
|
|
733
|
-
<div class="line"><a name="
|
|
734
|
-
<div class="line"><a name="
|
|
735
|
-
<div class="line"><a name="
|
|
736
|
-
<div class="line"><a name="
|
|
737
|
-
<div class="line"><a name="
|
|
738
|
-
<div class="line"><a name="
|
|
739
|
-
<div class="line"><a name="
|
|
740
|
-
<div class="line"><a name="
|
|
741
|
-
<div class="line"><a name="
|
|
742
|
-
<div class="line"><a name="
|
|
743
|
-
<div class="line"><a name="
|
|
744
|
-
<div class="line"><a name="
|
|
745
|
-
<div class="line"><a name="
|
|
746
|
-
<div class="line"><a name="
|
|
747
|
-
<div class="line"><a name="
|
|
748
|
-
<div class="line"><a name="
|
|
749
|
-
<div class="line"><a name="
|
|
750
|
-
<div class="line"><a name="
|
|
751
|
-
<div class="line"><a name="
|
|
752
|
-
<div class="line"><a name="
|
|
753
|
-
<div class="line"><a name="
|
|
754
|
-
<div class="line"><a name="
|
|
755
|
-
<div class="line"><a name="
|
|
756
|
-
<div class="line"><a name="
|
|
757
|
-
<div class="line"><a name="
|
|
758
|
-
<div class="line"><a name="
|
|
759
|
-
<div class="line"><a name="
|
|
760
|
-
<div class="line"><a name="
|
|
761
|
-
<div class="line"><a name="
|
|
762
|
-
<div class="line"><a name="
|
|
763
|
-
<div class="line"><a name="
|
|
764
|
-
<div class="line"><a name="
|
|
765
|
-
<div class="line"><a name="
|
|
766
|
-
<div class="line"><a name="
|
|
767
|
-
<div class="line"><a name="
|
|
768
|
-
<div class="line"><a name="
|
|
769
|
-
<div class="line"><a name="
|
|
770
|
-
<div class="line"><a name="
|
|
771
|
-
<div class="line"><a name="
|
|
772
|
-
<div class="line"><a name="
|
|
773
|
-
<div class="line"><a name="
|
|
774
|
-
<div class="line"><a name="
|
|
775
|
-
<div class="line"><a name="
|
|
776
|
-
<div class="line"><a name="
|
|
777
|
-
<div class="line"><a name="
|
|
778
|
-
<div class="line"><a name="
|
|
779
|
-
<div class="line"><a name="
|
|
780
|
-
<div class="line"><a name="
|
|
781
|
-
<div class="line"><a name="
|
|
782
|
-
<div class="line"><a name="
|
|
783
|
-
<div class="line"><a name="
|
|
784
|
-
<div class="line"><a name="
|
|
785
|
-
<div class="line"><a name="
|
|
786
|
-
<div class="line"><a name="
|
|
787
|
-
<div class="line"><a name="
|
|
788
|
-
<div class="line"><a name="
|
|
789
|
-
<div class="line"><a name="
|
|
790
|
-
<div class="line"><a name="
|
|
791
|
-
<div class="line"><a name="
|
|
792
|
-
<div class="line"><a name="
|
|
793
|
-
<div class="line"><a name="
|
|
794
|
-
<div class="line"><a name="
|
|
795
|
-
<div class="line"><a name="
|
|
796
|
-
<div class="line"><a name="
|
|
797
|
-
<div class="line"><a name="
|
|
798
|
-
<div class="line"><a name="
|
|
799
|
-
<div class="line"><a name="
|
|
800
|
-
<div class="line"><a name="
|
|
801
|
-
<div class="line"><a name="
|
|
802
|
-
<div class="line"><a name="
|
|
803
|
-
<div class="line"><a name="
|
|
804
|
-
<div class="line"><a name="
|
|
805
|
-
<div class="line"><a name="
|
|
806
|
-
<div class="line"><a name="
|
|
807
|
-
<div class="line"><a name="
|
|
808
|
-
<div class="line"><a name="
|
|
809
|
-
<div class="line"><a name="
|
|
810
|
-
<div class="line"><a name="
|
|
811
|
-
<div class="line"><a name="
|
|
812
|
-
<div class="line"><a name="
|
|
813
|
-
<div class="line"><a name="
|
|
814
|
-
<div class="line"><a name="
|
|
815
|
-
<div class="line"><a name="
|
|
816
|
-
<div class="line"><a name="
|
|
817
|
-
<div class="line"><a name="
|
|
818
|
-
<div class="line"><a name="
|
|
819
|
-
<div class="line"><a name="
|
|
820
|
-
<div class="line"><a name="
|
|
821
|
-
<div class="line"><a name="
|
|
822
|
-
<div class="line"><a name="
|
|
823
|
-
<div class="line"><a name="
|
|
824
|
-
<div class="line"><a name="
|
|
825
|
-
<div class="line"><a name="
|
|
826
|
-
<div class="line"><a name="
|
|
827
|
-
<div class="line"><a name="
|
|
828
|
-
<div class="line"><a name="
|
|
829
|
-
<div class="line"><a name="
|
|
830
|
-
<div class="line"><a name="
|
|
831
|
-
<div class="line"><a name="
|
|
832
|
-
<div class="line"><a name="
|
|
833
|
-
<div class="line"><a name="
|
|
834
|
-
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">succ_const_iterator</a> it = succ_begin(BB), ie = succ_end(BB); it != ie; ++it)</div>
|
|
835
|
-
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  {</div>
|
|
836
|
-
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* nextInst = &((*it)->front());</div>
|
|
837
|
-
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(nextInst))</div>
|
|
838
|
-
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">getNextInsts</a>(nextInst, instList);</div>
|
|
839
|
-
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="keywordflow">else</span></div>
|
|
840
|
-
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  instList.push_back(nextInst);</div>
|
|
720
|
+
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  std::vector<Function*> funcsToKeep;</div>
|
|
721
|
+
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keyword">auto</span> isCalledFunction = [](<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">llvm::Function</a>* <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
|
|
722
|
+
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  {</div>
|
|
723
|
+
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  assert(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a> && <span class="stringliteral">"Null function pointer!"</span>);</div>
|
|
724
|
+
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>& use : <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>->uses())</div>
|
|
725
|
+
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  {</div>
|
|
726
|
+
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <a class="code" href="namespaceSVF.html#afc1b50355821e7299df03b026e36f1df">llvm::User</a>* user = use.getUser();</div>
|
|
727
|
+
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="keywordflow">if</span> (llvm::isa<llvm::CallBase>(user))</div>
|
|
728
|
+
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
729
|
+
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  }</div>
|
|
730
|
+
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
731
|
+
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  };</div>
|
|
732
|
+
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  </div>
|
|
733
|
+
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func : removedFuncList)</div>
|
|
734
|
+
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  {</div>
|
|
735
|
+
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="keywordflow">if</span> (isCalledFunction(func))</div>
|
|
736
|
+
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <span class="comment">// Record first kind function(which does not contain any invocation statements)</span></div>
|
|
737
|
+
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  funcsToKeep.push_back(func);</div>
|
|
738
|
+
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <span class="keywordflow">else</span></div>
|
|
739
|
+
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <span class="comment">// Delete second kind function(which contains invocation statements)</span></div>
|
|
740
|
+
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  func->eraseFromParent();</div>
|
|
741
|
+
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  }</div>
|
|
742
|
+
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="comment">// Delete first kind functions</span></div>
|
|
743
|
+
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func : funcsToKeep)</div>
|
|
744
|
+
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  func->eraseFromParent();</div>
|
|
745
|
+
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="comment">// Delete unused global variables</span></div>
|
|
746
|
+
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ae2b444bb3e7a27d77386f588a78af8e2">removeUnusedGlobalVariables</a>(mod);</div>
|
|
747
|
+
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> }</div>
|
|
748
|
+
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  </div>
|
|
749
|
+
<div class="line"><a name="l00730"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a09683d4d88a50fa621809c734465f94d"> 730</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a09683d4d88a50fa621809c734465f94d">LLVMUtil::getTypeSizeInBytes</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</div>
|
|
750
|
+
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> {</div>
|
|
751
|
+
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <span class="comment">// if the type has size then simply return it, otherwise just return 0</span></div>
|
|
752
|
+
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  <span class="keywordflow">if</span>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>->isSized())</div>
|
|
753
|
+
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a151fd7fb2b2ebe72af7c417defbb4f4d">getDataLayout</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getMainLLVMModule())->getTypeStoreSize(<span class="keyword">const_cast<</span><a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>*<span class="keyword">></span>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>));</div>
|
|
754
|
+
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  <span class="keywordflow">else</span></div>
|
|
755
|
+
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="keywordflow">return</span> 0;</div>
|
|
756
|
+
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> }</div>
|
|
757
|
+
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  </div>
|
|
758
|
+
<div class="line"><a name="l00739"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a2b5fdf455c5dd40c0baa60185e5e41c6"> 739</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a09683d4d88a50fa621809c734465f94d">LLVMUtil::getTypeSizeInBytes</a>(<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>
|
|
759
|
+
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> {</div>
|
|
760
|
+
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  </div>
|
|
761
|
+
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a52c8654c221bb53a59f70ea3cb1e5c45">StructLayout</a> *stTySL = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a151fd7fb2b2ebe72af7c417defbb4f4d">getDataLayout</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getMainLLVMModule())->getStructLayout( <span class="keyword">const_cast<</span><a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *<span class="keyword">></span>(sty) );</div>
|
|
762
|
+
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  <span class="keywordflow">if</span>(sty->isOpaque())</div>
|
|
763
|
+
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <span class="keywordflow">return</span> 0;</div>
|
|
764
|
+
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="keywordflow">else</span></div>
|
|
765
|
+
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="keywordflow">return</span> stTySL->getElementOffset(field_idx);</div>
|
|
766
|
+
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> }</div>
|
|
767
|
+
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  </div>
|
|
768
|
+
<div class="line"><a name="l00753"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a8e4add30bd0ce00d3f2aa2e31c64fef8"> 753</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8e4add30bd0ce00d3f2aa2e31c64fef8">LLVMUtil::getSourceLoc</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val )</div>
|
|
769
|
+
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> {</div>
|
|
770
|
+
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  <span class="keywordflow">if</span>(val==<span class="keyword">nullptr</span>) <span class="keywordflow">return</span> <span class="stringliteral">"{ empty val }"</span>;</div>
|
|
771
|
+
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  </div>
|
|
772
|
+
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div>
|
|
773
|
+
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  std::stringstream rawstr(str);</div>
|
|
774
|
+
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  rawstr << <span class="stringliteral">"{ "</span>;</div>
|
|
775
|
+
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  </div>
|
|
776
|
+
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = SVFUtil::dyn_cast<Instruction>(val))</div>
|
|
777
|
+
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  {</div>
|
|
778
|
+
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  <span class="keywordflow">if</span> (SVFUtil::isa<AllocaInst>(inst))</div>
|
|
779
|
+
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  {</div>
|
|
780
|
+
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  <span class="keywordflow">for</span> (llvm::DbgInfoIntrinsic *DII : FindDbgAddrUses(<span class="keyword">const_cast<</span><a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>*<span class="keyword">></span>(inst)))</div>
|
|
781
|
+
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  {</div>
|
|
782
|
+
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <span class="keywordflow">if</span> (llvm::DbgDeclareInst *DDI = SVFUtil::dyn_cast<llvm::DbgDeclareInst>(DII))</div>
|
|
783
|
+
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  {</div>
|
|
784
|
+
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  llvm::DIVariable *DIVar = SVFUtil::cast<llvm::DIVariable>(DDI->getVariable());</div>
|
|
785
|
+
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  rawstr << <span class="stringliteral">"\"ln\": "</span> << DIVar->getLine() << <span class="stringliteral">", \"fl\": \""</span> << DIVar->getFilename().str() << <span class="stringliteral">"\""</span>;</div>
|
|
786
|
+
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <span class="keywordflow">break</span>;</div>
|
|
787
|
+
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  }</div>
|
|
788
|
+
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  }</div>
|
|
789
|
+
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  }</div>
|
|
790
|
+
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *N = inst->getMetadata(<span class="stringliteral">"dbg"</span>)) <span class="comment">// Here I is an LLVM instruction</span></div>
|
|
791
|
+
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  {</div>
|
|
792
|
+
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  llvm::DILocation* Loc = SVFUtil::cast<llvm::DILocation>(N); <span class="comment">// DILocation is in DebugInfo.h</span></div>
|
|
793
|
+
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  <span class="keywordtype">unsigned</span> Line = Loc->getLine();</div>
|
|
794
|
+
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <span class="keywordtype">unsigned</span> Column = Loc->getColumn();</div>
|
|
795
|
+
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> File = Loc->getFilename().str();</div>
|
|
796
|
+
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <span class="comment">//StringRef Dir = Loc.getDirectory();</span></div>
|
|
797
|
+
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keywordflow">if</span>(File.empty() || Line == 0)</div>
|
|
798
|
+
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  {</div>
|
|
799
|
+
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keyword">auto</span> inlineLoc = Loc->getInlinedAt();</div>
|
|
800
|
+
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  <span class="keywordflow">if</span>(inlineLoc)</div>
|
|
801
|
+
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  {</div>
|
|
802
|
+
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  Line = inlineLoc->getLine();</div>
|
|
803
|
+
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  Column = inlineLoc->getColumn();</div>
|
|
804
|
+
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  File = inlineLoc->getFilename().str();</div>
|
|
805
|
+
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  }</div>
|
|
806
|
+
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  }</div>
|
|
807
|
+
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  rawstr << <span class="stringliteral">"\"ln\": "</span> << Line << <span class="stringliteral">", \"cl\": "</span> << Column << <span class="stringliteral">", \"fl\": \""</span> << File << <span class="stringliteral">"\""</span>;</div>
|
|
808
|
+
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  }</div>
|
|
809
|
+
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  }</div>
|
|
810
|
+
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* argument = SVFUtil::dyn_cast<Argument>(val))</div>
|
|
811
|
+
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  {</div>
|
|
812
|
+
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <span class="keywordflow">if</span> (argument->getArgNo()%10 == 1)</div>
|
|
813
|
+
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  rawstr << argument->getArgNo() << <span class="stringliteral">"st"</span>;</div>
|
|
814
|
+
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (argument->getArgNo()%10 == 2)</div>
|
|
815
|
+
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  rawstr << argument->getArgNo() << <span class="stringliteral">"nd"</span>;</div>
|
|
816
|
+
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (argument->getArgNo()%10 == 3)</div>
|
|
817
|
+
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  rawstr << argument->getArgNo() << <span class="stringliteral">"rd"</span>;</div>
|
|
818
|
+
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  <span class="keywordflow">else</span></div>
|
|
819
|
+
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  rawstr << argument->getArgNo() << <span class="stringliteral">"th"</span>;</div>
|
|
820
|
+
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  rawstr << <span class="stringliteral">" arg "</span> << argument->getParent()->getName().str() << <span class="stringliteral">" "</span></div>
|
|
821
|
+
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  << <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2b32283ee2dbb9cef1d17ab6f2719e0c">getSourceLocOfFunction</a>(argument->getParent());</div>
|
|
822
|
+
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  }</div>
|
|
823
|
+
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* gvar = SVFUtil::dyn_cast<GlobalVariable>(val))</div>
|
|
824
|
+
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  {</div>
|
|
825
|
+
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  rawstr << <span class="stringliteral">"Glob "</span>;</div>
|
|
826
|
+
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <a class="code" href="namespaceSVF.html#a3011dbac9102f044ad5f36a4ad3d4a71">NamedMDNode</a>* CU_Nodes = gvar->getParent()->getNamedMetadata(<span class="stringliteral">"llvm.dbg.cu"</span>);</div>
|
|
827
|
+
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keywordflow">if</span>(CU_Nodes)</div>
|
|
828
|
+
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  {</div>
|
|
829
|
+
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i)</div>
|
|
830
|
+
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  {</div>
|
|
831
|
+
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  llvm::DICompileUnit *CUNode = SVFUtil::cast<llvm::DICompileUnit>(CU_Nodes->getOperand(i));</div>
|
|
832
|
+
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="keywordflow">for</span> (llvm::DIGlobalVariableExpression *GV : CUNode->getGlobalVariables())</div>
|
|
833
|
+
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  {</div>
|
|
834
|
+
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  llvm::DIGlobalVariable * DGV = GV->getVariable();</div>
|
|
835
|
+
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  </div>
|
|
836
|
+
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <span class="keywordflow">if</span>(DGV->getName() == gvar->getName())</div>
|
|
837
|
+
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  {</div>
|
|
838
|
+
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  rawstr << <span class="stringliteral">"\"ln\": "</span> << DGV->getLine() << <span class="stringliteral">", \"fl\": \""</span> << DGV->getFilename().str() << <span class="stringliteral">"\""</span>;</div>
|
|
839
|
+
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  }</div>
|
|
840
|
+
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  </div>
|
|
841
|
+
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  }</div>
|
|
842
|
+
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  }</div>
|
|
841
843
|
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  }</div>
|
|
842
844
|
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  }</div>
|
|
843
|
-
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> 
|
|
844
|
-
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> 
|
|
845
|
-
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  </div>
|
|
846
|
-
<div class="line"><a name="
|
|
847
|
-
<div class="line"><a name="
|
|
848
|
-
<div class="line"><a name="
|
|
849
|
-
<div class="line"><a name="
|
|
850
|
-
<div class="line"><a name="
|
|
851
|
-
<div class="line"><a name="
|
|
852
|
-
<div class="line"><a name="
|
|
853
|
-
<div class="line"><a name="
|
|
854
|
-
<div class="line"><a name="
|
|
855
|
-
<div class="line"><a name="
|
|
856
|
-
<div class="line"><a name="
|
|
857
|
-
<div class="line"><a name="
|
|
858
|
-
<div class="line"><a name="
|
|
859
|
-
<div class="line"><a name="
|
|
860
|
-
<div class="line"><a name="
|
|
861
|
-
<div class="line"><a name="
|
|
862
|
-
<div class="line"><a name="
|
|
863
|
-
<div class="line"><a name="
|
|
864
|
-
<div class="line"><a name="
|
|
865
|
-
<div class="line"><a name="
|
|
866
|
-
<div class="line"><a name="
|
|
867
|
-
<div class="line"><a name="
|
|
868
|
-
<div class="line"><a name="
|
|
869
|
-
<div class="line"><a name="
|
|
870
|
-
<div class="line"><a name="
|
|
871
|
-
<div class="line"><a name="
|
|
872
|
-
<div class="line"><a name="
|
|
873
|
-
<div class="line"><a name="
|
|
874
|
-
<div class="line"><a name="
|
|
875
|
-
<div class="line"><a name="
|
|
876
|
-
<div class="line"><a name="
|
|
877
|
-
<div class="line"><a name="
|
|
878
|
-
<div class="line"><a name="
|
|
879
|
-
<div class="line"><a name="
|
|
880
|
-
<div class="line"><a name="
|
|
881
|
-
<div class="line"><a name="
|
|
882
|
-
<div class="line"><a name="
|
|
883
|
-
<div class="line"><a name="
|
|
884
|
-
<div class="line"><a name="
|
|
885
|
-
<div class="line"><a name="
|
|
886
|
-
<div class="line"><a name="
|
|
887
|
-
<div class="line"><a name="
|
|
888
|
-
<div class="line"><a name="
|
|
889
|
-
<div class="line"><a name="
|
|
890
|
-
<div class="line"><a name="
|
|
891
|
-
<div class="line"><a name="
|
|
892
|
-
<div class="line"><a name="
|
|
893
|
-
<div class="line"><a name="
|
|
894
|
-
<div class="line"><a name="
|
|
895
|
-
<div class="line"><a name="
|
|
896
|
-
<div class="line"><a name="
|
|
897
|
-
<div class="line"><a name="
|
|
898
|
-
<div class="line"><a name="
|
|
899
|
-
<div class="line"><a name="
|
|
900
|
-
<div class="line"><a name="
|
|
901
|
-
<div class="line"><a name="
|
|
902
|
-
<div class="line"><a name="
|
|
903
|
-
<div class="line"><a name="
|
|
904
|
-
<div class="line"><a name="
|
|
905
|
-
<div class="line"><a name="
|
|
906
|
-
<div class="line"><a name="
|
|
907
|
-
<div class="line"><a name="
|
|
908
|
-
<div class="line"><a name="
|
|
909
|
-
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> 
|
|
910
|
-
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> 
|
|
911
|
-
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> 
|
|
912
|
-
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> 
|
|
913
|
-
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  </div>
|
|
914
|
-
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> 
|
|
915
|
-
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> 
|
|
916
|
-
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  </div>
|
|
917
|
-
<div class="line"><a name="l00909"></a><span class="lineno"
|
|
918
|
-
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> 
|
|
919
|
-
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  <span class="keywordflow">
|
|
920
|
-
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> 
|
|
921
|
-
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> 
|
|
922
|
-
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> 
|
|
923
|
-
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> 
|
|
924
|
-
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> 
|
|
925
|
-
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  </div>
|
|
926
|
-
<div class="line"><a name="l00918"></a><span class="lineno"
|
|
927
|
-
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> 
|
|
928
|
-
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> 
|
|
929
|
-
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> 
|
|
930
|
-
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> 
|
|
931
|
-
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> 
|
|
932
|
-
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> 
|
|
933
|
-
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> 
|
|
934
|
-
<div class="line"><a name="
|
|
935
|
-
<div class="line"><a name="
|
|
936
|
-
<div class="line"><a name="
|
|
937
|
-
<div class="line"><a name="
|
|
938
|
-
<div class="line"><a name="
|
|
939
|
-
<div class="line"><a name="
|
|
940
|
-
<div class="line"><a name="
|
|
941
|
-
<div class="line"><a name="
|
|
942
|
-
<div class="line"><a name="
|
|
943
|
-
<div class="line"><a name="
|
|
944
|
-
<div class="line"><a name="
|
|
945
|
-
<div class="line"><a name="
|
|
946
|
-
<div class="line"><a name="
|
|
947
|
-
<div class="line"><a name="
|
|
948
|
-
<div class="line"><a name="
|
|
949
|
-
<div class="line"><a name="
|
|
950
|
-
<div class="line"><a name="
|
|
951
|
-
<div class="line"><a name="
|
|
952
|
-
<div class="line"><a name="
|
|
953
|
-
<div class="line"><a name="
|
|
954
|
-
<div class="line"><a name="
|
|
955
|
-
<div class="line"><a name="
|
|
956
|
-
<div class="line"><a name="
|
|
957
|
-
<div class="line"><a name="
|
|
958
|
-
<div class="line"><a name="
|
|
959
|
-
<div class="line"><a name="
|
|
960
|
-
<div class="line"><a name="
|
|
961
|
-
<div class="line"><a name="
|
|
962
|
-
<div class="line"><a name="
|
|
963
|
-
<div class="line"><a name="
|
|
964
|
-
<div class="line"><a name="
|
|
965
|
-
<div class="line"><a name="
|
|
966
|
-
<div class="line"><a name="
|
|
967
|
-
<div class="line"><a name="
|
|
968
|
-
<div class="line"><a name="
|
|
969
|
-
<div class="line"><a name="
|
|
970
|
-
<div class="line"><a name="
|
|
971
|
-
<div class="line"><a name="
|
|
972
|
-
<div class="line"><a name="
|
|
973
|
-
<div class="line"><a name="
|
|
974
|
-
<div class="line"><a name="
|
|
975
|
-
<div class="line"><a name="
|
|
976
|
-
<div class="line"><a name="
|
|
977
|
-
<div class="line"><a name="
|
|
978
|
-
<div class="line"><a name="
|
|
979
|
-
<div class="line"><a name="
|
|
980
|
-
<div class="line"><a name="
|
|
981
|
-
<div class="line"><a name="
|
|
982
|
-
<div class="line"><a name="
|
|
983
|
-
<div class="line"><a name="
|
|
984
|
-
<div class="line"><a name="
|
|
985
|
-
<div class="line"><a name="
|
|
986
|
-
<div class="line"><a name="
|
|
987
|
-
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  }</div>
|
|
988
|
-
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  }</div>
|
|
989
|
-
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  }</div>
|
|
990
|
-
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
845
|
+
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = SVFUtil::dyn_cast<Function>(val))</div>
|
|
846
|
+
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  {</div>
|
|
847
|
+
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  rawstr << <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2b32283ee2dbb9cef1d17ab6f2719e0c">getSourceLocOfFunction</a>(func);</div>
|
|
848
|
+
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  }</div>
|
|
849
|
+
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb = SVFUtil::dyn_cast<BasicBlock>(val))</div>
|
|
850
|
+
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  {</div>
|
|
851
|
+
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  rawstr << <span class="stringliteral">"\"basic block\": "</span> << bb->getName().str() << <span class="stringliteral">", \"location\": "</span> << <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8e4add30bd0ce00d3f2aa2e31c64fef8">getSourceLoc</a>(bb->getFirstNonPHI());</div>
|
|
852
|
+
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  }</div>
|
|
853
|
+
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">LLVMUtil::isConstDataOrAggData</a>(val))</div>
|
|
854
|
+
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  {</div>
|
|
855
|
+
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  rawstr << <span class="stringliteral">"constant data"</span>;</div>
|
|
856
|
+
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  }</div>
|
|
857
|
+
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <span class="keywordflow">else</span></div>
|
|
858
|
+
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  {</div>
|
|
859
|
+
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  rawstr << <span class="stringliteral">"N/A"</span>;</div>
|
|
860
|
+
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  }</div>
|
|
861
|
+
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  rawstr << <span class="stringliteral">" }"</span>;</div>
|
|
862
|
+
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  </div>
|
|
863
|
+
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="keywordflow">if</span>(rawstr.str()==<span class="stringliteral">"{ }"</span>)</div>
|
|
864
|
+
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div>
|
|
865
|
+
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <span class="keywordflow">return</span> rawstr.str();</div>
|
|
866
|
+
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> }</div>
|
|
867
|
+
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  </div>
|
|
868
|
+
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  </div>
|
|
869
|
+
<div class="line"><a name="l00857"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a2b32283ee2dbb9cef1d17ab6f2719e0c"> 857</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2b32283ee2dbb9cef1d17ab6f2719e0c">LLVMUtil::getSourceLocOfFunction</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
|
|
870
|
+
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> {</div>
|
|
871
|
+
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div>
|
|
872
|
+
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  std::stringstream rawstr(str);</div>
|
|
873
|
+
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <span class="comment">/*</span></div>
|
|
874
|
+
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <span class="comment"> * https://reviews.llvm.org/D18074?id=50385</span></div>
|
|
875
|
+
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <span class="comment"> * looks like the relevant</span></div>
|
|
876
|
+
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="comment"> */</span></div>
|
|
877
|
+
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a89c7208bfc0b57873dfa574f52050295">llvm::DISubprogram</a> *SP = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>->getSubprogram())</div>
|
|
878
|
+
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  {</div>
|
|
879
|
+
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="keywordflow">if</span> (SP->describes(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>))</div>
|
|
880
|
+
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  rawstr << <span class="stringliteral">"\"ln\": "</span> << SP->getLine() << <span class="stringliteral">", \"file\": \""</span> << SP->getFilename().str() << <span class="stringliteral">"\""</span>;</div>
|
|
881
|
+
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  }</div>
|
|
882
|
+
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keywordflow">return</span> rawstr.str();</div>
|
|
883
|
+
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> }</div>
|
|
884
|
+
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  </div>
|
|
885
|
+
<div class="line"><a name="l00874"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a7fa1f910598426330f08da19e9efdfa3"> 874</a></span> <span class="keywordtype">void</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">LLVMUtil::getNextInsts</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* curInst, std::vector<const Instruction*>& instList)</div>
|
|
886
|
+
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> {</div>
|
|
887
|
+
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <span class="keywordflow">if</span> (!curInst->isTerminator())</div>
|
|
888
|
+
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  {</div>
|
|
889
|
+
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* nextInst = curInst->getNextNode();</div>
|
|
890
|
+
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(nextInst))</div>
|
|
891
|
+
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">getNextInsts</a>(nextInst, instList);</div>
|
|
892
|
+
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <span class="keywordflow">else</span></div>
|
|
893
|
+
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  instList.push_back(nextInst);</div>
|
|
894
|
+
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  }</div>
|
|
895
|
+
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  <span class="keywordflow">else</span></div>
|
|
896
|
+
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  {</div>
|
|
897
|
+
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *BB = curInst->getParent();</div>
|
|
898
|
+
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  <span class="comment">// Visit all successors of BB in the CFG</span></div>
|
|
899
|
+
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">succ_const_iterator</a> it = succ_begin(BB), ie = succ_end(BB); it != ie; ++it)</div>
|
|
900
|
+
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  {</div>
|
|
901
|
+
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* nextInst = &((*it)->front());</div>
|
|
902
|
+
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(nextInst))</div>
|
|
903
|
+
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">getNextInsts</a>(nextInst, instList);</div>
|
|
904
|
+
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  <span class="keywordflow">else</span></div>
|
|
905
|
+
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  instList.push_back(nextInst);</div>
|
|
906
|
+
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  }</div>
|
|
907
|
+
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  }</div>
|
|
908
|
+
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> }</div>
|
|
909
|
+
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  </div>
|
|
910
|
+
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  </div>
|
|
911
|
+
<div class="line"><a name="l00901"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a08876cc07f9b9dbe84f87aea09e9824f"> 901</a></span> <span class="keywordtype">void</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">LLVMUtil::getPrevInsts</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* curInst, std::vector<const Instruction*>& instList)</div>
|
|
912
|
+
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> {</div>
|
|
913
|
+
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <span class="keywordflow">if</span> (curInst != &(curInst->getParent()->front()))</div>
|
|
914
|
+
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  {</div>
|
|
915
|
+
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevInst = curInst->getPrevNode();</div>
|
|
916
|
+
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(prevInst))</div>
|
|
917
|
+
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">getPrevInsts</a>(prevInst, instList);</div>
|
|
918
|
+
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  <span class="keywordflow">else</span></div>
|
|
919
|
+
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  instList.push_back(prevInst);</div>
|
|
920
|
+
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  }</div>
|
|
921
|
+
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  <span class="keywordflow">else</span></div>
|
|
922
|
+
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  {</div>
|
|
923
|
+
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *BB = curInst->getParent();</div>
|
|
924
|
+
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  <span class="comment">// Visit all successors of BB in the CFG</span></div>
|
|
925
|
+
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c943191dc4e242704943e5f594ae99e">const_pred_iterator</a> it = pred_begin(BB), ie = pred_end(BB); it != ie; ++it)</div>
|
|
926
|
+
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  {</div>
|
|
927
|
+
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevInst = &((*it)->back());</div>
|
|
928
|
+
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(prevInst))</div>
|
|
929
|
+
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">getPrevInsts</a>(prevInst, instList);</div>
|
|
930
|
+
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  <span class="keywordflow">else</span></div>
|
|
931
|
+
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  instList.push_back(prevInst);</div>
|
|
932
|
+
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  }</div>
|
|
933
|
+
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  }</div>
|
|
934
|
+
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> }</div>
|
|
935
|
+
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  </div>
|
|
936
|
+
<div class="line"><a name="l00927"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#ad8ee8de153df3f1bbdebb67185a2731c"> 927</a></span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8ee8de153df3f1bbdebb67185a2731c">LLVMUtil::isConstantObjSym</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* val)</div>
|
|
937
|
+
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> {</div>
|
|
938
|
+
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8ee8de153df3f1bbdebb67185a2731c">isConstantObjSym</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getLLVMValue(val));</div>
|
|
939
|
+
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> }</div>
|
|
940
|
+
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  </div>
|
|
941
|
+
<div class="line"><a name="l00935"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a2fd5c626b818ac22a9c845227e1461c4"> 935</a></span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8ee8de153df3f1bbdebb67185a2731c">LLVMUtil::isConstantObjSym</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val)</div>
|
|
942
|
+
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> {</div>
|
|
943
|
+
<div class="line"><a name="l00937"></a><span class="lineno"> 937</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>
|
|
944
|
+
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  {</div>
|
|
945
|
+
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a08fbef6fe3e2af96a49f79ce23accb01">LLVMUtil::isValVtbl</a>(v))</div>
|
|
946
|
+
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
947
|
+
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!v->hasInitializer())</div>
|
|
948
|
+
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  {</div>
|
|
949
|
+
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  <span class="keywordflow">return</span> !v->isExternalLinkage(v->getLinkage());</div>
|
|
950
|
+
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  }</div>
|
|
951
|
+
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  <span class="keywordflow">else</span></div>
|
|
952
|
+
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  {</div>
|
|
953
|
+
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> *stInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(v->getInitializer()->getType())-><a class="code" href="classSVF_1_1SVFType.html#a05850c17c2dbe42e5602dc8c9a70f3bd">getTypeInfo</a>();</div>
|
|
954
|
+
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  <span class="keyword">const</span> std::vector<const SVFType*> &fields = stInfo-><a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>();</div>
|
|
955
|
+
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  <span class="keywordflow">for</span> (std::vector<const SVFType*>::const_iterator it = fields.begin(), eit = fields.end(); it != eit; ++it)</div>
|
|
956
|
+
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  {</div>
|
|
957
|
+
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elemTy = *it;</div>
|
|
958
|
+
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  assert(!SVFUtil::isa<SVFFunctionType>(elemTy) && <span class="stringliteral">"Initializer of a global is a function?"</span>);</div>
|
|
959
|
+
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  <span class="keywordflow">if</span> (SVFUtil::isa<SVFPointerType>(elemTy))</div>
|
|
960
|
+
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
961
|
+
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  }</div>
|
|
962
|
+
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  </div>
|
|
963
|
+
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  <span class="keywordflow">return</span> v->isConstant();</div>
|
|
964
|
+
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  }</div>
|
|
965
|
+
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  }</div>
|
|
966
|
+
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">LLVMUtil::isConstDataOrAggData</a>(val);</div>
|
|
967
|
+
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> }</div>
|
|
968
|
+
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  </div>
|
|
969
|
+
<div class="line"><a name="l00963"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a4f803756f0a73e8564d9544ce27be1c9"> 963</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4f803756f0a73e8564d9544ce27be1c9">LLVMUtil::getVtblStruct</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl)</div>
|
|
970
|
+
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> {</div>
|
|
971
|
+
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *vtblStruct = SVFUtil::dyn_cast<ConstantStruct>(vtbl->getOperand(0));</div>
|
|
972
|
+
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  assert(vtblStruct && <span class="stringliteral">"Initializer of a vtable not a struct?"</span>);</div>
|
|
973
|
+
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  </div>
|
|
974
|
+
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  <span class="keywordflow">if</span> (vtblStruct->getNumOperands() == 2 &&</div>
|
|
975
|
+
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  SVFUtil::isa<ConstantStruct>(vtblStruct->getOperand(0)) &&</div>
|
|
976
|
+
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  vtblStruct->getOperand(1)->getType()->isArrayTy())</div>
|
|
977
|
+
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <span class="keywordflow">return</span> SVFUtil::cast<ConstantStruct>(vtblStruct->getOperand(0));</div>
|
|
978
|
+
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  </div>
|
|
979
|
+
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <span class="keywordflow">return</span> vtblStruct;</div>
|
|
980
|
+
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> }</div>
|
|
981
|
+
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  </div>
|
|
982
|
+
<div class="line"><a name="l00976"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a08fbef6fe3e2af96a49f79ce23accb01"> 976</a></span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a08fbef6fe3e2af96a49f79ce23accb01">LLVMUtil::isValVtbl</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val)</div>
|
|
983
|
+
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> {</div>
|
|
984
|
+
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<GlobalVariable>(val))</div>
|
|
985
|
+
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
986
|
+
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> valName = val->getName().str();</div>
|
|
987
|
+
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  <span class="keywordflow">return</span> valName.compare(0, <a class="code" href="LLVMUtil_8cpp.html#a211c0223a37893d84fb5e2fd2f9fc76b">vtblLabelBeforeDemangle</a>.size(),</div>
|
|
988
|
+
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  <a class="code" href="LLVMUtil_8cpp.html#a211c0223a37893d84fb5e2fd2f9fc76b">vtblLabelBeforeDemangle</a>) == 0;</div>
|
|
991
989
|
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> }</div>
|
|
992
990
|
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  </div>
|
|
993
|
-
<div class="line"><a name="l00985"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#
|
|
991
|
+
<div class="line"><a name="l00985"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a45da980cb7c085942bb8e6010db9d84f"> 985</a></span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a45da980cb7c085942bb8e6010db9d84f">LLVMUtil::isLoadVtblInst</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* loadInst)</div>
|
|
994
992
|
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> {</div>
|
|
995
|
-
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  <
|
|
996
|
-
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <span class="
|
|
997
|
-
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> 
|
|
998
|
-
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  </div>
|
|
999
|
-
<div class="line"><a name="l00991"></a><span class="lineno"
|
|
1000
|
-
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> 
|
|
1001
|
-
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> 
|
|
1002
|
-
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  </div>
|
|
1003
|
-
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> 
|
|
1004
|
-
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> 
|
|
1005
|
-
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> 
|
|
1006
|
-
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> 
|
|
1007
|
-
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> 
|
|
1008
|
-
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> 
|
|
1009
|
-
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> 
|
|
1010
|
-
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> 
|
|
1011
|
-
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> 
|
|
1012
|
-
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  </div>
|
|
1013
|
-
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> 
|
|
1014
|
-
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> 
|
|
993
|
+
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* loadSrc = loadInst->getPointerOperand();</div>
|
|
994
|
+
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* valTy = loadSrc->getType();</div>
|
|
995
|
+
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = valTy;</div>
|
|
996
|
+
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < 3; ++i)</div>
|
|
997
|
+
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  {</div>
|
|
998
|
+
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  <span class="comment">// TODO: getPtrElementType to be removed</span></div>
|
|
999
|
+
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* ptrTy = SVFUtil::dyn_cast<PointerType>(elemTy))</div>
|
|
1000
|
+
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  elemTy = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">LLVMUtil::getPtrElementType</a>(ptrTy);</div>
|
|
1001
|
+
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  <span class="keywordflow">else</span></div>
|
|
1002
|
+
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
1003
|
+
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  }</div>
|
|
1004
|
+
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">FunctionType</a>* functy = SVFUtil::dyn_cast<FunctionType>(elemTy))</div>
|
|
1005
|
+
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  {</div>
|
|
1006
|
+
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* paramty = functy->getParamType(0);</div>
|
|
1007
|
+
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> className = <span class="stringliteral">""</span>;</div>
|
|
1008
|
+
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* ptrTy = SVFUtil::dyn_cast<PointerType>(paramty))</div>
|
|
1009
|
+
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  {</div>
|
|
1010
|
+
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  <span class="comment">// TODO: getPtrElementType need type inference</span></div>
|
|
1011
|
+
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</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>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(ptrTy)))</div>
|
|
1012
|
+
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  className = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a207fe02ded216fd0412fc894e13bee6e">LLVMUtil::getClassNameFromType</a>(st);</div>
|
|
1015
1013
|
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  }</div>
|
|
1016
|
-
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> 
|
|
1017
|
-
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> 
|
|
1018
|
-
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> 
|
|
1019
|
-
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> }</div>
|
|
1020
|
-
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> 
|
|
1021
|
-
<div class="line"><a name="l01013"></a><span class="lineno"
|
|
1022
|
-
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> 
|
|
1023
|
-
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> 
|
|
1024
|
-
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> 
|
|
1025
|
-
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> 
|
|
1026
|
-
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> 
|
|
1027
|
-
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> 
|
|
1028
|
-
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> 
|
|
1029
|
-
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> 
|
|
1030
|
-
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> 
|
|
1031
|
-
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> 
|
|
1032
|
-
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> 
|
|
1033
|
-
<div class="line"><a name="
|
|
1034
|
-
<div class="line"><a name="
|
|
1035
|
-
<div class="line"><a name="
|
|
1036
|
-
<div class="line"><a name="
|
|
1037
|
-
<div class="line"><a name="
|
|
1038
|
-
<div class="line"><a name="
|
|
1039
|
-
<div class="line"><a name="
|
|
1040
|
-
<div class="line"><a name="
|
|
1041
|
-
<div class="line"><a name="
|
|
1042
|
-
<div class="line"><a name="
|
|
1043
|
-
<div class="line"><a name="
|
|
1044
|
-
<div class="line"><a name="
|
|
1045
|
-
<div class="line"><a name="
|
|
1046
|
-
<div class="line"><a name="
|
|
1047
|
-
<div class="line"><a name="
|
|
1048
|
-
<div class="line"><a name="
|
|
1049
|
-
<div class="line"><a name="
|
|
1050
|
-
<div class="line"><a name="
|
|
1051
|
-
<div class="line"><a name="
|
|
1052
|
-
<div class="line"><a name="
|
|
1053
|
-
<div class="line"><a name="
|
|
1054
|
-
<div class="line"><a name="
|
|
1055
|
-
<div class="line"><a name="
|
|
1056
|
-
<div class="line"><a name="
|
|
1057
|
-
<div class="line"><a name="
|
|
1058
|
-
<div class="line"><a name="
|
|
1059
|
-
<div class="line"><a name="
|
|
1060
|
-
<div class="line"><a name="
|
|
1061
|
-
<div class="line"><a name="
|
|
1062
|
-
<div class="line"><a name="
|
|
1063
|
-
<div class="line"><a name="
|
|
1064
|
-
<div class="line"><a name="
|
|
1065
|
-
<div class="line"><a name="
|
|
1066
|
-
<div class="line"><a name="
|
|
1067
|
-
<div class="line"><a name="
|
|
1068
|
-
<div class="line"><a name="
|
|
1069
|
-
<div class="line"><a name="
|
|
1070
|
-
<div class="line"><a name="
|
|
1071
|
-
<div class="line"><a name="
|
|
1072
|
-
<div class="line"><a name="
|
|
1073
|
-
<div class="line"><a name="
|
|
1074
|
-
<div class="line"><a name="
|
|
1075
|
-
<div class="line"><a name="
|
|
1076
|
-
<div class="line"><a name="
|
|
1077
|
-
<div class="line"><a name="
|
|
1078
|
-
<div class="line"><a name="
|
|
1079
|
-
<div class="line"><a name="
|
|
1080
|
-
<div class="line"><a name="
|
|
1081
|
-
<div class="line"><a name="
|
|
1082
|
-
<div class="line"><a name="
|
|
1083
|
-
<div class="line"><a name="
|
|
1084
|
-
<div class="line"><a name="
|
|
1085
|
-
<div class="line"><a name="
|
|
1086
|
-
<div class="line"><a name="
|
|
1087
|
-
<div class="line"><a name="
|
|
1088
|
-
<div class="line"><a name="
|
|
1089
|
-
<div class="line"><a name="
|
|
1090
|
-
<div class="line"><a name="
|
|
1091
|
-
<div class="line"><a name="
|
|
1092
|
-
<div class="line"><a name="
|
|
1093
|
-
<div class="line"><a name="
|
|
1094
|
-
<div class="line"><a name="
|
|
1095
|
-
<div class="line"><a name="
|
|
1096
|
-
<div class="line"><a name="
|
|
1097
|
-
<div class="line"><a name="
|
|
1098
|
-
<div class="line"><a name="
|
|
1099
|
-
<div class="line"><a name="
|
|
1100
|
-
<div class="line"><a name="
|
|
1101
|
-
<div class="line"><a name="
|
|
1102
|
-
<div class="line"><a name="
|
|
1103
|
-
<div class="line"><a name="
|
|
1104
|
-
<div class="line"><a name="
|
|
1105
|
-
<div class="line"><a name="
|
|
1106
|
-
<div class="line"><a name="
|
|
1014
|
+
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  <span class="keywordflow">if</span> (className.size() > 0)</div>
|
|
1015
|
+
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  {</div>
|
|
1016
|
+
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
1017
|
+
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  }</div>
|
|
1018
|
+
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  }</div>
|
|
1019
|
+
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
1020
|
+
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> }</div>
|
|
1021
|
+
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  </div>
|
|
1022
|
+
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="comment">/*</span></div>
|
|
1023
|
+
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> <span class="comment"> * a virtual callsite follows the following instruction sequence pattern:</span></div>
|
|
1024
|
+
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="comment"> * %vtable = load this</span></div>
|
|
1025
|
+
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="comment"> * %vfn = getelementptr %vtable, idx</span></div>
|
|
1026
|
+
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> <span class="comment"> * %x = load %vfn</span></div>
|
|
1027
|
+
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="comment"> * call %x (this)</span></div>
|
|
1028
|
+
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="comment"> */</span></div>
|
|
1029
|
+
<div class="line"><a name="l01023"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#ab1b4c565ae6be788b934defc21a5cfaf"> 1023</a></span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab1b4c565ae6be788b934defc21a5cfaf">LLVMUtil::isVirtualCallSite</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
|
|
1030
|
+
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> {</div>
|
|
1031
|
+
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  <span class="comment">// the callsite must be an indirect one with at least one argument (this</span></div>
|
|
1032
|
+
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  <span class="comment">// ptr)</span></div>
|
|
1033
|
+
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  <span class="keywordflow">if</span> (cs->getCalledFunction() != <span class="keyword">nullptr</span> || cs->arg_empty())</div>
|
|
1034
|
+
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
1035
|
+
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  </div>
|
|
1036
|
+
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  <span class="comment">// the first argument (this pointer) must be a pointer type and must be a</span></div>
|
|
1037
|
+
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  <span class="comment">// class name</span></div>
|
|
1038
|
+
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  <span class="keywordflow">if</span> (cs->getArgOperand(0)->getType()->isPointerTy() == <span class="keyword">false</span>)</div>
|
|
1039
|
+
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
1040
|
+
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  </div>
|
|
1041
|
+
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vfunc = cs->getCalledOperand();</div>
|
|
1042
|
+
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* vfuncloadinst = SVFUtil::dyn_cast<LoadInst>(vfunc))</div>
|
|
1043
|
+
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  {</div>
|
|
1044
|
+
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vfuncptr = vfuncloadinst->getPointerOperand();</div>
|
|
1045
|
+
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* vfuncptrgepinst =</div>
|
|
1046
|
+
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  SVFUtil::dyn_cast<GetElementPtrInst>(vfuncptr))</div>
|
|
1047
|
+
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  {</div>
|
|
1048
|
+
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  <span class="keywordflow">if</span> (vfuncptrgepinst->getNumIndices() != 1)</div>
|
|
1049
|
+
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
1050
|
+
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vtbl = vfuncptrgepinst->getPointerOperand();</div>
|
|
1051
|
+
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadInst>(vtbl))</div>
|
|
1052
|
+
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  {</div>
|
|
1053
|
+
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
1054
|
+
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  }</div>
|
|
1055
|
+
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  }</div>
|
|
1056
|
+
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  }</div>
|
|
1057
|
+
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
1058
|
+
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> }</div>
|
|
1059
|
+
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  </div>
|
|
1060
|
+
<div class="line"><a name="l01054"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a47bbc0527ced570d576ccc2f9df409cb"> 1054</a></span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a47bbc0527ced570d576ccc2f9df409cb">LLVMUtil::isCPPThunkFunction</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
|
|
1061
|
+
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> {</div>
|
|
1062
|
+
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  <a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a745a2addadc136075d45c7fb8437af3e">cppUtil::demangle</a>(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>->getName().str());</div>
|
|
1063
|
+
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <span class="keywordflow">return</span> dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#af6117df8aec7f4c077058fa8f00b0243">isThunkFunc</a>;</div>
|
|
1064
|
+
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> }</div>
|
|
1065
|
+
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  </div>
|
|
1066
|
+
<div class="line"><a name="l01060"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#aab1cb59036d181e20a477bf1eebd81ff"> 1060</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aab1cb59036d181e20a477bf1eebd81ff">LLVMUtil::getThunkTarget</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
|
|
1067
|
+
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> {</div>
|
|
1068
|
+
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* ret = <span class="keyword">nullptr</span>;</div>
|
|
1069
|
+
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  </div>
|
|
1070
|
+
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>& bb : *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
|
|
1071
|
+
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  {</div>
|
|
1072
|
+
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span>& inst : bb)</div>
|
|
1073
|
+
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  {</div>
|
|
1074
|
+
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* callbase = SVFUtil::dyn_cast<CallBase>(&inst))</div>
|
|
1075
|
+
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  {</div>
|
|
1076
|
+
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  <span class="comment">// assert(cs.getCalledFunction() &&</span></div>
|
|
1077
|
+
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  <span class="comment">// "Indirect call detected in thunk func");</span></div>
|
|
1078
|
+
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  <span class="comment">// assert(ret == nullptr && "multiple callsites in thunk func");</span></div>
|
|
1079
|
+
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  </div>
|
|
1080
|
+
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  ret = callbase->getCalledFunction();</div>
|
|
1081
|
+
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  }</div>
|
|
1082
|
+
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  }</div>
|
|
1083
|
+
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  }</div>
|
|
1084
|
+
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  </div>
|
|
1085
|
+
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  <span class="keywordflow">return</span> ret;</div>
|
|
1086
|
+
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> }</div>
|
|
1087
|
+
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  </div>
|
|
1088
|
+
<div class="line"><a name="l01082"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a68e7bad8eb537039559d8ddc851032e0"> 1082</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a68e7bad8eb537039559d8ddc851032e0">LLVMUtil::getVCallThisPtr</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
|
|
1089
|
+
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> {</div>
|
|
1090
|
+
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  <span class="keywordflow">if</span> (cs->paramHasAttr(0, llvm::Attribute::StructRet))</div>
|
|
1091
|
+
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  {</div>
|
|
1092
|
+
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  <span class="keywordflow">return</span> cs->getArgOperand(1);</div>
|
|
1093
|
+
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  }</div>
|
|
1094
|
+
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  <span class="keywordflow">else</span></div>
|
|
1095
|
+
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  {</div>
|
|
1096
|
+
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  <span class="keywordflow">return</span> cs->getArgOperand(0);</div>
|
|
1097
|
+
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  }</div>
|
|
1098
|
+
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> }</div>
|
|
1099
|
+
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  </div>
|
|
1100
|
+
<div class="line"><a name="l01108"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a8873eb1cce9496f9699eab22c4a6d3ce"> 1108</a></span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8873eb1cce9496f9699eab22c4a6d3ce">LLVMUtil::isSameThisPtrInConstructor</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* thisPtr1,</div>
|
|
1101
|
+
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* thisPtr2)</div>
|
|
1102
|
+
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> {</div>
|
|
1103
|
+
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  <span class="keywordflow">if</span> (thisPtr1 == thisPtr2)</div>
|
|
1104
|
+
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
1105
|
+
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* thisU : thisPtr1->users())</div>
|
|
1107
1106
|
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  {</div>
|
|
1108
|
-
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  <span class="keywordflow">
|
|
1109
|
-
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> 
|
|
1110
|
-
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> 
|
|
1111
|
-
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> 
|
|
1112
|
-
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> 
|
|
1113
|
-
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> 
|
|
1114
|
-
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> 
|
|
1115
|
-
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> 
|
|
1116
|
-
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> 
|
|
1117
|
-
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> 
|
|
1118
|
-
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> 
|
|
1119
|
-
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> 
|
|
1120
|
-
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> 
|
|
1107
|
+
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a>* store = SVFUtil::dyn_cast<StoreInst>(thisU))</div>
|
|
1108
|
+
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  {</div>
|
|
1109
|
+
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* storeU : store->getPointerOperand()->users())</div>
|
|
1110
|
+
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  {</div>
|
|
1111
|
+
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* load = SVFUtil::dyn_cast<LoadInst>(storeU))</div>
|
|
1112
|
+
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  {</div>
|
|
1113
|
+
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  <span class="keywordflow">if</span> (load->getNextNode() &&</div>
|
|
1114
|
+
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  SVFUtil::isa<CastInst>(load->getNextNode()))</div>
|
|
1115
|
+
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  <span class="keywordflow">return</span> SVFUtil::cast<CastInst>(load->getNextNode()) ==</div>
|
|
1116
|
+
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  (thisPtr2->stripPointerCasts());</div>
|
|
1117
|
+
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  }</div>
|
|
1118
|
+
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  }</div>
|
|
1119
|
+
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  }</div>
|
|
1121
1120
|
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  }</div>
|
|
1122
|
-
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  <span class="keywordflow">return</span>
|
|
1123
|
-
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> 
|
|
1124
|
-
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> 
|
|
1125
|
-
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> 
|
|
1126
|
-
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> 
|
|
1127
|
-
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  </div>
|
|
1128
|
-
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> 
|
|
1129
|
-
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> 
|
|
1130
|
-
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> 
|
|
1131
|
-
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> 
|
|
1132
|
-
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> 
|
|
1133
|
-
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> 
|
|
1134
|
-
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> <span class="
|
|
1135
|
-
<div class="line"><a name="l01142"></a><span class="lineno"
|
|
1136
|
-
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> 
|
|
1137
|
-
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> 
|
|
1138
|
-
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> 
|
|
1139
|
-
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> 
|
|
1140
|
-
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> 
|
|
1141
|
-
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> 
|
|
1142
|
-
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> 
|
|
1143
|
-
<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> 
|
|
1144
|
-
<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  <span class="
|
|
1145
|
-
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> 
|
|
1146
|
-
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> 
|
|
1147
|
-
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> 
|
|
1148
|
-
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> 
|
|
1149
|
-
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> 
|
|
1150
|
-
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> 
|
|
1151
|
-
<div class="line"><a name="l01158"></a><span class="lineno"
|
|
1152
|
-
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> {</div>
|
|
1153
|
-
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> 
|
|
1154
|
-
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> 
|
|
1155
|
-
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <span class="keywordflow">
|
|
1121
|
+
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
1122
|
+
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> }</div>
|
|
1123
|
+
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  </div>
|
|
1124
|
+
<div class="line"><a name="l01132"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#addcfb0135655706a86f6cc628475fccf"> 1132</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* <a class="code" href="namespaceSVF_1_1LLVMUtil.html#addcfb0135655706a86f6cc628475fccf">LLVMUtil::getConstructorThisPtr</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun)</div>
|
|
1125
|
+
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> {</div>
|
|
1126
|
+
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  assert((<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6dd1590b82d2bd86766886bd21bc2b72">LLVMUtil::isConstructor</a>(fun) || <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a206973624fcc58e6044c884dba23a754">LLVMUtil::isDestructor</a>(fun)) &&</div>
|
|
1127
|
+
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <span class="stringliteral">"not a constructor?"</span>);</div>
|
|
1128
|
+
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  assert(fun->arg_size() >= 1 && <span class="stringliteral">"argument size >= 1?"</span>);</div>
|
|
1129
|
+
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* thisPtr = &*(fun->arg_begin());</div>
|
|
1130
|
+
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  <span class="keywordflow">return</span> thisPtr;</div>
|
|
1131
|
+
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> }</div>
|
|
1132
|
+
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  </div>
|
|
1133
|
+
<div class="line"><a name="l01141"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a6dd1590b82d2bd86766886bd21bc2b72"> 1141</a></span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6dd1590b82d2bd86766886bd21bc2b72">LLVMUtil::isConstructor</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
|
|
1134
|
+
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> {</div>
|
|
1135
|
+
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>->isDeclaration())</div>
|
|
1136
|
+
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
1137
|
+
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funcName = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>->getName().str();</div>
|
|
1138
|
+
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  <span class="keywordflow">if</span> (funcName.compare(0, <a class="code" href="LLVMUtil_8cpp.html#aff4f7c7a9aacf05a3a3c42ae24ea7d96">vfunPreLabel</a>.size(), <a class="code" href="LLVMUtil_8cpp.html#aff4f7c7a9aacf05a3a3c42ae24ea7d96">vfunPreLabel</a>) != 0)</div>
|
|
1139
|
+
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  {</div>
|
|
1140
|
+
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
1141
|
+
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  }</div>
|
|
1142
|
+
<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  <span class="keyword">struct </span><a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a745a2addadc136075d45c7fb8437af3e">cppUtil::demangle</a>(funcName.c_str());</div>
|
|
1143
|
+
<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  <span class="keywordflow">if</span> (dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.size() == 0)</div>
|
|
1144
|
+
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  {</div>
|
|
1145
|
+
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
1146
|
+
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  }</div>
|
|
1147
|
+
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>  dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>);</div>
|
|
1148
|
+
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>);</div>
|
|
1149
|
+
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  <span class="keywordtype">size_t</span> colon = dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.rfind(<span class="stringliteral">"::"</span>);</div>
|
|
1150
|
+
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  <span class="keywordflow">if</span> (colon == std::string::npos)</div>
|
|
1151
|
+
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  {</div>
|
|
1152
|
+
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>);</div>
|
|
1153
|
+
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  }</div>
|
|
1154
|
+
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <span class="keywordflow">else</span></div>
|
|
1156
1155
|
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  {</div>
|
|
1157
|
-
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> 
|
|
1158
|
-
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> 
|
|
1159
|
-
<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> 
|
|
1160
|
-
<div class="line"><a name="
|
|
1161
|
-
<div class="line"><a name="
|
|
1162
|
-
<div class="line"><a name="
|
|
1163
|
-
<div class="line"><a name="
|
|
1164
|
-
<div class="line"><a name="
|
|
1165
|
-
<div class="line"><a name="
|
|
1166
|
-
<div class="line"><a name="
|
|
1167
|
-
<div class="line"><a name="
|
|
1168
|
-
<div class="line"><a name="
|
|
1169
|
-
<div class="line"><a name="
|
|
1170
|
-
<div class="line"><a name="
|
|
1171
|
-
<div class="line"><a name="
|
|
1172
|
-
<div class="line"><a name="
|
|
1173
|
-
<div class="line"><a name="
|
|
1174
|
-
<div class="line"><a name="
|
|
1175
|
-
<div class="line"><a name="
|
|
1176
|
-
<div class="line"><a name="
|
|
1177
|
-
<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  }</div>
|
|
1156
|
+
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> =</div>
|
|
1157
|
+
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>  <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.substr(colon + 2));</div>
|
|
1158
|
+
<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  }</div>
|
|
1159
|
+
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>  <span class="keywordflow">return</span> dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.size() > 0 &&</div>
|
|
1160
|
+
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.compare(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>) == 0;</div>
|
|
1161
|
+
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> }</div>
|
|
1162
|
+
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>  </div>
|
|
1163
|
+
<div class="line"><a name="l01172"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a206973624fcc58e6044c884dba23a754"> 1172</a></span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a206973624fcc58e6044c884dba23a754">LLVMUtil::isDestructor</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
|
|
1164
|
+
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> {</div>
|
|
1165
|
+
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>->isDeclaration())</div>
|
|
1166
|
+
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
1167
|
+
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funcName = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>->getName().str();</div>
|
|
1168
|
+
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  <span class="keywordflow">if</span> (funcName.compare(0, <a class="code" href="LLVMUtil_8cpp.html#aff4f7c7a9aacf05a3a3c42ae24ea7d96">vfunPreLabel</a>.size(), <a class="code" href="LLVMUtil_8cpp.html#aff4f7c7a9aacf05a3a3c42ae24ea7d96">vfunPreLabel</a>) != 0)</div>
|
|
1169
|
+
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  {</div>
|
|
1170
|
+
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
1171
|
+
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  }</div>
|
|
1172
|
+
<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  <span class="keyword">struct </span><a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a745a2addadc136075d45c7fb8437af3e">cppUtil::demangle</a>(funcName.c_str());</div>
|
|
1173
|
+
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  <span class="keywordflow">if</span> (dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.size() == 0)</div>
|
|
1174
|
+
<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>  {</div>
|
|
1175
|
+
<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
1178
1176
|
<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  }</div>
|
|
1179
|
-
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  <
|
|
1180
|
-
<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> 
|
|
1181
|
-
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  </div>
|
|
1182
|
-
<div class="line"><a name="l01189"></a><span class="lineno"
|
|
1183
|
-
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> {</div>
|
|
1184
|
-
<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> 
|
|
1185
|
-
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> 
|
|
1186
|
-
<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> 
|
|
1187
|
-
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> 
|
|
1188
|
-
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> 
|
|
1189
|
-
<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> 
|
|
1190
|
-
<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> 
|
|
1191
|
-
<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> 
|
|
1192
|
-
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> 
|
|
1193
|
-
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> 
|
|
1194
|
-
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> 
|
|
1195
|
-
<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> 
|
|
1196
|
-
<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> 
|
|
1197
|
-
<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> 
|
|
1198
|
-
<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> 
|
|
1199
|
-
<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> 
|
|
1200
|
-
<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> 
|
|
1201
|
-
<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> 
|
|
1202
|
-
<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> 
|
|
1203
|
-
<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> 
|
|
1204
|
-
<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> 
|
|
1205
|
-
<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> 
|
|
1206
|
-
<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> 
|
|
1207
|
-
<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> 
|
|
1208
|
-
<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  <span class="
|
|
1209
|
-
<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> 
|
|
1210
|
-
<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>  </div>
|
|
1211
|
-
<div class="line"><a name="l01218"></a><span class="lineno"
|
|
1212
|
-
<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> 
|
|
1213
|
-
<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  <a class="code" href="
|
|
1214
|
-
<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>  <span class="keywordflow">
|
|
1215
|
-
<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> 
|
|
1216
|
-
<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> 
|
|
1217
|
-
<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> 
|
|
1218
|
-
<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> 
|
|
1219
|
-
<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> 
|
|
1220
|
-
<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> 
|
|
1221
|
-
<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> 
|
|
1222
|
-
<div class="line"><a name="l01229"></a><span class="lineno"
|
|
1223
|
-
<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> 
|
|
1224
|
-
<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>  <span class="
|
|
1225
|
-
<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> 
|
|
1226
|
-
<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> 
|
|
1227
|
-
<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> 
|
|
1228
|
-
<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> 
|
|
1229
|
-
<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> 
|
|
1230
|
-
<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> 
|
|
1231
|
-
<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> 
|
|
1232
|
-
<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> 
|
|
1233
|
-
<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> 
|
|
1234
|
-
<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> 
|
|
1235
|
-
<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> 
|
|
1236
|
-
<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> 
|
|
1237
|
-
<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> 
|
|
1238
|
-
<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> 
|
|
1239
|
-
<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> 
|
|
1240
|
-
<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> 
|
|
1241
|
-
<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> 
|
|
1242
|
-
<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> 
|
|
1243
|
-
<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> 
|
|
1244
|
-
<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> 
|
|
1245
|
-
<div class="line"><a name="l01252"></a><span class="lineno"
|
|
1246
|
-
<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> 
|
|
1247
|
-
<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> 
|
|
1248
|
-
<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> 
|
|
1249
|
-
<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> 
|
|
1250
|
-
<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> 
|
|
1251
|
-
<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> 
|
|
1252
|
-
<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> 
|
|
1253
|
-
<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> 
|
|
1254
|
-
<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>  </div>
|
|
1255
|
-
<div class="line"><a name="l01262"></a><span class="lineno"
|
|
1256
|
-
<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> 
|
|
1257
|
-
<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> 
|
|
1258
|
-
<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> 
|
|
1259
|
-
<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  <
|
|
1260
|
-
<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> 
|
|
1261
|
-
<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> 
|
|
1262
|
-
<div class="line"><a name="
|
|
1263
|
-
<div class="line"><a name="
|
|
1264
|
-
<div class="line"><a name="
|
|
1265
|
-
<div class="line"><a name="
|
|
1266
|
-
<div class="line"><a name="
|
|
1267
|
-
<div class="line"><a name="
|
|
1268
|
-
<div class="line"><a name="
|
|
1269
|
-
<div class="line"><a name="
|
|
1270
|
-
<div class="line"><a name="
|
|
1177
|
+
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>);</div>
|
|
1178
|
+
<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>);</div>
|
|
1179
|
+
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  <span class="keywordtype">size_t</span> colon = dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.rfind(<span class="stringliteral">"::"</span>);</div>
|
|
1180
|
+
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>  <span class="keywordflow">if</span> (colon == std::string::npos)</div>
|
|
1181
|
+
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>  {</div>
|
|
1182
|
+
<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>  dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>);</div>
|
|
1183
|
+
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  }</div>
|
|
1184
|
+
<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  <span class="keywordflow">else</span></div>
|
|
1185
|
+
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>  {</div>
|
|
1186
|
+
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> =</div>
|
|
1187
|
+
<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.substr(colon + 2));</div>
|
|
1188
|
+
<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  }</div>
|
|
1189
|
+
<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  <span class="keywordflow">return</span> (dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.size() > 0 && dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>.size() > 0 &&</div>
|
|
1190
|
+
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.size() + 1 == dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>.size() &&</div>
|
|
1191
|
+
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>.compare(0, 1, <span class="stringliteral">"~"</span>) == 0 &&</div>
|
|
1192
|
+
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.compare(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>.substr(1)) == 0);</div>
|
|
1193
|
+
<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> }</div>
|
|
1194
|
+
<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  </div>
|
|
1195
|
+
<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="comment">/*</span></div>
|
|
1196
|
+
<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="comment"> * get the ptr "vtable" for a given virtual callsite:</span></div>
|
|
1197
|
+
<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="comment"> * %vtable = load ...</span></div>
|
|
1198
|
+
<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="comment"> * %vfn = getelementptr %vtable, idx</span></div>
|
|
1199
|
+
<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="comment"> * %x = load %vfn</span></div>
|
|
1200
|
+
<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> <span class="comment"> * call %x (...)</span></div>
|
|
1201
|
+
<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="comment"> */</span></div>
|
|
1202
|
+
<div class="line"><a name="l01211"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a3a23aa54459a068e16c96e5b5eb72f77"> 1211</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a3a23aa54459a068e16c96e5b5eb72f77">LLVMUtil::getVCallVtblPtr</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
|
|
1203
|
+
<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> {</div>
|
|
1204
|
+
<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* loadInst =</div>
|
|
1205
|
+
<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>  SVFUtil::dyn_cast<LoadInst>(cs->getCalledOperand());</div>
|
|
1206
|
+
<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  assert(loadInst != <span class="keyword">nullptr</span>);</div>
|
|
1207
|
+
<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vfuncptr = loadInst->getPointerOperand();</div>
|
|
1208
|
+
<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gepInst =</div>
|
|
1209
|
+
<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  SVFUtil::dyn_cast<GetElementPtrInst>(vfuncptr);</div>
|
|
1210
|
+
<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  assert(gepInst != <span class="keyword">nullptr</span>);</div>
|
|
1211
|
+
<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vtbl = gepInst->getPointerOperand();</div>
|
|
1212
|
+
<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>  <span class="keywordflow">return</span> vtbl;</div>
|
|
1213
|
+
<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> }</div>
|
|
1214
|
+
<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>  </div>
|
|
1215
|
+
<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="comment">/*</span></div>
|
|
1216
|
+
<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="comment"> * Is this virtual call inside its own constructor or destructor?</span></div>
|
|
1217
|
+
<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> <span class="comment"> */</span></div>
|
|
1218
|
+
<div class="line"><a name="l01227"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a898e9c2ed163b618f2e86bc251131d8b"> 1227</a></span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a898e9c2ed163b618f2e86bc251131d8b">LLVMUtil::VCallInCtorOrDtor</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
|
|
1219
|
+
<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> {</div>
|
|
1220
|
+
<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> classNameOfThisPtr = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aa841a295ec803b6a1f2bd248f63f863f">LLVMUtil::getClassNameOfThisPtr</a>(cs);</div>
|
|
1221
|
+
<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = cs->getCaller();</div>
|
|
1222
|
+
<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6dd1590b82d2bd86766886bd21bc2b72">LLVMUtil::isConstructor</a>(func) || <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a206973624fcc58e6044c884dba23a754">LLVMUtil::isDestructor</a>(func))</div>
|
|
1223
|
+
<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>  {</div>
|
|
1224
|
+
<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>  <a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a745a2addadc136075d45c7fb8437af3e">cppUtil::demangle</a>(func->getName().str());</div>
|
|
1225
|
+
<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>  <span class="keywordflow">if</span> (classNameOfThisPtr.compare(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>) == 0)</div>
|
|
1226
|
+
<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
1227
|
+
<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  }</div>
|
|
1228
|
+
<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
1229
|
+
<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> }</div>
|
|
1230
|
+
<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  </div>
|
|
1231
|
+
<div class="line"><a name="l01240"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a207fe02ded216fd0412fc894e13bee6e"> 1240</a></span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a207fe02ded216fd0412fc894e13bee6e">LLVMUtil::getClassNameFromType</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a>* ty)</div>
|
|
1232
|
+
<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> {</div>
|
|
1233
|
+
<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> className = <span class="stringliteral">""</span>;</div>
|
|
1234
|
+
<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  <span class="keywordflow">if</span> (!((SVFUtil::cast<StructType>(ty))->isLiteral()))</div>
|
|
1235
|
+
<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>  {</div>
|
|
1236
|
+
<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> elemTypeName = ty->getStructName().str();</div>
|
|
1237
|
+
<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  <span class="keywordflow">if</span> (elemTypeName.compare(0, <a class="code" href="LLVMUtil_8cpp.html#a5f8da60b0fcc28445f508f4e42513a82">clsName</a>.size(), <a class="code" href="LLVMUtil_8cpp.html#a5f8da60b0fcc28445f508f4e42513a82">clsName</a>) == 0)</div>
|
|
1238
|
+
<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  {</div>
|
|
1239
|
+
<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  className = elemTypeName.substr(<a class="code" href="LLVMUtil_8cpp.html#a5f8da60b0fcc28445f508f4e42513a82">clsName</a>.size());</div>
|
|
1240
|
+
<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  }</div>
|
|
1241
|
+
<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemTypeName.compare(0, <a class="code" href="LLVMUtil_8cpp.html#a61c158146c07e77234eb4a2f9b940821">structName</a>.size(), <a class="code" href="LLVMUtil_8cpp.html#a61c158146c07e77234eb4a2f9b940821">structName</a>) == 0)</div>
|
|
1242
|
+
<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  {</div>
|
|
1243
|
+
<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>  className = elemTypeName.substr(<a class="code" href="LLVMUtil_8cpp.html#a61c158146c07e77234eb4a2f9b940821">structName</a>.size());</div>
|
|
1244
|
+
<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>  }</div>
|
|
1245
|
+
<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>  }</div>
|
|
1246
|
+
<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  <span class="keywordflow">return</span> className;</div>
|
|
1247
|
+
<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> }</div>
|
|
1248
|
+
<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  </div>
|
|
1249
|
+
<div class="line"><a name="l01258"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#aa841a295ec803b6a1f2bd248f63f863f"> 1258</a></span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aa841a295ec803b6a1f2bd248f63f863f">LLVMUtil::getClassNameOfThisPtr</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* inst)</div>
|
|
1250
|
+
<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> {</div>
|
|
1251
|
+
<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> thisPtrClassName = <span class="stringliteral">""</span>;</div>
|
|
1252
|
+
<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a>* N = inst->getMetadata(<span class="stringliteral">"VCallPtrType"</span>))</div>
|
|
1253
|
+
<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>  {</div>
|
|
1254
|
+
<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a28eec26ec8edaa5e96aecfeb01f6c0d4">MDString</a>* mdstr = SVFUtil::cast<MDString>(N->getOperand(0).get());</div>
|
|
1255
|
+
<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>  thisPtrClassName = mdstr->getString().str();</div>
|
|
1256
|
+
<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>  }</div>
|
|
1257
|
+
<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  <span class="keywordflow">if</span> (thisPtrClassName.size() == 0)</div>
|
|
1258
|
+
<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>  {</div>
|
|
1259
|
+
<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* thisPtr = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a68e7bad8eb537039559d8ddc851032e0">LLVMUtil::getVCallThisPtr</a>(inst);</div>
|
|
1260
|
+
<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* ptrTy = SVFUtil::dyn_cast<PointerType>(thisPtr->getType()))</div>
|
|
1261
|
+
<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>  <span class="comment">// TODO: getPtrElementType need type inference</span></div>
|
|
1262
|
+
<div class="line"><a name="l01271"></a><span class="lineno"> 1271</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>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(ptrTy)))</div>
|
|
1263
|
+
<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>  thisPtrClassName = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a207fe02ded216fd0412fc894e13bee6e">getClassNameFromType</a>(st);</div>
|
|
1264
|
+
<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>  }</div>
|
|
1265
|
+
<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>  </div>
|
|
1266
|
+
<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>  <span class="keywordtype">size_t</span> found = thisPtrClassName.find_last_not_of(<span class="stringliteral">"0123456789"</span>);</div>
|
|
1267
|
+
<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>  <span class="keywordflow">if</span> (found != std::string::npos)</div>
|
|
1268
|
+
<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>  {</div>
|
|
1269
|
+
<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>  <span class="keywordflow">if</span> (found != thisPtrClassName.size() - 1 &&</div>
|
|
1270
|
+
<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  thisPtrClassName[found] == <span class="charliteral">'.'</span>)</div>
|
|
1271
1271
|
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  {</div>
|
|
1272
|
-
<div class="line"><a name="
|
|
1273
|
-
<div class="line"><a name="
|
|
1274
|
-
<div class="line"><a name="
|
|
1275
|
-
<div class="line"><a name="
|
|
1276
|
-
<div class="line"><a name="
|
|
1277
|
-
<div class="line"><a name="
|
|
1278
|
-
<div class="line"><a name="
|
|
1279
|
-
<div class="line"><a name="
|
|
1280
|
-
<div class="line"><a name="
|
|
1281
|
-
<div class="line"><a name="
|
|
1282
|
-
<div class="line"><a name="
|
|
1283
|
-
<div class="line"><a name="
|
|
1284
|
-
<div class="line"><a name="
|
|
1285
|
-
<div class="line"><a name="
|
|
1286
|
-
<div class="line"><a name="
|
|
1287
|
-
<div class="line"><a name="
|
|
1288
|
-
<div class="line"><a name="
|
|
1289
|
-
<div class="line"><a name="
|
|
1290
|
-
<div class="line"><a name="
|
|
1291
|
-
<div class="line"><a name="
|
|
1292
|
-
<div class="line"><a name="
|
|
1293
|
-
<div class="line"><a name="
|
|
1294
|
-
<div class="line"><a name="
|
|
1295
|
-
<div class="line"><a name="
|
|
1296
|
-
<div class="line"><a name="
|
|
1297
|
-
<div class="line"><a name="
|
|
1298
|
-
<div class="line"><a name="
|
|
1299
|
-
<div class="line"><a name="
|
|
1300
|
-
<div class="line"><a name="
|
|
1301
|
-
<div class="line"><a name="
|
|
1302
|
-
<div class="line"><a name="
|
|
1303
|
-
<div class="line"><a name="
|
|
1304
|
-
<div class="line"><a name="
|
|
1305
|
-
<div class="line"><a name="
|
|
1306
|
-
<div class="line"><a name="
|
|
1307
|
-
<div class="line"><a name="
|
|
1308
|
-
<div class="line"><a name="
|
|
1309
|
-
<div class="line"><a name="
|
|
1310
|
-
<div class="line"><a name="
|
|
1311
|
-
<div class="line"><a name="
|
|
1312
|
-
<div class="line"><a name="
|
|
1313
|
-
<div class="line"><a name="
|
|
1314
|
-
<div class="line"><a name="
|
|
1315
|
-
<div class="line"><a name="
|
|
1316
|
-
<div class="line"><a name="
|
|
1317
|
-
<div class="line"><a name="
|
|
1318
|
-
<div class="line"><a name="
|
|
1319
|
-
<div class="line"><a name="
|
|
1320
|
-
<div class="line"><a name="
|
|
1321
|
-
<div class="line"><a name="
|
|
1322
|
-
<div class="line"><a name="
|
|
1323
|
-
<div class="line"><a name="
|
|
1324
|
-
<div class="line"><a name="
|
|
1325
|
-
<div class="line"><a name="
|
|
1326
|
-
<div class="line"><a name="
|
|
1327
|
-
<div class="line"><a name="
|
|
1328
|
-
<div class="line"><a name="
|
|
1272
|
+
<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  <span class="keywordflow">return</span> thisPtrClassName.substr(0, found);</div>
|
|
1273
|
+
<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  }</div>
|
|
1274
|
+
<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  }</div>
|
|
1275
|
+
<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  </div>
|
|
1276
|
+
<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  <span class="keywordflow">return</span> thisPtrClassName;</div>
|
|
1277
|
+
<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> }</div>
|
|
1278
|
+
<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  </div>
|
|
1279
|
+
<div class="line"><a name="l01288"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a41e64f3318e2bf368eebe9a104ef6ad9"> 1288</a></span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a41e64f3318e2bf368eebe9a104ef6ad9">LLVMUtil::getFunNameOfVCallSite</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* inst)</div>
|
|
1280
|
+
<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> {</div>
|
|
1281
|
+
<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funName;</div>
|
|
1282
|
+
<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a>* N = inst->getMetadata(<span class="stringliteral">"VCallFunName"</span>))</div>
|
|
1283
|
+
<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>  {</div>
|
|
1284
|
+
<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a28eec26ec8edaa5e96aecfeb01f6c0d4">MDString</a>* mdstr = SVFUtil::cast<MDString>(N->getOperand(0).get());</div>
|
|
1285
|
+
<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>  funName = mdstr->getString().str();</div>
|
|
1286
|
+
<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>  }</div>
|
|
1287
|
+
<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  <span class="keywordflow">return</span> funName;</div>
|
|
1288
|
+
<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> }</div>
|
|
1289
|
+
<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>  </div>
|
|
1290
|
+
<div class="line"><a name="l01299"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a718c8ec79f36cef5df2f4530541f2770"> 1299</a></span> <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a718c8ec79f36cef5df2f4530541f2770">LLVMUtil::getVCallIdx</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
|
|
1291
|
+
<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> {</div>
|
|
1292
|
+
<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* vfuncloadinst =</div>
|
|
1293
|
+
<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>  SVFUtil::dyn_cast<LoadInst>(cs->getCalledOperand());</div>
|
|
1294
|
+
<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>  assert(vfuncloadinst != <span class="keyword">nullptr</span>);</div>
|
|
1295
|
+
<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vfuncptr = vfuncloadinst->getPointerOperand();</div>
|
|
1296
|
+
<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* vfuncptrgepinst =</div>
|
|
1297
|
+
<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>  SVFUtil::dyn_cast<GetElementPtrInst>(vfuncptr);</div>
|
|
1298
|
+
<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>  User::const_op_iterator oi = vfuncptrgepinst->idx_begin();</div>
|
|
1299
|
+
<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* idx = SVFUtil::dyn_cast<ConstantInt>(oi->get());</div>
|
|
1300
|
+
<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>  <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> idx_value;</div>
|
|
1301
|
+
<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  <span class="keywordflow">if</span> (idx == <span class="keyword">nullptr</span>)</div>
|
|
1302
|
+
<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  {</div>
|
|
1303
|
+
<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() << <span class="stringliteral">"vcall gep idx not constantint\n"</span>;</div>
|
|
1304
|
+
<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>  idx_value = 0;</div>
|
|
1305
|
+
<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>  }</div>
|
|
1306
|
+
<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>  <span class="keywordflow">else</span></div>
|
|
1307
|
+
<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  {</div>
|
|
1308
|
+
<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>  idx_value = (<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)idx->getSExtValue();</div>
|
|
1309
|
+
<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>  }</div>
|
|
1310
|
+
<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>  <span class="keywordflow">return</span> idx_value;</div>
|
|
1311
|
+
<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> }</div>
|
|
1312
|
+
<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>  </div>
|
|
1313
|
+
<div class="line"><a name="l01322"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a9001722dd27bf487351725c3d7b65f2f"> 1322</a></span> <span class="keywordtype">void</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a9001722dd27bf487351725c3d7b65f2f">LLVMUtil::getSuccBBandCondValPairVec</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a412280b134578905248ce0122c5db7c9">SwitchInst</a> &switchInst, <a class="code" href="namespaceSVF.html#a8de26e1810ea0c3b1e8ad62f1c8a864d">SuccBBAndCondValPairVec</a> &vec)</div>
|
|
1314
|
+
<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> {</div>
|
|
1315
|
+
<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>  <span class="comment">// get default successor basic block and default case value (nullptr)</span></div>
|
|
1316
|
+
<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>  vec.push_back({switchInst.getDefaultDest(), <span class="keyword">nullptr</span>});</div>
|
|
1317
|
+
<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>  </div>
|
|
1318
|
+
<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>  <span class="comment">// get normal case value and it's successor basic block</span></div>
|
|
1319
|
+
<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>& cs : switchInst.cases())</div>
|
|
1320
|
+
<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>  vec.push_back({cs.getCaseSuccessor(), cs.getCaseValue()});</div>
|
|
1321
|
+
<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> }</div>
|
|
1322
|
+
<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>  </div>
|
|
1323
|
+
<div class="line"><a name="l01332"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a33e8378ae1a911169394e545a4ba2220"> 1332</a></span> <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a33e8378ae1a911169394e545a4ba2220">LLVMUtil::getCaseValue</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a412280b134578905248ce0122c5db7c9">SwitchInst</a> &switchInst, <a class="code" href="namespaceSVF.html#a255efa5be786996cbdd0c1f3d98b8400">SuccBBAndCondValPair</a> &succBB2CondVal)</div>
|
|
1324
|
+
<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> {</div>
|
|
1325
|
+
<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* succBB = succBB2CondVal.first;</div>
|
|
1326
|
+
<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* caseValue = succBB2CondVal.second;</div>
|
|
1327
|
+
<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>  <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> val;</div>
|
|
1328
|
+
<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>  <span class="keywordflow">if</span> (caseValue == <span class="keyword">nullptr</span> || succBB == switchInst.getDefaultDest())</div>
|
|
1329
|
+
<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>  {</div>
|
|
1330
|
+
<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>  val = -1;</div>
|
|
1331
|
+
<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>  }</div>
|
|
1332
|
+
<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>  <span class="keywordflow">else</span></div>
|
|
1333
|
+
<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>  {</div>
|
|
1334
|
+
<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  <span class="keywordflow">if</span> (caseValue->getBitWidth() <= 64)</div>
|
|
1335
|
+
<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>  {</div>
|
|
1336
|
+
<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>  val = caseValue->getSExtValue();</div>
|
|
1337
|
+
<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>  }</div>
|
|
1338
|
+
<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>  <span class="keywordflow">else</span></div>
|
|
1339
|
+
<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  {</div>
|
|
1340
|
+
<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>  val = -1;</div>
|
|
1341
|
+
<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>  }</div>
|
|
1342
|
+
<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>  }</div>
|
|
1343
|
+
<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>  <span class="keywordflow">return</span> val;</div>
|
|
1344
|
+
<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> }</div>
|
|
1345
|
+
<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>  </div>
|
|
1346
|
+
<div class="line"><a name="l01359"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#afa2f8c8ab19c75547c26ede53b9f6159"> 1359</a></span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afa2f8c8ab19c75547c26ede53b9f6159">LLVMUtil::dumpValue</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val)</div>
|
|
1347
|
+
<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> {</div>
|
|
1348
|
+
<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div>
|
|
1349
|
+
<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>  llvm::raw_string_ostream rawstr(str);</div>
|
|
1350
|
+
<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>  <span class="keywordflow">if</span> (val)</div>
|
|
1351
|
+
<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>  rawstr << <span class="stringliteral">" "</span> << *val << <span class="stringliteral">" "</span>;</div>
|
|
1352
|
+
<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>  <span class="keywordflow">else</span></div>
|
|
1353
|
+
<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>  rawstr << <span class="stringliteral">" llvm Value is null"</span>;</div>
|
|
1354
|
+
<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>  <span class="keywordflow">return</span> rawstr.str();</div>
|
|
1355
|
+
<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> }</div>
|
|
1356
|
+
<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>  </div>
|
|
1357
|
+
<div class="line"><a name="l01370"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9"> 1370</a></span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">LLVMUtil::dumpType</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</div>
|
|
1358
|
+
<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> {</div>
|
|
1359
|
+
<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div>
|
|
1360
|
+
<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>  llvm::raw_string_ostream rawstr(str);</div>
|
|
1361
|
+
<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>  <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</div>
|
|
1362
|
+
<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>  rawstr << <span class="stringliteral">" "</span> << *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> << <span class="stringliteral">" "</span>;</div>
|
|
1363
|
+
<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>  <span class="keywordflow">else</span></div>
|
|
1364
|
+
<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>  rawstr << <span class="stringliteral">" llvm type is null"</span>;</div>
|
|
1365
|
+
<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>  <span class="keywordflow">return</span> rawstr.str();</div>
|
|
1366
|
+
<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> }</div>
|
|
1367
|
+
<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>  </div>
|
|
1368
|
+
<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>  </div>
|
|
1369
|
+
<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div>
|
|
1370
|
+
<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> {</div>
|
|
1371
|
+
<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>  </div>
|
|
1372
|
+
<div class="line"><a name="l01385"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3"> 1385</a></span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">SVFValue::toString</a>()<span class="keyword"> const</span></div>
|
|
1373
|
+
<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="keyword"></span>{</div>
|
|
1374
|
+
<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div>
|
|
1375
|
+
<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>  llvm::raw_string_ostream rawstr(str);</div>
|
|
1376
|
+
<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a>* fun = SVFUtil::dyn_cast<SVFFunction>(<span class="keyword">this</span>))</div>
|
|
1377
|
+
<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>  {</div>
|
|
1378
|
+
<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>  rawstr << <span class="stringliteral">"Function: "</span> << fun->getName() << <span class="stringliteral">" "</span>;</div>
|
|
1379
|
+
<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>  }</div>
|
|
1380
|
+
<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* bb = SVFUtil::dyn_cast<SVFBasicBlock>(<span class="keyword">this</span>))</div>
|
|
1381
|
+
<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>  {</div>
|
|
1382
|
+
<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>  rawstr << <span class="stringliteral">"BasicBlock: "</span> << bb->getName() << <span class="stringliteral">" "</span>;</div>
|
|
1383
|
+
<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>  }</div>
|
|
1384
|
+
<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>  <span class="keywordflow">else</span></div>
|
|
1385
|
+
<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  {</div>
|
|
1386
|
+
<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>  <span class="keyword">auto</span> llvmVal = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#aaf9b679407f12b93afc53c157d37b444">getLLVMValue</a>(<span class="keyword">this</span>);</div>
|
|
1387
|
+
<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>  <span class="keywordflow">if</span> (llvmVal)</div>
|
|
1388
|
+
<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>  rawstr << <span class="stringliteral">" "</span> << *llvmVal << <span class="stringliteral">" "</span>;</div>
|
|
1389
|
+
<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>  <span class="keywordflow">else</span></div>
|
|
1390
|
+
<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>  rawstr << <span class="stringliteral">" No llvmVal found"</span>;</div>
|
|
1391
|
+
<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>  }</div>
|
|
1392
|
+
<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>  rawstr << this-><a class="code" href="classSVF_1_1SVFValue.html#a7effb0f37f486745e0cdc3ae5e9c732b">getSourceLoc</a>();</div>
|
|
1393
|
+
<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>  <span class="keywordflow">return</span> rawstr.str();</div>
|
|
1394
|
+
<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> }</div>
|
|
1395
|
+
<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>  </div>
|
|
1396
|
+
<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> } <span class="comment">// namespace SVF</span></div>
|
|
1329
1397
|
</div><!-- fragment --></div><!-- contents -->
|
|
1330
1398
|
<div class="ttc" id="anamespaceSVF_html_a827d09974dc7bf0849f96823cc2fee89"><div class="ttname"><a href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">SVF::DomTreeNode</a></div><div class="ttdeci">llvm::DomTreeNode DomTreeNode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00132">BasicTypes.h:132</a></div></div>
|
|
1331
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a8e4add30bd0ce00d3f2aa2e31c64fef8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a8e4add30bd0ce00d3f2aa2e31c64fef8">SVF::LLVMUtil::getSourceLoc</a></div><div class="ttdeci">const std::string getSourceLoc(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1332
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a38ce45ae5f017c90115ce444b44d478c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">SVF::LLVMUtil::stripAllCasts</a></div><div class="ttdeci">const Value * stripAllCasts(const Value *val)</div><div class="ttdoc">Strip off the all casts.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1333
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_afa2f8c8ab19c75547c26ede53b9f6159"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#afa2f8c8ab19c75547c26ede53b9f6159">SVF::LLVMUtil::dumpValue</a></div><div class="ttdeci">std::string dumpValue(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1334
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_abc9c437b7da5cfe3d988dadfcbd0635f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#abc9c437b7da5cfe3d988dadfcbd0635f">SVF::LLVMUtil::viewCFG</a></div><div class="ttdeci">void viewCFG(const Function *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1335
|
-
<div class="ttc" id="anamespaceSVF_html_a8de26e1810ea0c3b1e8ad62f1c8a864d"><div class="ttname"><a href="namespaceSVF.html#a8de26e1810ea0c3b1e8ad62f1c8a864d">SVF::SuccBBAndCondValPairVec</a></div><div class="ttdeci">std::vector< SuccBBAndCondValPair > SuccBBAndCondValPairVec</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#
|
|
1399
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a8e4add30bd0ce00d3f2aa2e31c64fef8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a8e4add30bd0ce00d3f2aa2e31c64fef8">SVF::LLVMUtil::getSourceLoc</a></div><div class="ttdeci">const std::string getSourceLoc(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00753">LLVMUtil.cpp:753</a></div></div>
|
|
1400
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a38ce45ae5f017c90115ce444b44d478c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">SVF::LLVMUtil::stripAllCasts</a></div><div class="ttdeci">const Value * stripAllCasts(const Value *val)</div><div class="ttdoc">Strip off the all casts.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00328">LLVMUtil.cpp:328</a></div></div>
|
|
1401
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_afa2f8c8ab19c75547c26ede53b9f6159"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#afa2f8c8ab19c75547c26ede53b9f6159">SVF::LLVMUtil::dumpValue</a></div><div class="ttdeci">std::string dumpValue(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01359">LLVMUtil.cpp:1359</a></div></div>
|
|
1402
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_abc9c437b7da5cfe3d988dadfcbd0635f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#abc9c437b7da5cfe3d988dadfcbd0635f">SVF::LLVMUtil::viewCFG</a></div><div class="ttdeci">void viewCFG(const Function *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00309">LLVMUtil.cpp:309</a></div></div>
|
|
1403
|
+
<div class="ttc" id="anamespaceSVF_html_a8de26e1810ea0c3b1e8ad62f1c8a864d"><div class="ttname"><a href="namespaceSVF.html#a8de26e1810ea0c3b1e8ad62f1c8a864d">SVF::SuccBBAndCondValPairVec</a></div><div class="ttdeci">std::vector< SuccBBAndCondValPair > SuccBBAndCondValPairVec</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00184">BasicTypes.h:184</a></div></div>
|
|
1336
1404
|
<div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00101">LLVMModule.h:101</a></div></div>
|
|
1337
1405
|
<div class="ttc" id="anamespaceSVF_html_aecbb42b8e9d17fa0189c50dda9fd5fdd"><div class="ttname"><a href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">SVF::DominatorTree</a></div><div class="ttdeci">llvm::DominatorTree DominatorTree</div><div class="ttdoc">LLVM Dominators.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00131">BasicTypes.h:131</a></div></div>
|
|
1338
1406
|
<div class="ttc" id="anamespaceSVF_html_ab696aab940eb187dc81217efe8649af5"><div class="ttname"><a href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">SVF::StoreInst</a></div><div class="ttdeci">llvm::StoreInst StoreInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00146">BasicTypes.h:146</a></div></div>
|
|
@@ -1341,52 +1409,53 @@ $(function() {
|
|
|
1341
1409
|
<div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_aaf9b679407f12b93afc53c157d37b444"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#aaf9b679407f12b93afc53c157d37b444">SVF::LLVMModuleSet::getLLVMValue</a></div><div class="ttdeci">const Value * getLLVMValue(const SVFValue *value) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00194">LLVMModule.h:194</a></div></div>
|
|
1342
1410
|
<div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a16d14e6712866d1d710c386c72d67181"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a16d14e6712866d1d710c386c72d67181">SVF::LLVMModuleSet::FunctionSetType</a></div><div class="ttdeci">std::vector< const Function * > FunctionSetType</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00050">LLVMModule.h:50</a></div></div>
|
|
1343
1411
|
<div class="ttc" id="aLLVMUtil_8cpp_html_a5f8da60b0fcc28445f508f4e42513a82"><div class="ttname"><a href="LLVMUtil_8cpp.html#a5f8da60b0fcc28445f508f4e42513a82">clsName</a></div><div class="ttdeci">const std::string clsName</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00043">LLVMUtil.cpp:43</a></div></div>
|
|
1344
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a08fbef6fe3e2af96a49f79ce23accb01"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a08fbef6fe3e2af96a49f79ce23accb01">SVF::LLVMUtil::isValVtbl</a></div><div class="ttdeci">bool isValVtbl(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1345
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_accdd44093d6d145dc92edeaaff3f5732"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#accdd44093d6d145dc92edeaaff3f5732">SVF::LLVMUtil::processArguments</a></div><div class="ttdeci">void processArguments(int argc, char **argv, int &arg_num, char **arg_value, std::vector< std::string > &moduleNameVec)</div><div class="ttdoc">Parse argument for multi-module analysis.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1412
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a08fbef6fe3e2af96a49f79ce23accb01"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a08fbef6fe3e2af96a49f79ce23accb01">SVF::LLVMUtil::isValVtbl</a></div><div class="ttdeci">bool isValVtbl(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00976">LLVMUtil.cpp:976</a></div></div>
|
|
1413
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_accdd44093d6d145dc92edeaaff3f5732"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#accdd44093d6d145dc92edeaaff3f5732">SVF::LLVMUtil::processArguments</a></div><div class="ttdeci">void processArguments(int argc, char **argv, int &arg_num, char **arg_value, std::vector< std::string > &moduleNameVec)</div><div class="ttdoc">Parse argument for multi-module analysis.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00503">LLVMUtil.cpp:503</a></div></div>
|
|
1346
1414
|
<div class="ttc" id="aLLVMUtil_8h_html"><div class="ttname"><a href="LLVMUtil_8h.html">LLVMUtil.h</a></div></div>
|
|
1347
1415
|
<div class="ttc" id="anamespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set< Key, Hash, KeyEqual, Allocator > Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00097">SVFType.h:97</a></div></div>
|
|
1416
|
+
<div class="ttc" id="anamespaceSVF_html_a893c345ff98bb2808ae905cf9f3671c5"><div class="ttname"><a href="namespaceSVF.html#a893c345ff98bb2808ae905cf9f3671c5">SVF::GEPOperator</a></div><div class="ttdeci">llvm::GEPOperator GEPOperator</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00180">BasicTypes.h:180</a></div></div>
|
|
1348
1417
|
<div class="ttc" id="anamespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00084">BasicTypes.h:84</a></div></div>
|
|
1349
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a9001722dd27bf487351725c3d7b65f2f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a9001722dd27bf487351725c3d7b65f2f">SVF::LLVMUtil::getSuccBBandCondValPairVec</a></div><div class="ttdeci">void getSuccBBandCondValPairVec(const SwitchInst &switchInst, SuccBBAndCondValPairVec &vec)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1418
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a9001722dd27bf487351725c3d7b65f2f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a9001722dd27bf487351725c3d7b65f2f">SVF::LLVMUtil::getSuccBBandCondValPairVec</a></div><div class="ttdeci">void getSuccBBandCondValPairVec(const SwitchInst &switchInst, SuccBBAndCondValPairVec &vec)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01322">LLVMUtil.cpp:1322</a></div></div>
|
|
1350
1419
|
<div class="ttc" id="anamespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00065">BasicTypes.h:65</a></div></div>
|
|
1351
1420
|
<div class="ttc" id="anamespaceSVF_html_a3d9e7f32dc17fe8d40f8d6a011403b91"><div class="ttname"><a href="namespaceSVF.html#a3d9e7f32dc17fe8d40f8d6a011403b91">SVF::IntegerType</a></div><div class="ttdeci">llvm::IntegerType IntegerType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00095">BasicTypes.h:95</a></div></div>
|
|
1352
1421
|
<div class="ttc" id="astructSVF_1_1cppUtil_1_1DemangledName_html"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html">SVF::cppUtil::DemangledName</a></div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8h_source.html#l00046">CppUtil.h:46</a></div></div>
|
|
1353
1422
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a9815a5b31ac7dc21239d08e5b9f61106"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVF::SVFUtil::getSVFCallSite</a></div><div class="ttdeci">CallSite getSVFCallSite(const SVFInstruction *inst)</div><div class="ttdoc">Return LLVM callsite given an instruction.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00196">SVFUtil.h:196</a></div></div>
|
|
1354
1423
|
<div class="ttc" id="anamespaceSVF_html_aa962cc1d782cc46553251e96b64a754b"><div class="ttname"><a href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">SVF::PointerType</a></div><div class="ttdeci">llvm::PointerType PointerType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00094">BasicTypes.h:94</a></div></div>
|
|
1355
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a898e9c2ed163b618f2e86bc251131d8b"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a898e9c2ed163b618f2e86bc251131d8b">SVF::LLVMUtil::VCallInCtorOrDtor</a></div><div class="ttdeci">bool VCallInCtorOrDtor(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1424
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a898e9c2ed163b618f2e86bc251131d8b"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a898e9c2ed163b618f2e86bc251131d8b">SVF::LLVMUtil::VCallInCtorOrDtor</a></div><div class="ttdeci">bool VCallInCtorOrDtor(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01227">LLVMUtil.cpp:1227</a></div></div>
|
|
1356
1425
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a07bd47ccfd02c5a2a6db26b537b2184f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a07bd47ccfd02c5a2a6db26b537b2184f">SVF::LLVMUtil::stripConstantCasts</a></div><div class="ttdeci">const Value * stripConstantCasts(const Value *val)</div><div class="ttdoc">Strip off the constant casts.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00232">LLVMUtil.cpp:232</a></div></div>
|
|
1357
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a200539f965bff5627abac41920498ee8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a200539f965bff5627abac41920498ee8">SVF::LLVMUtil::getFirstUseViaCastInst</a></div><div class="ttdeci">const Value * getFirstUseViaCastInst(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1426
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a200539f965bff5627abac41920498ee8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a200539f965bff5627abac41920498ee8">SVF::LLVMUtil::getFirstUseViaCastInst</a></div><div class="ttdeci">const Value * getFirstUseViaCastInst(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00414">LLVMUtil.cpp:414</a></div></div>
|
|
1358
1427
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a2c61d741afbcfa853b505cd391f29f9b"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a2c61d741afbcfa853b505cd391f29f9b">SVF::LLVMUtil::isUncalledFunction</a></div><div class="ttdeci">bool isUncalledFunction(const Function *fun)</div><div class="ttdoc">whether this is a function without any possible caller?</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00154">LLVMUtil.cpp:154</a></div></div>
|
|
1359
1428
|
<div class="ttc" id="anamespaceSVF_html_a412280b134578905248ce0122c5db7c9"><div class="ttname"><a href="namespaceSVF.html#a412280b134578905248ce0122c5db7c9">SVF::SwitchInst</a></div><div class="ttdeci">llvm::SwitchInst SwitchInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00153">BasicTypes.h:153</a></div></div>
|
|
1360
1429
|
<div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a5f0bd932f3129a9c565f3a09711f7b99"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">SVF::LLVMModuleSet::getSVFType</a></div><div class="ttdeci">SVFType * getSVFType(const Type *T)</div><div class="ttdoc">Get or create SVFType and typeinfo.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01275">LLVMModule.cpp:1275</a></div></div>
|
|
1361
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ad8ee8de153df3f1bbdebb67185a2731c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ad8ee8de153df3f1bbdebb67185a2731c">SVF::LLVMUtil::isConstantObjSym</a></div><div class="ttdeci">bool isConstantObjSym(const SVFValue *val)</div><div class="ttdoc">Check whether this value points-to a constant object.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1430
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ad8ee8de153df3f1bbdebb67185a2731c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ad8ee8de153df3f1bbdebb67185a2731c">SVF::LLVMUtil::isConstantObjSym</a></div><div class="ttdeci">bool isConstantObjSym(const SVFValue *val)</div><div class="ttdoc">Check whether this value points-to a constant object.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00927">LLVMUtil.cpp:927</a></div></div>
|
|
1362
1431
|
<div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a50fc24901350df9db890ba16a9b87e33"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">SVF::LLVMModuleSet::getSVFFunction</a></div><div class="ttdeci">SVFFunction * getSVFFunction(const Function *fun) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00201">LLVMModule.h:201</a></div></div>
|
|
1363
1432
|
<div class="ttc" id="anamespaceSVF_html_a52c8654c221bb53a59f70ea3cb1e5c45"><div class="ttname"><a href="namespaceSVF.html#a52c8654c221bb53a59f70ea3cb1e5c45">SVF::StructLayout</a></div><div class="ttdeci">llvm::StructLayout StructLayout</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
|
|
1364
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ae2b444bb3e7a27d77386f588a78af8e2"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ae2b444bb3e7a27d77386f588a78af8e2">SVF::LLVMUtil::removeUnusedGlobalVariables</a></div><div class="ttdeci">void removeUnusedGlobalVariables(Module *module)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1433
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ae2b444bb3e7a27d77386f588a78af8e2"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ae2b444bb3e7a27d77386f588a78af8e2">SVF::LLVMUtil::removeUnusedGlobalVariables</a></div><div class="ttdeci">void removeUnusedGlobalVariables(Module *module)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00667">LLVMUtil.cpp:667</a></div></div>
|
|
1365
1434
|
<div class="ttc" id="anamespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdoc">LLVM Basic classes.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00080">BasicTypes.h:80</a></div></div>
|
|
1366
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a41e64f3318e2bf368eebe9a104ef6ad9"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a41e64f3318e2bf368eebe9a104ef6ad9">SVF::LLVMUtil::getFunNameOfVCallSite</a></div><div class="ttdeci">std::string getFunNameOfVCallSite(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1435
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a41e64f3318e2bf368eebe9a104ef6ad9"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a41e64f3318e2bf368eebe9a104ef6ad9">SVF::LLVMUtil::getFunNameOfVCallSite</a></div><div class="ttdeci">std::string getFunNameOfVCallSite(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01288">LLVMUtil.cpp:1288</a></div></div>
|
|
1367
1436
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ab2064cb70c76f399ce115f2621adea35"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVF::SVFUtil::isHeapAllocExtCallViaRet</a></div><div class="ttdeci">bool isHeapAllocExtCallViaRet(const CallSite cs)</div><div class="ttdoc">interfaces to be used externally</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00442">SVFUtil.h:442</a></div></div>
|
|
1368
1437
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a651b6a1cf3665277d2241220bb145aed"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a651b6a1cf3665277d2241220bb145aed">SVF::LLVMUtil::functionDoesNotRet</a></div><div class="ttdeci">bool functionDoesNotRet(const Function *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00118">LLVMUtil.cpp:118</a></div></div>
|
|
1369
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a47d2af43ff12d9e1014fa19256619466"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a47d2af43ff12d9e1014fa19256619466">SVF::LLVMUtil::getCalledFunctions</a></div><div class="ttdeci">std::vector< const Function * > getCalledFunctions(const Function *F)</div><div class="ttdoc">Get all called funcions in a parent function.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1370
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a0ecff33105811b1e5ebc83afee76da27"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a0ecff33105811b1e5ebc83afee76da27">SVF::LLVMUtil::removeUnusedFuncsAndAnnotationsAndGlobalVariables</a></div><div class="ttdeci">void removeUnusedFuncsAndAnnotationsAndGlobalVariables(std::vector< Function * > removedFuncList)</div><div class="ttdoc">Delete unused functions, annotations and global variables in extapi.bc.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1371
|
-
<div class="ttc" id="anamespaceSVF_html_a5c943191dc4e242704943e5f594ae99e"><div class="ttname"><a href="namespaceSVF.html#a5c943191dc4e242704943e5f594ae99e">SVF::const_pred_iterator</a></div><div class="ttdeci">llvm::const_pred_iterator const_pred_iterator</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#
|
|
1438
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a47d2af43ff12d9e1014fa19256619466"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a47d2af43ff12d9e1014fa19256619466">SVF::LLVMUtil::getCalledFunctions</a></div><div class="ttdeci">std::vector< const Function * > getCalledFunctions(const Function *F)</div><div class="ttdoc">Get all called funcions in a parent function.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00633">LLVMUtil.cpp:633</a></div></div>
|
|
1439
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a0ecff33105811b1e5ebc83afee76da27"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a0ecff33105811b1e5ebc83afee76da27">SVF::LLVMUtil::removeUnusedFuncsAndAnnotationsAndGlobalVariables</a></div><div class="ttdeci">void removeUnusedFuncsAndAnnotationsAndGlobalVariables(std::vector< Function * > removedFuncList)</div><div class="ttdoc">Delete unused functions, annotations and global variables in extapi.bc.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00682">LLVMUtil.cpp:682</a></div></div>
|
|
1440
|
+
<div class="ttc" id="anamespaceSVF_html_a5c943191dc4e242704943e5f594ae99e"><div class="ttname"><a href="namespaceSVF.html#a5c943191dc4e242704943e5f594ae99e">SVF::const_pred_iterator</a></div><div class="ttdeci">llvm::const_pred_iterator const_pred_iterator</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00252">BasicTypes.h:252</a></div></div>
|
|
1372
1441
|
<div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_aa4a604e47daaaf95babc7aca68991000"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#aa4a604e47daaaf95babc7aca68991000">SVF::LLVMModuleSet::getDeclaration</a></div><div class="ttdeci">const FunctionSetType & getDeclaration(const Function *fun) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00300">LLVMModule.h:300</a></div></div>
|
|
1373
1442
|
<div class="ttc" id="anamespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00083">BasicTypes.h:83</a></div></div>
|
|
1374
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a4f803756f0a73e8564d9544ce27be1c9"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a4f803756f0a73e8564d9544ce27be1c9">SVF::LLVMUtil::getVtblStruct</a></div><div class="ttdeci">const ConstantStruct * getVtblStruct(const GlobalValue *vtbl)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1443
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a4f803756f0a73e8564d9544ce27be1c9"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a4f803756f0a73e8564d9544ce27be1c9">SVF::LLVMUtil::getVtblStruct</a></div><div class="ttdeci">const ConstantStruct * getVtblStruct(const GlobalValue *vtbl)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00963">LLVMUtil.cpp:963</a></div></div>
|
|
1375
1444
|
<div class="ttc" id="anamespaceSVF_html_a1f4624771922dc8c2447ad7433588c73"><div class="ttname"><a href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">SVF::CallBase</a></div><div class="ttdeci">llvm::CallBase CallBase</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00144">BasicTypes.h:144</a></div></div>
|
|
1376
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a33e8378ae1a911169394e545a4ba2220"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a33e8378ae1a911169394e545a4ba2220">SVF::LLVMUtil::getCaseValue</a></div><div class="ttdeci">s64_t getCaseValue(const SwitchInst &switchInst, SuccBBAndCondValPair &succBB2CondVal)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1445
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a33e8378ae1a911169394e545a4ba2220"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a33e8378ae1a911169394e545a4ba2220">SVF::LLVMUtil::getCaseValue</a></div><div class="ttdeci">s64_t getCaseValue(const SwitchInst &switchInst, SuccBBAndCondValPair &succBB2CondVal)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01332">LLVMUtil.cpp:1332</a></div></div>
|
|
1377
1446
|
<div class="ttc" id="anamespaceSVF_html_a5ae718cba37d8e34d2946530dc098c8e"><div class="ttname"><a href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">SVF::ConstantArray</a></div><div class="ttdeci">llvm::ConstantArray ConstantArray</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00121">BasicTypes.h:121</a></div></div>
|
|
1378
1447
|
<div class="ttc" id="anamespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00081">BasicTypes.h:81</a></div></div>
|
|
1379
1448
|
<div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ab0c0f321b6bfbfab2e4ff06d81920ab9"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">SVF::LLVMModuleSet::getSVFBasicBlock</a></div><div class="ttdeci">SVFBasicBlock * getSVFBasicBlock(const BasicBlock *bb) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00208">LLVMModule.h:208</a></div></div>
|
|
1380
1449
|
<div class="ttc" id="anamespaceSVF_html_a5a6e8ab900d5cd17ef72661006a7fbe0"><div class="ttname"><a href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">SVF::LoadInst</a></div><div class="ttdeci">llvm::LoadInst LoadInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00147">BasicTypes.h:147</a></div></div>
|
|
1381
1450
|
<div class="ttc" id="anamespaceSVF_html_a09f5fa3bc44bf53612a085e3a611cc4e"><div class="ttname"><a href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">SVF::GlobalVariable</a></div><div class="ttdeci">llvm::GlobalVariable GlobalVariable</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00128">BasicTypes.h:128</a></div></div>
|
|
1382
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a6e8682537cf5bed808df439bd7e1add9"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">SVF::LLVMUtil::dumpType</a></div><div class="ttdeci">std::string dumpType(const Type *type)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1383
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_addcfb0135655706a86f6cc628475fccf"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#addcfb0135655706a86f6cc628475fccf">SVF::LLVMUtil::getConstructorThisPtr</a></div><div class="ttdeci">const Argument * getConstructorThisPtr(const Function *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1384
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a68e7bad8eb537039559d8ddc851032e0"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a68e7bad8eb537039559d8ddc851032e0">SVF::LLVMUtil::getVCallThisPtr</a></div><div class="ttdeci">const Value * getVCallThisPtr(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1451
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a6e8682537cf5bed808df439bd7e1add9"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">SVF::LLVMUtil::dumpType</a></div><div class="ttdeci">std::string dumpType(const Type *type)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01370">LLVMUtil.cpp:1370</a></div></div>
|
|
1452
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_addcfb0135655706a86f6cc628475fccf"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#addcfb0135655706a86f6cc628475fccf">SVF::LLVMUtil::getConstructorThisPtr</a></div><div class="ttdeci">const Argument * getConstructorThisPtr(const Function *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01132">LLVMUtil.cpp:1132</a></div></div>
|
|
1453
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a68e7bad8eb537039559d8ddc851032e0"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a68e7bad8eb537039559d8ddc851032e0">SVF::LLVMUtil::getVCallThisPtr</a></div><div class="ttdeci">const Value * getVCallThisPtr(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01082">LLVMUtil.cpp:1082</a></div></div>
|
|
1385
1454
|
<div class="ttc" id="anamespaceSVF_html_a146d286041987860388da3d8bc85cee3"><div class="ttname"><a href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">SVF::ArrayType</a></div><div class="ttdeci">llvm::ArrayType ArrayType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00093">BasicTypes.h:93</a></div></div>
|
|
1386
1455
|
<div class="ttc" id="aclassSVF_1_1SVFBasicBlock_html"><div class="ttname"><a href="classSVF_1_1SVFBasicBlock.html">SVF::SVFBasicBlock</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00522">SVFValue.h:522</a></div></div>
|
|
1387
1456
|
<div class="ttc" id="aclassSVF_1_1SVFValue_html"><div class="ttname"><a href="classSVF_1_1SVFValue.html">SVF::SVFValue</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00177">SVFValue.h:177</a></div></div>
|
|
1388
1457
|
<div class="ttc" id="acJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
|
|
1389
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a8873eb1cce9496f9699eab22c4a6d3ce"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a8873eb1cce9496f9699eab22c4a6d3ce">SVF::LLVMUtil::isSameThisPtrInConstructor</a></div><div class="ttdeci">bool isSameThisPtrInConstructor(const Argument *thisPtr1, const Value *thisPtr2)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1458
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a8873eb1cce9496f9699eab22c4a6d3ce"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a8873eb1cce9496f9699eab22c4a6d3ce">SVF::LLVMUtil::isSameThisPtrInConstructor</a></div><div class="ttdeci">bool isSameThisPtrInConstructor(const Argument *thisPtr1, const Value *thisPtr2)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01108">LLVMUtil.cpp:1108</a></div></div>
|
|
1390
1459
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a07c785d931cef3c61e3dab4c615770be"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a07c785d931cef3c61e3dab4c615770be">SVF::LLVMUtil::isPtrInUncalledFunction</a></div><div class="ttdeci">bool isPtrInUncalledFunction(const Value *value)</div><div class="ttdoc">Return true if this is value in a dead function (function without any caller)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00187">LLVMUtil.cpp:187</a></div></div>
|
|
1391
1460
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ac9d6aff1a5e778e45c51b4f3b6d787e0"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ac9d6aff1a5e778e45c51b4f3b6d787e0">SVF::LLVMUtil::isProgEntryFunction</a></div><div class="ttdeci">bool isProgEntryFunction(const Function *fun)</div><div class="ttdoc">Check whether a function is an entry function (i.e., main)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00102">LLVMUtil.h:102</a></div></div>
|
|
1392
1461
|
<div class="ttc" id="acJSON_8cpp_html_a3f9a0d3265a6254722587175dac3e4dc"><div class="ttname"><a href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a></div><div class="ttdeci">newitem type</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02739">cJSON.cpp:2739</a></div></div>
|
|
@@ -1395,28 +1464,29 @@ $(function() {
|
|
|
1395
1464
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_aedfa6e9216c6c788c26aef1967689b76"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aedfa6e9216c6c788c26aef1967689b76">SVF::SVFUtil::isHeapAllocExtCallViaArg</a></div><div class="ttdeci">bool isHeapAllocExtCallViaArg(const CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00431">SVFUtil.h:431</a></div></div>
|
|
1396
1465
|
<div class="ttc" id="anamespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00085">BasicTypes.h:85</a></div></div>
|
|
1397
1466
|
<div class="ttc" id="anamespaceSVF_1_1cppUtil_html_a745a2addadc136075d45c7fb8437af3e"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a745a2addadc136075d45c7fb8437af3e">SVF::cppUtil::demangle</a></div><div class="ttdeci">struct DemangledName demangle(const std::string &name)</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8cpp_source.html#l00153">CppUtil.cpp:153</a></div></div>
|
|
1398
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a3a23aa54459a068e16c96e5b5eb72f77"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a3a23aa54459a068e16c96e5b5eb72f77">SVF::LLVMUtil::getVCallVtblPtr</a></div><div class="ttdeci">const Value * getVCallVtblPtr(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1467
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a3a23aa54459a068e16c96e5b5eb72f77"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a3a23aa54459a068e16c96e5b5eb72f77">SVF::LLVMUtil::getVCallVtblPtr</a></div><div class="ttdeci">const Value * getVCallVtblPtr(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01211">LLVMUtil.cpp:1211</a></div></div>
|
|
1399
1468
|
<div class="ttc" id="acJSON_8cpp_html_a930920b2bc42824a5c03be681830f4b2"><div class="ttname"><a href="cJSON_8cpp.html#a930920b2bc42824a5c03be681830f4b2">true</a></div><div class="ttdeci">return true</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02295">cJSON.cpp:2295</a></div></div>
|
|
1400
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a8a77403306e97ab4cb31a56d38bba5be"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">SVF::LLVMUtil::isConstDataOrAggData</a></div><div class="ttdeci">bool isConstDataOrAggData(const Value *val)</div><div class="ttdoc">Return true if the value refers to constant data, e.g., i32 0.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#
|
|
1469
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a8a77403306e97ab4cb31a56d38bba5be"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">SVF::LLVMUtil::isConstDataOrAggData</a></div><div class="ttdeci">bool isConstDataOrAggData(const Value *val)</div><div class="ttdoc">Return true if the value refers to constant data, e.g., i32 0.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00420">LLVMUtil.h:420</a></div></div>
|
|
1401
1470
|
<div class="ttc" id="anamespaceSVF_html_a2bf58575ac7d068e0f1a4cf953b9e6cb"><div class="ttname"><a href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">SVF::StructType</a></div><div class="ttdeci">llvm::StructType StructType</div><div class="ttdoc">LLVM types.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00092">BasicTypes.h:92</a></div></div>
|
|
1402
1471
|
<div class="ttc" id="anamespaceSVF_html_a2b28f48dde0a9a91d251e654ce1f9477"><div class="ttname"><a href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">SVF::ConstantStruct</a></div><div class="ttdeci">llvm::ConstantStruct ConstantStruct</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00104">BasicTypes.h:104</a></div></div>
|
|
1403
1472
|
<div class="ttc" id="aclassSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00297">SVFValue.h:297</a></div></div>
|
|
1404
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ad8a8c32a09340f491fffffcb07dd7a41"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41">SVF::LLVMUtil::isIRFile</a></div><div class="ttdeci">bool isIRFile(const std::string &filename)</div><div class="ttdoc">Check whether a file is an LLVM IR file.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1473
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ad8a8c32a09340f491fffffcb07dd7a41"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41">SVF::LLVMUtil::isIRFile</a></div><div class="ttdeci">bool isIRFile(const std::string &filename)</div><div class="ttdoc">Check whether a file is an LLVM IR file.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00486">LLVMUtil.cpp:486</a></div></div>
|
|
1405
1474
|
<div class="ttc" id="anamespaceSVF_1_1cppUtil_html_a1cf2e4671b16b477cc779c72f2419234"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">SVF::cppUtil::getBeforeBrackets</a></div><div class="ttdeci">std::string getBeforeBrackets(const std::string &name)</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8cpp_source.html#l00085">CppUtil.cpp:85</a></div></div>
|
|
1475
|
+
<div class="ttc" id="anamespaceSVF_html_a3bacb4f95c73e6d794901d01c6b65a83"><div class="ttname"><a href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">SVF::AllocaInst</a></div><div class="ttdeci">llvm::AllocaInst AllocaInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00148">BasicTypes.h:148</a></div></div>
|
|
1406
1476
|
<div class="ttc" id="aLLVMUtil_8cpp_html_a211c0223a37893d84fb5e2fd2f9fc76b"><div class="ttname"><a href="LLVMUtil_8cpp.html#a211c0223a37893d84fb5e2fd2f9fc76b">vtblLabelBeforeDemangle</a></div><div class="ttdeci">const std::string vtblLabelBeforeDemangle</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00038">LLVMUtil.cpp:38</a></div></div>
|
|
1407
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a523a8c3f9bfaea178733822ac598d552"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a523a8c3f9bfaea178733822ac598d552">SVF::LLVMUtil::removeFunAnnotations</a></div><div class="ttdeci">void removeFunAnnotations(std::vector< Function * > &removedFuncList)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1477
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a523a8c3f9bfaea178733822ac598d552"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a523a8c3f9bfaea178733822ac598d552">SVF::LLVMUtil::removeFunAnnotations</a></div><div class="ttdeci">void removeFunAnnotations(std::vector< Function * > &removedFuncList)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00571">LLVMUtil.cpp:571</a></div></div>
|
|
1408
1478
|
<div class="ttc" id="anamespaceSVF_html_ad3d3cec1813411f039211c86236f7adb"><div class="ttname"><a href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">SVF::MDNode</a></div><div class="ttdeci">llvm::MDNode MDNode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00110">BasicTypes.h:110</a></div></div>
|
|
1409
1479
|
<div class="ttc" id="aclassSVF_1_1SVFFunction_html_af264312f0020bde9151697bccfde3263"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#af264312f0020bde9151697bccfde3263">SVF::SVFFunction::getReturnType</a></div><div class="ttdeci">const SVFType * getReturnType() const</div><div class="ttdoc">Returns the FunctionType.</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00389">SVFValue.h:389</a></div></div>
|
|
1410
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a206973624fcc58e6044c884dba23a754"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a206973624fcc58e6044c884dba23a754">SVF::LLVMUtil::isDestructor</a></div><div class="ttdeci">bool isDestructor(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1411
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a151fd7fb2b2ebe72af7c417defbb4f4d"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a151fd7fb2b2ebe72af7c417defbb4f4d">SVF::LLVMUtil::getDataLayout</a></div><div class="ttdeci">static DataLayout * getDataLayout(Module *mod)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#
|
|
1412
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_adfa4a4e6d13004d14137d9168bd32463"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#adfa4a4e6d13004d14137d9168bd32463">SVF::LLVMUtil::isInt2PtrConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isInt2PtrConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#
|
|
1480
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a206973624fcc58e6044c884dba23a754"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a206973624fcc58e6044c884dba23a754">SVF::LLVMUtil::isDestructor</a></div><div class="ttdeci">bool isDestructor(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01172">LLVMUtil.cpp:1172</a></div></div>
|
|
1481
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a151fd7fb2b2ebe72af7c417defbb4f4d"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a151fd7fb2b2ebe72af7c417defbb4f4d">SVF::LLVMUtil::getDataLayout</a></div><div class="ttdeci">static DataLayout * getDataLayout(Module *mod)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00337">LLVMUtil.h:337</a></div></div>
|
|
1482
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_adfa4a4e6d13004d14137d9168bd32463"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#adfa4a4e6d13004d14137d9168bd32463">SVF::LLVMUtil::isInt2PtrConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isInt2PtrConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00249">LLVMUtil.h:249</a></div></div>
|
|
1413
1483
|
<div class="ttc" id="aLLVMUtil_8cpp_html_a61c158146c07e77234eb4a2f9b940821"><div class="ttname"><a href="LLVMUtil_8cpp.html#a61c158146c07e77234eb4a2f9b940821">structName</a></div><div class="ttdeci">const std::string structName</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00044">LLVMUtil.cpp:44</a></div></div>
|
|
1414
1484
|
<div class="ttc" id="anamespaceSVF_html_a962e9a9044a46fc4bd2367384f6e0827"><div class="ttname"><a href="namespaceSVF.html#a962e9a9044a46fc4bd2367384f6e0827">SVF::CastInst</a></div><div class="ttdeci">llvm::CastInst CastInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00156">BasicTypes.h:156</a></div></div>
|
|
1415
1485
|
<div class="ttc" id="aclassSVF_1_1ExtAPI_html_a58a764c27354d5f9b70995d30de65f1d"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a58a764c27354d5f9b70995d30de65f1d">SVF::ExtAPI::getExtAPI</a></div><div class="ttdeci">static ExtAPI * getExtAPI()</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00040">ExtAPI.cpp:40</a></div></div>
|
|
1416
1486
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a0095d23a9c9d5d62ec4a23c56824b5f0"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a0095d23a9c9d5d62ec4a23c56824b5f0">SVF::LLVMUtil::getLLVMCallSite</a></div><div class="ttdeci">const CallBase * getLLVMCallSite(const Value *value)</div><div class="ttdoc">Return LLVM callsite given a value.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00068">LLVMUtil.h:68</a></div></div>
|
|
1417
1487
|
<div class="ttc" id="aclassSVF_1_1SVFType_html_a05850c17c2dbe42e5602dc8c9a70f3bd"><div class="ttname"><a href="classSVF_1_1SVFType.html#a05850c17c2dbe42e5602dc8c9a70f3bd">SVF::SVFType::getTypeInfo</a></div><div class="ttdeci">StInfo * getTypeInfo()</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00309">SVFType.h:309</a></div></div>
|
|
1418
1488
|
<div class="ttc" id="anamespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00082">BasicTypes.h:82</a></div></div>
|
|
1419
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ab1b4c565ae6be788b934defc21a5cfaf"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ab1b4c565ae6be788b934defc21a5cfaf">SVF::LLVMUtil::isVirtualCallSite</a></div><div class="ttdeci">bool isVirtualCallSite(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1489
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ab1b4c565ae6be788b934defc21a5cfaf"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ab1b4c565ae6be788b934defc21a5cfaf">SVF::LLVMUtil::isVirtualCallSite</a></div><div class="ttdeci">bool isVirtualCallSite(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01023">LLVMUtil.cpp:1023</a></div></div>
|
|
1420
1490
|
<div class="ttc" id="anamespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00052">SVFType.h:52</a></div></div>
|
|
1421
1491
|
<div class="ttc" id="anamespaceSVF_html_a89c7208bfc0b57873dfa574f52050295"><div class="ttname"><a href="namespaceSVF.html#a89c7208bfc0b57873dfa574f52050295">SVF::DISubprogram</a></div><div class="ttdeci">llvm::DISubprogram DISubprogram</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00111">BasicTypes.h:111</a></div></div>
|
|
1422
1492
|
<div class="ttc" id="astructSVF_1_1cppUtil_1_1DemangledName_html_af6117df8aec7f4c077058fa8f00b0243"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html#af6117df8aec7f4c077058fa8f00b0243">SVF::cppUtil::DemangledName::isThunkFunc</a></div><div class="ttdeci">bool isThunkFunc</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8h_source.html#l00050">CppUtil.h:50</a></div></div>
|
|
@@ -1429,47 +1499,49 @@ $(function() {
|
|
|
1429
1499
|
<div class="ttc" id="anamespaceSVF_html_adefcb50414ea999d70cea5ccdbcb98d7"><div class="ttname"><a href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">SVF::ConstantInt</a></div><div class="ttdeci">llvm::ConstantInt ConstantInt</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00123">BasicTypes.h:123</a></div></div>
|
|
1430
1500
|
<div class="ttc" id="aclassSVF_1_1StInfo_html_ac0a9f85f90524abfd519d3cd2ac95a56"><div class="ttname"><a href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">SVF::StInfo::getFlattenFieldTypes</a></div><div class="ttdeci">std::vector< const SVFType * > & getFlattenFieldTypes()</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00192">SVFType.h:192</a></div></div>
|
|
1431
1501
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_abb4b5ed04ec70a2e7fca8198132370cf"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#abb4b5ed04ec70a2e7fca8198132370cf">SVF::LLVMUtil::basicBlockHasRetInst</a></div><div class="ttdeci">bool basicBlockHasRetInst(const BasicBlock *bb)</div><div class="ttdoc">Return true if the function has a return instruction.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00104">LLVMUtil.cpp:104</a></div></div>
|
|
1432
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_aa841a295ec803b6a1f2bd248f63f863f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#aa841a295ec803b6a1f2bd248f63f863f">SVF::LLVMUtil::getClassNameOfThisPtr</a></div><div class="ttdeci">std::string getClassNameOfThisPtr(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1502
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_aa841a295ec803b6a1f2bd248f63f863f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#aa841a295ec803b6a1f2bd248f63f863f">SVF::LLVMUtil::getClassNameOfThisPtr</a></div><div class="ttdeci">std::string getClassNameOfThisPtr(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01258">LLVMUtil.cpp:1258</a></div></div>
|
|
1503
|
+
<div class="ttc" id="anamespaceSVF_html_adc8b60ca7d60cf6c81feae20e4a04c63"><div class="ttname"><a href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">SVF::CallInst</a></div><div class="ttdeci">llvm::CallInst CallInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00145">BasicTypes.h:145</a></div></div>
|
|
1433
1504
|
<div class="ttc" id="astructSVF_1_1cppUtil_1_1DemangledName_html_a5cd207bce618521166e6fa235014b297"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">SVF::cppUtil::DemangledName::className</a></div><div class="ttdeci">std::string className</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8h_source.html#l00048">CppUtil.h:48</a></div></div>
|
|
1434
|
-
<div class="ttc" id="anamespaceSVF_html_a3436a988bf80c021cd8022fb445b66d5"><div class="ttname"><a href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">SVF::succ_const_iterator</a></div><div class="ttdeci">llvm::succ_const_iterator succ_const_iterator</div><div class="ttdoc">LLVM Iterators.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#
|
|
1435
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_acee7c2fb08e111eda4d91ce5479de05e"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#acee7c2fb08e111eda4d91ce5479de05e">SVF::LLVMUtil::isUnusedGlobalVariable</a></div><div class="ttdeci">bool isUnusedGlobalVariable(const GlobalVariable &global)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1505
|
+
<div class="ttc" id="anamespaceSVF_html_a3436a988bf80c021cd8022fb445b66d5"><div class="ttname"><a href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">SVF::succ_const_iterator</a></div><div class="ttdeci">llvm::succ_const_iterator succ_const_iterator</div><div class="ttdoc">LLVM Iterators.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00274">BasicTypes.h:274</a></div></div>
|
|
1506
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_acee7c2fb08e111eda4d91ce5479de05e"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#acee7c2fb08e111eda4d91ce5479de05e">SVF::LLVMUtil::isUnusedGlobalVariable</a></div><div class="ttdeci">bool isUnusedGlobalVariable(const GlobalVariable &global)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00652">LLVMUtil.cpp:652</a></div></div>
|
|
1436
1507
|
<div class="ttc" id="astructSVF_1_1cppUtil_1_1DemangledName_html_a1dd17b240663bc9412adefde82385e02"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">SVF::cppUtil::DemangledName::funcName</a></div><div class="ttdeci">std::string funcName</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8h_source.html#l00049">CppUtil.h:49</a></div></div>
|
|
1437
1508
|
<div class="ttc" id="anamespaceSVF_html_afc1b50355821e7299df03b026e36f1df"><div class="ttname"><a href="namespaceSVF.html#afc1b50355821e7299df03b026e36f1df">SVF::User</a></div><div class="ttdeci">llvm::User User</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00140">BasicTypes.h:140</a></div></div>
|
|
1438
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a47bbc0527ced570d576ccc2f9df409cb"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a47bbc0527ced570d576ccc2f9df409cb">SVF::LLVMUtil::isCPPThunkFunction</a></div><div class="ttdeci">bool isCPPThunkFunction(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1439
|
-
<div class="ttc" id="aclassSVF_1_1SVFValue_html_a4a0cfe3a8f37d33ffcdca3d66026dcc3"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">SVF::SVFValue::toString</a></div><div class="ttdeci">std::string toString() const</div><div class="ttdoc">Needs to be implemented by a SVF front end.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1509
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a47bbc0527ced570d576ccc2f9df409cb"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a47bbc0527ced570d576ccc2f9df409cb">SVF::LLVMUtil::isCPPThunkFunction</a></div><div class="ttdeci">bool isCPPThunkFunction(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01054">LLVMUtil.cpp:1054</a></div></div>
|
|
1510
|
+
<div class="ttc" id="aclassSVF_1_1SVFValue_html_a4a0cfe3a8f37d33ffcdca3d66026dcc3"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">SVF::SVFValue::toString</a></div><div class="ttdeci">std::string toString() const</div><div class="ttdoc">Needs to be implemented by a SVF front end.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01385">LLVMUtil.cpp:1385</a></div></div>
|
|
1440
1511
|
<div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ae74f307b6f96950ceedb2c375ef1c3a3"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">SVF::LLVMModuleSet::getSVFInstruction</a></div><div class="ttdeci">SVFInstruction * getSVFInstruction(const Instruction *inst) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00215">LLVMModule.h:215</a></div></div>
|
|
1441
1512
|
<div class="ttc" id="anamespaceSVF_html_a67f3f86344f028cacfbeb08caaf7bb0f"><div class="ttname"><a href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">SVF::GlobalValue</a></div><div class="ttdeci">llvm::GlobalValue GlobalValue</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00086">BasicTypes.h:86</a></div></div>
|
|
1442
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a2b32283ee2dbb9cef1d17ab6f2719e0c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a2b32283ee2dbb9cef1d17ab6f2719e0c">SVF::LLVMUtil::getSourceLocOfFunction</a></div><div class="ttdeci">const std::string getSourceLocOfFunction(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1443
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_aab1cb59036d181e20a477bf1eebd81ff"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#aab1cb59036d181e20a477bf1eebd81ff">SVF::LLVMUtil::getThunkTarget</a></div><div class="ttdeci">const Function * getThunkTarget(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1444
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a207fe02ded216fd0412fc894e13bee6e"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a207fe02ded216fd0412fc894e13bee6e">SVF::LLVMUtil::getClassNameFromType</a></div><div class="ttdeci">std::string getClassNameFromType(const StructType *ty)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1445
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ae368713463c84425f9a1ad27ff401a47"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ae368713463c84425f9a1ad27ff401a47">SVF::LLVMUtil::getTypeOfHeapAlloc</a></div><div class="ttdeci">const Type * getTypeOfHeapAlloc(const 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#
|
|
1513
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a2b32283ee2dbb9cef1d17ab6f2719e0c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a2b32283ee2dbb9cef1d17ab6f2719e0c">SVF::LLVMUtil::getSourceLocOfFunction</a></div><div class="ttdeci">const std::string getSourceLocOfFunction(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00857">LLVMUtil.cpp:857</a></div></div>
|
|
1514
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_aab1cb59036d181e20a477bf1eebd81ff"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#aab1cb59036d181e20a477bf1eebd81ff">SVF::LLVMUtil::getThunkTarget</a></div><div class="ttdeci">const Function * getThunkTarget(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01060">LLVMUtil.cpp:1060</a></div></div>
|
|
1515
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a207fe02ded216fd0412fc894e13bee6e"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a207fe02ded216fd0412fc894e13bee6e">SVF::LLVMUtil::getClassNameFromType</a></div><div class="ttdeci">std::string getClassNameFromType(const StructType *ty)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01240">LLVMUtil.cpp:1240</a></div></div>
|
|
1516
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ae368713463c84425f9a1ad27ff401a47"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ae368713463c84425f9a1ad27ff401a47">SVF::LLVMUtil::getTypeOfHeapAlloc</a></div><div class="ttdeci">const Type * getTypeOfHeapAlloc(const 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#l00441">LLVMUtil.cpp:441</a></div></div>
|
|
1446
1517
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a9bd6f54920929e5ad35102ba2f2223da"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a9bd6f54920929e5ad35102ba2f2223da">SVF::LLVMUtil::getFunReachableBBs</a></div><div class="ttdeci">void getFunReachableBBs(const Function *svfFun, std::vector< const SVFBasicBlock * > &bbs)</div><div class="ttdoc">Get reachable basic block from function entry.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00069">LLVMUtil.cpp:69</a></div></div>
|
|
1518
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a4b5d4c7ca2c580ace7305bfed58ffce8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a4b5d4c7ca2c580ace7305bfed58ffce8">SVF::LLVMUtil::getPointeeType</a></div><div class="ttdeci">Type * getPointeeType(const Value *value)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00246">LLVMUtil.cpp:246</a></div></div>
|
|
1447
1519
|
<div class="ttc" id="anamespaceSVF_html_a911dbaab38cb42deb9c195c7f687853d"><div class="ttname"><a href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">SVF::ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00118">BasicTypes.h:118</a></div></div>
|
|
1448
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a2abbe4ed46b2031a981d93b3ba9d3fbd"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a2abbe4ed46b2031a981d93b3ba9d3fbd">SVF::LLVMUtil::viewCFGOnly</a></div><div class="ttdeci">void viewCFGOnly(const Function *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1449
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a4c94a6c02fb89c1a1604c87414956acd"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">SVF::LLVMUtil::getPrevInsts</a></div><div class="ttdeci">void getPrevInsts(const Instruction *curInst, std::vector< const SVFInstruction * > &instList)</div><div class="ttdoc">Get the previous instructions following control flow.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1450
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a45da980cb7c085942bb8e6010db9d84f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a45da980cb7c085942bb8e6010db9d84f">SVF::LLVMUtil::isLoadVtblInst</a></div><div class="ttdeci">bool isLoadVtblInst(const LoadInst *loadInst)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1520
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a2abbe4ed46b2031a981d93b3ba9d3fbd"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a2abbe4ed46b2031a981d93b3ba9d3fbd">SVF::LLVMUtil::viewCFGOnly</a></div><div class="ttdeci">void viewCFGOnly(const Function *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00317">LLVMUtil.cpp:317</a></div></div>
|
|
1521
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a4c94a6c02fb89c1a1604c87414956acd"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">SVF::LLVMUtil::getPrevInsts</a></div><div class="ttdeci">void getPrevInsts(const Instruction *curInst, std::vector< const SVFInstruction * > &instList)</div><div class="ttdoc">Get the previous instructions following control flow.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00381">LLVMUtil.cpp:381</a></div></div>
|
|
1522
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a45da980cb7c085942bb8e6010db9d84f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a45da980cb7c085942bb8e6010db9d84f">SVF::LLVMUtil::isLoadVtblInst</a></div><div class="ttdeci">bool isLoadVtblInst(const LoadInst *loadInst)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00985">LLVMUtil.cpp:985</a></div></div>
|
|
1451
1523
|
<div class="ttc" id="aSVFFileSystem_8cpp_html_ab25baccb41e3b67ef0bfdaa1336c9649"><div class="ttname"><a href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a></div><div class="ttdeci">#define F(f)</div></div>
|
|
1452
1524
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a4638a12f5481dff947b59cf8353e619b"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a4638a12f5481dff947b59cf8353e619b">SVF::LLVMUtil::isIntrinsicFun</a></div><div class="ttdeci">bool isIntrinsicFun(const Function *func)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00202">LLVMUtil.cpp:202</a></div></div>
|
|
1453
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ae617611b584e3d899984c376a6e91987"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ae617611b584e3d899984c376a6e91987">SVF::LLVMUtil::getBBPredecessorNum</a></div><div class="ttdeci">u32_t getBBPredecessorNum(const BasicBlock *BB)</div><div class="ttdoc">Get num of BB's predecessors.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1525
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ae617611b584e3d899984c376a6e91987"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ae617611b584e3d899984c376a6e91987">SVF::LLVMUtil::getBBPredecessorNum</a></div><div class="ttdeci">u32_t getBBPredecessorNum(const BasicBlock *BB)</div><div class="ttdoc">Get num of BB's predecessors.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00473">LLVMUtil.cpp:473</a></div></div>
|
|
1454
1526
|
<div class="ttc" id="anamespaceSVF_html_a3011dbac9102f044ad5f36a4ad3d4a71"><div class="ttname"><a href="namespaceSVF.html#a3011dbac9102f044ad5f36a4ad3d4a71">SVF::NamedMDNode</a></div><div class="ttdeci">llvm::NamedMDNode NamedMDNode</div><div class="ttdoc">LLVM metadata and debug information.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00109">BasicTypes.h:109</a></div></div>
|
|
1455
1527
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a5a7dc8680a9714e08b01dd339b85bb20"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a5a7dc8680a9714e08b01dd339b85bb20">SVF::LLVMUtil::isCallSite</a></div><div class="ttdeci">bool isCallSite(const Instruction *inst)</div><div class="ttdoc">Whether an instruction is a call or invoke instruction.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00046">LLVMUtil.h:46</a></div></div>
|
|
1456
1528
|
<div class="ttc" id="anamespaceSVF_html_a28eec26ec8edaa5e96aecfeb01f6c0d4"><div class="ttname"><a href="namespaceSVF.html#a28eec26ec8edaa5e96aecfeb01f6c0d4">SVF::MDString</a></div><div class="ttdeci">llvm::MDString MDString</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
|
|
1457
1529
|
<div class="ttc" id="aclassSVF_1_1ExtAPI_html_a26bc352dbfd1b2fe34106a73f1f6d50c"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a26bc352dbfd1b2fe34106a73f1f6d50c">SVF::ExtAPI::getExtBcPath</a></div><div class="ttdeci">std::string getExtBcPath()</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00123">ExtAPI.cpp:123</a></div></div>
|
|
1458
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_afbd60d5443c7fa1448813d00bb5d0fa7"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">SVF::LLVMUtil::getNextInsts</a></div><div class="ttdeci">void getNextInsts(const Instruction *curInst, std::vector< const SVFInstruction * > &instList)</div><div class="ttdoc">Get the next instructions following control flow.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1530
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_afbd60d5443c7fa1448813d00bb5d0fa7"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">SVF::LLVMUtil::getNextInsts</a></div><div class="ttdeci">void getNextInsts(const Instruction *curInst, std::vector< const SVFInstruction * > &instList)</div><div class="ttdoc">Get the next instructions following control flow.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00352">LLVMUtil.cpp:352</a></div></div>
|
|
1459
1531
|
<div class="ttc" id="aclassSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00626">SVFValue.h:626</a></div></div>
|
|
1460
1532
|
<div class="ttc" id="anamespaceSVF_html_ad781b0b14e89773e774072b280658ef3"><div class="ttname"><a href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">SVF::s64_t</a></div><div class="ttdeci">signed long long s64_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00054">SVFType.h:54</a></div></div>
|
|
1461
1533
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a003b769751b93b94bdb011bd704cfde1"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">SVF::LLVMUtil::isIntrinsicInst</a></div><div class="ttdeci">bool isIntrinsicInst(const Instruction *inst)</div><div class="ttdoc">Return true if it is an intrinsic instruction.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00216">LLVMUtil.cpp:216</a></div></div>
|
|
1462
1534
|
<div class="ttc" id="aSymbolTableInfo_8h_html"><div class="ttname"><a href="SymbolTableInfo_8h.html">SymbolTableInfo.h</a></div></div>
|
|
1463
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a8cd4d6410017b9e5f47f2f88450b78d8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a8cd4d6410017b9e5f47f2f88450b78d8">SVF::LLVMUtil::getFunAnnotations</a></div><div class="ttdeci">std::vector< std::string > getFunAnnotations(const Function *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1464
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a09683d4d88a50fa621809c734465f94d"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a09683d4d88a50fa621809c734465f94d">SVF::LLVMUtil::getTypeSizeInBytes</a></div><div class="ttdeci">u32_t getTypeSizeInBytes(const Type *type)</div><div class="ttdoc">Helper method to get the size of the type from target data layout.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1535
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a8cd4d6410017b9e5f47f2f88450b78d8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a8cd4d6410017b9e5f47f2f88450b78d8">SVF::LLVMUtil::getFunAnnotations</a></div><div class="ttdeci">std::vector< std::string > getFunAnnotations(const Function *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00530">LLVMUtil.cpp:530</a></div></div>
|
|
1536
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a09683d4d88a50fa621809c734465f94d"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a09683d4d88a50fa621809c734465f94d">SVF::LLVMUtil::getTypeSizeInBytes</a></div><div class="ttdeci">u32_t getTypeSizeInBytes(const Type *type)</div><div class="ttdoc">Helper method to get the size of the type from target data layout.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00730">LLVMUtil.cpp:730</a></div></div>
|
|
1465
1537
|
<div class="ttc" id="aclassSVF_1_1SVFValue_html_a7effb0f37f486745e0cdc3ae5e9c732b"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a7effb0f37f486745e0cdc3ae5e9c732b">SVF::SVFValue::getSourceLoc</a></div><div class="ttdeci">virtual const std::string getSourceLoc() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00280">SVFValue.h:280</a></div></div>
|
|
1466
1538
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_abba4111230f6009bbf50518ee36a9870"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">SVF::LLVMUtil::getPtrElementType</a></div><div class="ttdeci">static Type * getPtrElementType(const PointerType *pty)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00119">LLVMUtil.h:119</a></div></div>
|
|
1467
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a718c8ec79f36cef5df2f4530541f2770"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a718c8ec79f36cef5df2f4530541f2770">SVF::LLVMUtil::getVCallIdx</a></div><div class="ttdeci">s32_t getVCallIdx(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1468
|
-
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a6dd1590b82d2bd86766886bd21bc2b72"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a6dd1590b82d2bd86766886bd21bc2b72">SVF::LLVMUtil::isConstructor</a></div><div class="ttdeci">bool isConstructor(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#
|
|
1539
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a718c8ec79f36cef5df2f4530541f2770"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a718c8ec79f36cef5df2f4530541f2770">SVF::LLVMUtil::getVCallIdx</a></div><div class="ttdeci">s32_t getVCallIdx(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01299">LLVMUtil.cpp:1299</a></div></div>
|
|
1540
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a6dd1590b82d2bd86766886bd21bc2b72"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a6dd1590b82d2bd86766886bd21bc2b72">SVF::LLVMUtil::isConstructor</a></div><div class="ttdeci">bool isConstructor(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01141">LLVMUtil.cpp:1141</a></div></div>
|
|
1469
1541
|
<div class="ttc" id="anamespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00051">SVFType.h:51</a></div></div>
|
|
1470
1542
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ab65033f068bfbeb0a1c52dcec3beb6bc"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVF::SVFUtil::errs</a></div><div class="ttdeci">std::ostream & errs()</div><div class="ttdoc">Overwrite llvm::errs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00056">SVFUtil.h:56</a></div></div>
|
|
1471
1543
|
<div class="ttc" id="anamespaceSVF_html_a58cdfbc4160cae08745b67844ac29801"><div class="ttname"><a href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">SVF::Argument</a></div><div class="ttdeci">llvm::Argument Argument</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00143">BasicTypes.h:143</a></div></div>
|
|
1472
|
-
<div class="ttc" id="anamespaceSVF_html_a255efa5be786996cbdd0c1f3d98b8400"><div class="ttname"><a href="namespaceSVF.html#a255efa5be786996cbdd0c1f3d98b8400">SVF::SuccBBAndCondValPair</a></div><div class="ttdeci">std::pair< const BasicBlock *, const ConstantInt * > SuccBBAndCondValPair</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#
|
|
1544
|
+
<div class="ttc" id="anamespaceSVF_html_a255efa5be786996cbdd0c1f3d98b8400"><div class="ttname"><a href="namespaceSVF.html#a255efa5be786996cbdd0c1f3d98b8400">SVF::SuccBBAndCondValPair</a></div><div class="ttdeci">std::pair< const BasicBlock *, const ConstantInt * > SuccBBAndCondValPair</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00183">BasicTypes.h:183</a></div></div>
|
|
1473
1545
|
<!-- start footer part -->
|
|
1474
1546
|
<hr class="footer"/><address class="footer"><small>
|
|
1475
1547
|
Generated by  <a href="http://www.doxygen.org/index.html">
|