svf-tools 1.0.828 → 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 +1135 -1037
- package/SVF-doxygen/html/LLVMUtil_8h.html +8 -5
- package/SVF-doxygen/html/LLVMUtil_8h_source.html +418 -415
- 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 +651 -640
- package/SVF-doxygen/html/SymbolTableBuilder_8h_source.html +18 -18
- 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 -30
- 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-members.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +642 -629
- 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_a.html +1 -1
- package/SVF-doxygen/html/functions_func.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/menudata.js +0 -1
- package/SVF-doxygen/html/namespaceSVF.html +43 -25
- package/SVF-doxygen/html/namespaceSVF_1_1LLVMUtil.html +1280 -1152
- package/SVF-doxygen/html/namespacemembers_d.html +7 -1
- package/SVF-doxygen/html/namespacemembers_func_d.html +7 -1
- package/SVF-doxygen/html/namespacemembers_func_g.html +7 -4
- package/SVF-doxygen/html/namespacemembers_g.html +11 -5
- package/SVF-doxygen/html/namespacemembers_l.html +0 -3
- package/SVF-doxygen/html/namespacemembers_type_g.html +3 -0
- package/SVF-doxygen/html/search/all_1.js +1 -1
- 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_4.js +8 -6
- package/SVF-doxygen/html/search/all_5.js +119 -119
- package/SVF-doxygen/html/search/all_6.js +226 -226
- package/SVF-doxygen/html/search/all_7.js +1048 -1046
- 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 -116
- 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 -76
- 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 -26
- 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 +2 -1
- package/svf-llvm/include/SVF-LLVM/BasicTypes.h +1 -0
- package/svf-llvm/include/SVF-LLVM/LLVMUtil.h +11 -8
- package/svf-llvm/include/SVF-LLVM/SymbolTableBuilder.h +1 -1
- package/svf-llvm/lib/LLVMModule.cpp +1 -0
- package/svf-llvm/lib/LLVMUtil.cpp +112 -18
- package/svf-llvm/lib/SVFIRBuilder.cpp +3 -1
- package/svf-llvm/lib/SymbolTableBuilder.cpp +21 -9
|
@@ -258,6 +258,7 @@ void SymbolTableInfo::printFlattenFields(const SVFType* type)
|
|
|
258
258
|
}
|
|
259
259
|
else if (const SVFPointerType* pt= SVFUtil::dyn_cast<SVFPointerType>(type))
|
|
260
260
|
{
|
|
261
|
+
// TODO: getPtrElementType to be removed
|
|
261
262
|
u32_t eSize = getNumOfFlattenElements(pt->getPtrElementType());
|
|
262
263
|
outs() << " {Type: " << *pt << "}\n"
|
|
263
264
|
<< "\t [target size = " << eSize << "]\n"
|
|
@@ -373,7 +374,7 @@ bool ObjTypeInfo::isNonPtrFieldObj(const APOffset& apOffset)
|
|
|
373
374
|
if (hasPtrObj() == false)
|
|
374
375
|
return true;
|
|
375
376
|
|
|
376
|
-
const SVFType* ety =
|
|
377
|
+
const SVFType* ety = type;
|
|
377
378
|
|
|
378
379
|
if (SVFUtil::isa<SVFStructType, SVFArrayType>(ety))
|
|
379
380
|
{
|
|
@@ -177,6 +177,7 @@ typedef llvm::VAStartInst VAStartInst;
|
|
|
177
177
|
typedef llvm::BinaryOperator BinaryOperator;
|
|
178
178
|
typedef llvm::UnaryOperator UnaryOperator;
|
|
179
179
|
typedef llvm::UndefValue UndefValue;
|
|
180
|
+
typedef llvm::GEPOperator GEPOperator;
|
|
180
181
|
|
|
181
182
|
// Related to Switch Case
|
|
182
183
|
typedef std::pair<const BasicBlock*, const ConstantInt*> SuccBBAndCondValPair;
|
|
@@ -126,6 +126,10 @@ static inline Type* getPtrElementType(const PointerType* pty)
|
|
|
126
126
|
#endif
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
+
/// Infer type based on llvm value, this is for the migration to opaque pointer
|
|
130
|
+
/// please refer to: https://llvm.org/docs/OpaquePointers.html#migration-instructions
|
|
131
|
+
Type *getPointeeType(const Value *value);
|
|
132
|
+
|
|
129
133
|
/// Get the reference type of heap/static object from an allocation site.
|
|
130
134
|
//@{
|
|
131
135
|
inline const PointerType *getRefTypeOfHeapAllocOrStatic(const CallBase* cs)
|
|
@@ -139,6 +143,7 @@ inline const PointerType *getRefTypeOfHeapAllocOrStatic(const CallBase* cs)
|
|
|
139
143
|
int argPos = SVFUtil::getHeapAllocHoldingArgPosition(svfcs);
|
|
140
144
|
const Value* arg = cs->getArgOperand(argPos);
|
|
141
145
|
if (const PointerType *argType = SVFUtil::dyn_cast<PointerType>(arg->getType()))
|
|
146
|
+
// TODO: getPtrElementType need type inference
|
|
142
147
|
refType = SVFUtil::dyn_cast<PointerType>(getPtrElementType(argType));
|
|
143
148
|
}
|
|
144
149
|
// Case 2: heap object held by return value.
|
|
@@ -389,6 +394,7 @@ inline u32_t SVFType2ByteSize(const SVFType* type)
|
|
|
389
394
|
const llvm::Type* llvm_rhs = LLVMModuleSet::getLLVMModuleSet()->getLLVMType(type);
|
|
390
395
|
const llvm::PointerType* llvm_rhs_ptr = SVFUtil::dyn_cast<PointerType>(llvm_rhs);
|
|
391
396
|
assert(llvm_rhs_ptr && "not a pointer type?");
|
|
397
|
+
// TODO: getPtrElementType need type inference
|
|
392
398
|
const Type *ptrElementType = getPtrElementType(llvm_rhs_ptr);
|
|
393
399
|
u32_t llvm_rhs_size = LLVMUtil::getTypeSizeInBytes(ptrElementType);
|
|
394
400
|
u32_t llvm_elem_size = -1;
|
|
@@ -496,7 +502,7 @@ const Argument* getConstructorThisPtr(const Function* fun);
|
|
|
496
502
|
const Value* getVCallThisPtr(const CallBase* cs);
|
|
497
503
|
const Value* getVCallVtblPtr(const CallBase* cs);
|
|
498
504
|
s32_t getVCallIdx(const CallBase* cs);
|
|
499
|
-
std::string getClassNameFromType(const
|
|
505
|
+
std::string getClassNameFromType(const StructType* ty);
|
|
500
506
|
std::string getClassNameOfThisPtr(const CallBase* cs);
|
|
501
507
|
std::string getFunNameOfVCallSite(const CallBase* cs);
|
|
502
508
|
bool VCallInCtorOrDtor(const CallBase* cs);
|
|
@@ -513,13 +519,10 @@ bool VCallInCtorOrDtor(const CallBase* cs);
|
|
|
513
519
|
bool isSameThisPtrInConstructor(const Argument* thisPtr1,
|
|
514
520
|
const Value* thisPtr2);
|
|
515
521
|
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
llvm::raw_string_ostream(str) << val;
|
|
521
|
-
return str;
|
|
522
|
-
}
|
|
522
|
+
std::string dumpValue(const Value* val);
|
|
523
|
+
|
|
524
|
+
std::string dumpType(const Type* type);
|
|
525
|
+
|
|
523
526
|
|
|
524
527
|
/**
|
|
525
528
|
* See more: https://github.com/SVF-tools/SVF/pull/1191
|
|
@@ -90,7 +90,7 @@ protected:
|
|
|
90
90
|
/// Analyse types of all flattened fields of this object
|
|
91
91
|
void analyzeObjType(ObjTypeInfo* typeinfo, const Value* val);
|
|
92
92
|
/// Analyse types of heap and static objects
|
|
93
|
-
|
|
93
|
+
u32_t analyzeHeapObjType(ObjTypeInfo* typeinfo, const Value* val);
|
|
94
94
|
/// Analyse types of heap and static objects
|
|
95
95
|
void analyzeStaticObjType(ObjTypeInfo* typeinfo, const Value* val);
|
|
96
96
|
|
|
@@ -1384,6 +1384,7 @@ SVFType* LLVMModuleSet::addSVFTypeInfo(const Type* T)
|
|
|
1384
1384
|
//cast svftype to SVFPointerType
|
|
1385
1385
|
SVFPointerType* svfPtrType = SVFUtil::dyn_cast<SVFPointerType>(svftype);
|
|
1386
1386
|
assert(svfPtrType && "this is not SVFPointerType");
|
|
1387
|
+
// TODO: getPtrElementType to be removed
|
|
1387
1388
|
svfPtrType->setPtrElementType(getSVFType(LLVMUtil::getPtrElementType(pt)));
|
|
1388
1389
|
}
|
|
1389
1390
|
|
|
@@ -241,6 +241,71 @@ const Value* LLVMUtil::stripConstantCasts(const Value* val)
|
|
|
241
241
|
return val;
|
|
242
242
|
}
|
|
243
243
|
|
|
244
|
+
/// Infer type based on llvm value, this is for the migration to opaque pointer
|
|
245
|
+
/// please refer to: https://llvm.org/docs/OpaquePointers.html#migration-instructions
|
|
246
|
+
Type *LLVMUtil::getPointeeType(const Value *value)
|
|
247
|
+
{
|
|
248
|
+
assert(value && "value cannot be nullptr!");
|
|
249
|
+
if (const LoadInst *loadInst = SVFUtil::dyn_cast<LoadInst>(value))
|
|
250
|
+
{
|
|
251
|
+
// get the pointee type of rhs based on lhs
|
|
252
|
+
// e.g., for `%lhs = load i64, ptr %rhs`, we return i64
|
|
253
|
+
return loadInst->getType();
|
|
254
|
+
}
|
|
255
|
+
else if (const StoreInst *storeInst = SVFUtil::dyn_cast<StoreInst>(value))
|
|
256
|
+
{
|
|
257
|
+
// get the pointee type of op1 based on op0
|
|
258
|
+
// e.g., for `store i64 %op0, ptr %op1`, we return i64
|
|
259
|
+
return storeInst->getValueOperand()->getType();
|
|
260
|
+
}
|
|
261
|
+
else if (const GetElementPtrInst *gepInst = SVFUtil::dyn_cast<GetElementPtrInst>(value))
|
|
262
|
+
{
|
|
263
|
+
// get the source element type of a gep instruction
|
|
264
|
+
// e.g., for `gep %struct.foo, ptr %base, i64 0`, we return struct.foo
|
|
265
|
+
return gepInst->getSourceElementType();
|
|
266
|
+
}
|
|
267
|
+
else if (const GEPOperator* gepOperator = SVFUtil::dyn_cast<GEPOperator>(value))
|
|
268
|
+
{
|
|
269
|
+
// get the source element type of a gep instruction
|
|
270
|
+
// e.g., for `gep %struct.foo, ptr %base, i64 0`, we return struct.foo
|
|
271
|
+
return gepOperator->getSourceElementType();
|
|
272
|
+
}
|
|
273
|
+
else if (const CallInst *callInst = SVFUtil::dyn_cast<CallInst>(value))
|
|
274
|
+
{
|
|
275
|
+
// get the pointee type of return value
|
|
276
|
+
// e.g., for `%call = call ptr @_Znwm(i64 noundef 8)`, we return i64
|
|
277
|
+
return callInst->getFunctionType();
|
|
278
|
+
}
|
|
279
|
+
else if (const CallBase *callBase = SVFUtil::dyn_cast<CallBase>(value))
|
|
280
|
+
{
|
|
281
|
+
// get the pointee type of return value
|
|
282
|
+
// e.g., for `%call = call ptr @_Znwm(i64 noundef 8)`, we return i64
|
|
283
|
+
return callBase->getFunctionType();
|
|
284
|
+
}
|
|
285
|
+
else if (const AllocaInst *allocaInst = SVFUtil::dyn_cast<AllocaInst>(value))
|
|
286
|
+
{
|
|
287
|
+
// get the type of the allocated memory
|
|
288
|
+
// e.g., for `%retval = alloca i64, align 4`, we return i64
|
|
289
|
+
return allocaInst->getAllocatedType();
|
|
290
|
+
}
|
|
291
|
+
else if (const GlobalVariable *globalVar = SVFUtil::dyn_cast<GlobalVariable>(value))
|
|
292
|
+
{
|
|
293
|
+
// get the pointee type of the global pointer
|
|
294
|
+
return globalVar->getValueType();
|
|
295
|
+
}
|
|
296
|
+
else if (const Function* func = SVFUtil::dyn_cast<Function>(value))
|
|
297
|
+
{
|
|
298
|
+
// get the pointee type of return value
|
|
299
|
+
// e.g., for `%call = call ptr @_Znwm(i64 noundef 8)`, we return i64
|
|
300
|
+
return func->getFunctionType();
|
|
301
|
+
}
|
|
302
|
+
else
|
|
303
|
+
{
|
|
304
|
+
assert(false && (LLVMUtil::dumpValue(value) + "Unknown llvm Type, cannot get Ptr Element Type").c_str());
|
|
305
|
+
abort();
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
244
309
|
void LLVMUtil::viewCFG(const Function* fun)
|
|
245
310
|
{
|
|
246
311
|
if (fun != nullptr)
|
|
@@ -351,6 +416,7 @@ const Value* LLVMUtil::getFirstUseViaCastInst(const Value* val)
|
|
|
351
416
|
const PointerType * type = SVFUtil::dyn_cast<PointerType>(val->getType());
|
|
352
417
|
assert(type && "this value should be a pointer type!");
|
|
353
418
|
/// If type is void* (i8*) and val is immediately used at a bitcast instruction
|
|
419
|
+
// TODO: getPtrElementType to be removed
|
|
354
420
|
if (IntegerType *IT = SVFUtil::dyn_cast<IntegerType>(getPtrElementType(type)))
|
|
355
421
|
{
|
|
356
422
|
if (IT->getBitWidth() == 8)
|
|
@@ -397,6 +463,7 @@ const Type* LLVMUtil::getTypeOfHeapAlloc(const Instruction *inst)
|
|
|
397
463
|
}
|
|
398
464
|
|
|
399
465
|
assert(type && "not a pointer type?");
|
|
466
|
+
// TODO: getPtrElementType need type inference
|
|
400
467
|
return getPtrElementType(type);
|
|
401
468
|
}
|
|
402
469
|
|
|
@@ -922,6 +989,7 @@ bool LLVMUtil::isLoadVtblInst(const LoadInst* loadInst)
|
|
|
922
989
|
const Type* elemTy = valTy;
|
|
923
990
|
for (u32_t i = 0; i < 3; ++i)
|
|
924
991
|
{
|
|
992
|
+
// TODO: getPtrElementType to be removed
|
|
925
993
|
if (const PointerType* ptrTy = SVFUtil::dyn_cast<PointerType>(elemTy))
|
|
926
994
|
elemTy = LLVMUtil::getPtrElementType(ptrTy);
|
|
927
995
|
else
|
|
@@ -930,7 +998,13 @@ bool LLVMUtil::isLoadVtblInst(const LoadInst* loadInst)
|
|
|
930
998
|
if (const FunctionType* functy = SVFUtil::dyn_cast<FunctionType>(elemTy))
|
|
931
999
|
{
|
|
932
1000
|
const Type* paramty = functy->getParamType(0);
|
|
933
|
-
std::string className =
|
|
1001
|
+
std::string className = "";
|
|
1002
|
+
if(const PointerType* ptrTy = SVFUtil::dyn_cast<PointerType>(paramty))
|
|
1003
|
+
{
|
|
1004
|
+
// TODO: getPtrElementType need type inference
|
|
1005
|
+
if(const StructType* st = SVFUtil::dyn_cast<StructType>(getPtrElementType(ptrTy)))
|
|
1006
|
+
className = LLVMUtil::getClassNameFromType(st);
|
|
1007
|
+
}
|
|
934
1008
|
if (className.size() > 0)
|
|
935
1009
|
{
|
|
936
1010
|
return true;
|
|
@@ -1163,25 +1237,19 @@ bool LLVMUtil::VCallInCtorOrDtor(const CallBase* cs)
|
|
|
1163
1237
|
return false;
|
|
1164
1238
|
}
|
|
1165
1239
|
|
|
1166
|
-
std::string LLVMUtil::getClassNameFromType(const
|
|
1240
|
+
std::string LLVMUtil::getClassNameFromType(const StructType* ty)
|
|
1167
1241
|
{
|
|
1168
1242
|
std::string className = "";
|
|
1169
|
-
if (
|
|
1243
|
+
if (!((SVFUtil::cast<StructType>(ty))->isLiteral()))
|
|
1170
1244
|
{
|
|
1171
|
-
|
|
1172
|
-
if (
|
|
1173
|
-
!((SVFUtil::cast<StructType>(elemType))->isLiteral()))
|
|
1245
|
+
std::string elemTypeName = ty->getStructName().str();
|
|
1246
|
+
if (elemTypeName.compare(0, clsName.size(), clsName) == 0)
|
|
1174
1247
|
{
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
else if (elemTypeName.compare(0, structName.size(), structName) ==
|
|
1181
|
-
0)
|
|
1182
|
-
{
|
|
1183
|
-
className = elemTypeName.substr(structName.size());
|
|
1184
|
-
}
|
|
1248
|
+
className = elemTypeName.substr(clsName.size());
|
|
1249
|
+
}
|
|
1250
|
+
else if (elemTypeName.compare(0, structName.size(), structName) == 0)
|
|
1251
|
+
{
|
|
1252
|
+
className = elemTypeName.substr(structName.size());
|
|
1185
1253
|
}
|
|
1186
1254
|
}
|
|
1187
1255
|
return className;
|
|
@@ -1189,7 +1257,7 @@ std::string LLVMUtil::getClassNameFromType(const Type* ty)
|
|
|
1189
1257
|
|
|
1190
1258
|
std::string LLVMUtil::getClassNameOfThisPtr(const CallBase* inst)
|
|
1191
1259
|
{
|
|
1192
|
-
std::string thisPtrClassName;
|
|
1260
|
+
std::string thisPtrClassName = "";
|
|
1193
1261
|
if (const MDNode* N = inst->getMetadata("VCallPtrType"))
|
|
1194
1262
|
{
|
|
1195
1263
|
const MDString* mdstr = SVFUtil::cast<MDString>(N->getOperand(0).get());
|
|
@@ -1198,7 +1266,10 @@ std::string LLVMUtil::getClassNameOfThisPtr(const CallBase* inst)
|
|
|
1198
1266
|
if (thisPtrClassName.size() == 0)
|
|
1199
1267
|
{
|
|
1200
1268
|
const Value* thisPtr = LLVMUtil::getVCallThisPtr(inst);
|
|
1201
|
-
|
|
1269
|
+
if(const PointerType* ptrTy = SVFUtil::dyn_cast<PointerType>(thisPtr->getType()))
|
|
1270
|
+
// TODO: getPtrElementType need type inference
|
|
1271
|
+
if(const StructType* st = SVFUtil::dyn_cast<StructType>(getPtrElementType(ptrTy)))
|
|
1272
|
+
thisPtrClassName = getClassNameFromType(st);
|
|
1202
1273
|
}
|
|
1203
1274
|
|
|
1204
1275
|
size_t found = thisPtrClassName.find_last_not_of("0123456789");
|
|
@@ -1285,6 +1356,29 @@ s64_t LLVMUtil::getCaseValue(const SwitchInst &switchInst, SuccBBAndCondValPair
|
|
|
1285
1356
|
return val;
|
|
1286
1357
|
}
|
|
1287
1358
|
|
|
1359
|
+
std::string LLVMUtil::dumpValue(const Value* val)
|
|
1360
|
+
{
|
|
1361
|
+
std::string str;
|
|
1362
|
+
llvm::raw_string_ostream rawstr(str);
|
|
1363
|
+
if (val)
|
|
1364
|
+
rawstr << " " << *val << " ";
|
|
1365
|
+
else
|
|
1366
|
+
rawstr << " llvm Value is null";
|
|
1367
|
+
return rawstr.str();
|
|
1368
|
+
}
|
|
1369
|
+
|
|
1370
|
+
std::string LLVMUtil::dumpType(const Type* type)
|
|
1371
|
+
{
|
|
1372
|
+
std::string str;
|
|
1373
|
+
llvm::raw_string_ostream rawstr(str);
|
|
1374
|
+
if (type)
|
|
1375
|
+
rawstr << " " << *type << " ";
|
|
1376
|
+
else
|
|
1377
|
+
rawstr << " llvm type is null";
|
|
1378
|
+
return rawstr.str();
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1381
|
+
|
|
1288
1382
|
namespace SVF
|
|
1289
1383
|
{
|
|
1290
1384
|
|
|
@@ -318,8 +318,10 @@ bool SVFIRBuilder::computeGepOffset(const User *V, AccessPath& ap)
|
|
|
318
318
|
// If it's a non-constant offset access
|
|
319
319
|
// If its point-to target is struct or array, it's likely an array accessing (%result = gep %struct.A* %a, i32 %non-const-index)
|
|
320
320
|
// If its point-to target is single value (pointer arithmetic), then it's a variant gep (%result = gep i8* %p, i32 %non-const-index)
|
|
321
|
-
if(!op && gepTy->isPointerTy() &&
|
|
321
|
+
if(!op && gepTy->isPointerTy() && LLVMUtil::getPointeeType(V)->isSingleValueType())
|
|
322
|
+
{
|
|
322
323
|
isConst = false;
|
|
324
|
+
}
|
|
323
325
|
|
|
324
326
|
// The actual index
|
|
325
327
|
//s32_t idx = op->getSExtValue();
|
|
@@ -237,6 +237,7 @@ void SymbolTableBuilder::collectSVFTypeInfo(const Value* val)
|
|
|
237
237
|
(void)getOrAddSVFTypeInfo(val->getType());
|
|
238
238
|
if (const PointerType * ptrType = SVFUtil::dyn_cast<PointerType>(val->getType()))
|
|
239
239
|
{
|
|
240
|
+
// TODO: getPtrElementType to be removed
|
|
240
241
|
const Type* objtype = LLVMUtil::getPtrElementType(ptrType);
|
|
241
242
|
(void)getOrAddSVFTypeInfo(objtype);
|
|
242
243
|
}
|
|
@@ -575,6 +576,7 @@ void SymbolTableBuilder::handleGlobalInitializerCE(const Constant* C)
|
|
|
575
576
|
*/
|
|
576
577
|
ObjTypeInfo* SymbolTableBuilder::createObjTypeInfo(const Value* val)
|
|
577
578
|
{
|
|
579
|
+
/// TODO: getPtrElementType to be removed
|
|
578
580
|
const PointerType* refTy = nullptr;
|
|
579
581
|
|
|
580
582
|
const Instruction* I = SVFUtil::dyn_cast<Instruction>(val);
|
|
@@ -627,7 +629,8 @@ void SymbolTableBuilder::analyzeObjType(ObjTypeInfo* typeinfo, const Value* val)
|
|
|
627
629
|
|
|
628
630
|
const PointerType* refty = SVFUtil::dyn_cast<PointerType>(val->getType());
|
|
629
631
|
assert(refty && "this value should be a pointer type!");
|
|
630
|
-
|
|
632
|
+
// TODO: getPtrElementType need type inference
|
|
633
|
+
Type *elemTy = getPtrElementType(refty);
|
|
631
634
|
bool isPtrObj = false;
|
|
632
635
|
// Find the inter nested array element
|
|
633
636
|
while (const ArrayType* AT = SVFUtil::dyn_cast<ArrayType>(elemTy))
|
|
@@ -753,20 +756,32 @@ u32_t SymbolTableBuilder::analyzeHeapAllocByteSize(const Value* val)
|
|
|
753
756
|
/*!
|
|
754
757
|
* Analyse types of heap and static objects
|
|
755
758
|
*/
|
|
756
|
-
|
|
759
|
+
u32_t SymbolTableBuilder::analyzeHeapObjType(ObjTypeInfo* typeinfo, const Value* val)
|
|
757
760
|
{
|
|
758
761
|
if(const Value* castUse = getFirstUseViaCastInst(val))
|
|
759
762
|
{
|
|
760
763
|
typeinfo->setFlag(ObjTypeInfo::HEAP_OBJ);
|
|
761
|
-
|
|
762
|
-
|
|
764
|
+
const Type* objTy = getTypeOfHeapAlloc(SVFUtil::cast<Instruction>(val));
|
|
765
|
+
typeinfo->resetTypeForHeapStaticObj(LLVMModuleSet::getLLVMModuleSet()->getSVFType(objTy));
|
|
763
766
|
analyzeObjType(typeinfo,castUse);
|
|
767
|
+
if(SVFUtil::isa<ArrayType>(objTy))
|
|
768
|
+
return getNumOfElements(objTy);
|
|
769
|
+
else if(const StructType* st = SVFUtil::dyn_cast<StructType>(objTy))
|
|
770
|
+
{
|
|
771
|
+
/// For an C++ class, it can have variant elements depending on the vtable size,
|
|
772
|
+
/// Hence we only handle non-cpp-class object, the type of the cpp class is treated as PointerType at the cast site
|
|
773
|
+
if(getClassNameFromType(st).empty())
|
|
774
|
+
return getNumOfElements(objTy);
|
|
775
|
+
else
|
|
776
|
+
typeinfo->resetTypeForHeapStaticObj(LLVMModuleSet::getLLVMModuleSet()->getSVFType(castUse->getType()));
|
|
777
|
+
}
|
|
764
778
|
}
|
|
765
779
|
else
|
|
766
780
|
{
|
|
767
781
|
typeinfo->setFlag(ObjTypeInfo::HEAP_OBJ);
|
|
768
782
|
typeinfo->setFlag(ObjTypeInfo::HASPTR_OBJ);
|
|
769
783
|
}
|
|
784
|
+
return typeinfo->getMaxFieldOffsetLimit();
|
|
770
785
|
}
|
|
771
786
|
|
|
772
787
|
/*!
|
|
@@ -777,8 +792,7 @@ void SymbolTableBuilder::analyzeStaticObjType(ObjTypeInfo* typeinfo, const Value
|
|
|
777
792
|
if(const Value* castUse = getFirstUseViaCastInst(val))
|
|
778
793
|
{
|
|
779
794
|
typeinfo->setFlag(ObjTypeInfo::STATIC_OBJ);
|
|
780
|
-
typeinfo->resetTypeForHeapStaticObj(
|
|
781
|
-
LLVMModuleSet::getLLVMModuleSet()->getSVFType(castUse->getType()));
|
|
795
|
+
typeinfo->resetTypeForHeapStaticObj(LLVMModuleSet::getLLVMModuleSet()->getSVFType(castUse->getType()));
|
|
782
796
|
analyzeObjType(typeinfo,castUse);
|
|
783
797
|
}
|
|
784
798
|
else
|
|
@@ -844,9 +858,7 @@ void SymbolTableBuilder::initTypeInfo(ObjTypeInfo* typeinfo, const Value* val,
|
|
|
844
858
|
LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(
|
|
845
859
|
SVFUtil::cast<Instruction>(val))))
|
|
846
860
|
{
|
|
847
|
-
analyzeHeapObjType(typeinfo,val);
|
|
848
|
-
// Heap object, label its field as infinite here
|
|
849
|
-
elemNum = typeinfo->getMaxFieldOffsetLimit();
|
|
861
|
+
elemNum = analyzeHeapObjType(typeinfo,val);
|
|
850
862
|
// analyze heap alloc like (malloc/calloc/...), the alloc functions have
|
|
851
863
|
// annotation like "AllocSize:Arg1". Please refer to extapi.c.
|
|
852
864
|
// e.g. calloc(4, 10), annotation is "AllocSize:Arg0*Arg1",
|