svf-tools 1.0.894 → 1.0.896
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/AbstractExecution_8cpp_source.html +1 -1
- package/SVF-doxygen/html/AbstractExecution_8h_source.html +1 -1
- package/SVF-doxygen/html/AbstractPointsToDS_8h_source.html +1 -1
- package/SVF-doxygen/html/AbstractValue_8h_source.html +1 -1
- package/SVF-doxygen/html/AccessPath_8cpp_source.html +1 -1
- package/SVF-doxygen/html/AccessPath_8h_source.html +1 -1
- package/SVF-doxygen/html/AddressValue_8h_source.html +1 -1
- package/SVF-doxygen/html/AndersenPWC_8h_source.html +1 -1
- package/SVF-doxygen/html/AndersenSCD_8cpp_source.html +1 -1
- package/SVF-doxygen/html/AndersenSFR_8cpp_source.html +1 -1
- package/SVF-doxygen/html/AndersenStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/AndersenWaveDiff_8cpp_source.html +1 -1
- package/SVF-doxygen/html/Andersen_8cpp_source.html +1 -1
- package/SVF-doxygen/html/Andersen_8h_source.html +1 -1
- package/SVF-doxygen/html/Annotator_8h_source.html +4 -4
- package/SVF-doxygen/html/BasicTypes_8h.html +1 -0
- package/SVF-doxygen/html/BasicTypes_8h_source.html +345 -344
- package/SVF-doxygen/html/BitVector_8cpp_source.html +1 -1
- package/SVF-doxygen/html/BitVector_8h_source.html +1 -1
- package/SVF-doxygen/html/BoundedZ3Expr_8cpp_source.html +1 -1
- package/SVF-doxygen/html/BoundedZ3Expr_8h_source.html +1 -1
- package/SVF-doxygen/html/BreakConstantExpr_8cpp.html +2 -2
- package/SVF-doxygen/html/BreakConstantExpr_8cpp_source.html +6 -6
- package/SVF-doxygen/html/BreakConstantExpr_8h_source.html +5 -5
- package/SVF-doxygen/html/BufOverflowChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/BufOverflowChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/CDGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CDGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/CDG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CDG_8h_source.html +1 -1
- package/SVF-doxygen/html/CFGNormalizer_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CFGNormalizer_8h_source.html +1 -1
- package/SVF-doxygen/html/CFGrammar_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CFGrammar_8h_source.html +2 -2
- package/SVF-doxygen/html/CFLAlias_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CFLAlias_8h_source.html +1 -1
- package/SVF-doxygen/html/CFLBase_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CFLBase_8h_source.html +1 -1
- package/SVF-doxygen/html/CFLGramGraphChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/CFLGraphBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CFLGraphBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/CFLGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CFLGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/CFLSVFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CFLSVFGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/CFLSolver_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CFLSolver_8h_source.html +1 -1
- package/SVF-doxygen/html/CFLStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CFLStat_8h_source.html +1 -1
- package/SVF-doxygen/html/CFLVF_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CFLVF_8h_source.html +1 -1
- package/SVF-doxygen/html/CHGBuilder_8cpp_source.html +304 -303
- package/SVF-doxygen/html/CHGBuilder_8h_source.html +10 -10
- package/SVF-doxygen/html/CHG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CHG_8h_source.html +1 -1
- package/SVF-doxygen/html/CSC_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CSC_8h_source.html +1 -1
- package/SVF-doxygen/html/CallGraphBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CallGraphBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/Casting_8h_source.html +1 -1
- package/SVF-doxygen/html/ConditionalPT_8h_source.html +1 -1
- package/SVF-doxygen/html/ConsExeState_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ConsExeState_8h_source.html +1 -1
- package/SVF-doxygen/html/ConsGEdge_8h_source.html +1 -1
- package/SVF-doxygen/html/ConsGNode_8h_source.html +1 -1
- 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/CoreBitVector_8cpp_source.html +1 -1
- package/SVF-doxygen/html/CoreBitVector_8h_source.html +1 -1
- package/SVF-doxygen/html/CppUtil_8cpp_source.html +17 -17
- package/SVF-doxygen/html/CppUtil_8h_source.html +6 -6
- package/SVF-doxygen/html/CxtStmt_8h_source.html +1 -1
- package/SVF-doxygen/html/DCHG_8cpp_source.html +22 -22
- package/SVF-doxygen/html/DCHG_8h_source.html +7 -7
- package/SVF-doxygen/html/DDAClient_8cpp_source.html +1 -1
- package/SVF-doxygen/html/DDAClient_8h_source.html +1 -1
- package/SVF-doxygen/html/DDAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/DDAPass_8h_source.html +1 -1
- package/SVF-doxygen/html/DDAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/DDAStat_8h_source.html +1 -1
- package/SVF-doxygen/html/DDAVFSolver_8h_source.html +1 -1
- package/SVF-doxygen/html/DOTGraphTraits_8h_source.html +1 -1
- package/SVF-doxygen/html/DPItem_8h_source.html +1 -1
- package/SVF-doxygen/html/DoubleFreeChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/DoubleFreeChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/ExeState_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ExeState_8h_source.html +1 -1
- package/SVF-doxygen/html/ExtAPI_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ExtAPI_8h_source.html +1 -1
- package/SVF-doxygen/html/FSMPTA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/FSMPTA_8h_source.html +1 -1
- package/SVF-doxygen/html/FileChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/FileChecker_8h_source.html +1 -1
- 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/FlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/FlowSensitive_8h_source.html +1 -1
- package/SVF-doxygen/html/GEPTypeBridgeIterator_8h_source.html +3 -3
- package/SVF-doxygen/html/GeneralType_8h_source.html +1 -1
- package/SVF-doxygen/html/GenericGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/GrammarBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/GrammarBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/GraphPrinter_8h_source.html +1 -1
- package/SVF-doxygen/html/GraphReachSolver_8h_source.html +1 -1
- package/SVF-doxygen/html/GraphTraits_8h_source.html +1 -1
- package/SVF-doxygen/html/GraphWriter_8h_source.html +1 -1
- package/SVF-doxygen/html/ICFGBuilder_8cpp_source.html +8 -8
- package/SVF-doxygen/html/ICFGBuilder_8h_source.html +2 -2
- package/SVF-doxygen/html/ICFGEdge_8h_source.html +1 -1
- package/SVF-doxygen/html/ICFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/ICFGSimplification_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ICFGSimplification_8h_source.html +1 -1
- package/SVF-doxygen/html/ICFGStat_8h_source.html +1 -1
- package/SVF-doxygen/html/ICFGWTO_8h_source.html +1 -1
- package/SVF-doxygen/html/ICFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ICFG_8h_source.html +1 -1
- package/SVF-doxygen/html/IRGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/IRGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/IntervalExeState_8cpp_source.html +1 -1
- package/SVF-doxygen/html/IntervalExeState_8h_source.html +1 -1
- package/SVF-doxygen/html/IntervalValue_8h_source.html +1 -1
- package/SVF-doxygen/html/LLVMLoopAnalysis_8cpp_source.html +7 -7
- package/SVF-doxygen/html/LLVMLoopAnalysis_8h_source.html +1 -1
- package/SVF-doxygen/html/LLVMModule_8cpp_source.html +37 -37
- package/SVF-doxygen/html/LLVMModule_8h_source.html +15 -15
- package/SVF-doxygen/html/LLVMUtil_8cpp_source.html +32 -32
- package/SVF-doxygen/html/LLVMUtil_8h_source.html +20 -20
- package/SVF-doxygen/html/LeakChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/LeakChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/LockAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/LockAnalysis_8h_source.html +1 -1
- package/SVF-doxygen/html/LockResultValidator_8cpp_source.html +12 -12
- package/SVF-doxygen/html/LockResultValidator_8h_source.html +2 -2
- package/SVF-doxygen/html/MHP_8cpp_source.html +1 -1
- package/SVF-doxygen/html/MHP_8h_source.html +1 -1
- package/SVF-doxygen/html/MSSAMuChi_8h_source.html +1 -1
- package/SVF-doxygen/html/MTAAnnotator_8cpp_source.html +7 -7
- package/SVF-doxygen/html/MTAAnnotator_8h_source.html +3 -3
- package/SVF-doxygen/html/MTAResultValidator_8cpp_source.html +12 -12
- package/SVF-doxygen/html/MTAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/MTAStat_8h_source.html +2 -2
- package/SVF-doxygen/html/MTA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/MTA_8h_source.html +1 -1
- package/SVF-doxygen/html/MemPartition_8cpp_source.html +1 -1
- package/SVF-doxygen/html/MemPartition_8h_source.html +1 -1
- package/SVF-doxygen/html/MemRegion_8cpp_source.html +1 -1
- package/SVF-doxygen/html/MemRegion_8h_source.html +1 -1
- package/SVF-doxygen/html/MemSSA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/MemSSA_8h_source.html +1 -1
- package/SVF-doxygen/html/MutablePointsToDS_8h_source.html +1 -1
- package/SVF-doxygen/html/NodeIDAllocator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/NodeIDAllocator_8h_source.html +1 -1
- package/SVF-doxygen/html/NumericLiteral_8h_source.html +1 -1
- package/SVF-doxygen/html/ObjTypeInference_8cpp.html +1 -1
- package/SVF-doxygen/html/ObjTypeInference_8cpp_source.html +525 -501
- package/SVF-doxygen/html/ObjTypeInference_8h_source.html +17 -17
- package/SVF-doxygen/html/Options_8cpp_source.html +1 -1
- package/SVF-doxygen/html/Options_8h_source.html +1 -1
- package/SVF-doxygen/html/PAGBuilderFromFile_8cpp_source.html +1 -1
- package/SVF-doxygen/html/PAGBuilderFromFile_8h_source.html +1 -1
- package/SVF-doxygen/html/PCG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/PCG_8h_source.html +1 -1
- package/SVF-doxygen/html/PTACallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/PTACallGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/PTAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/PTAStat_8h_source.html +1 -1
- package/SVF-doxygen/html/PersistentPointsToCache_8h_source.html +1 -1
- package/SVF-doxygen/html/PersistentPointsToDS_8h_source.html +1 -1
- package/SVF-doxygen/html/PointerAnalysisImpl_8cpp_source.html +1 -1
- package/SVF-doxygen/html/PointerAnalysisImpl_8h_source.html +1 -1
- package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/PointerAnalysis_8h_source.html +1 -1
- package/SVF-doxygen/html/PointsTo_8cpp_source.html +1 -1
- package/SVF-doxygen/html/PointsTo_8h_source.html +1 -1
- package/SVF-doxygen/html/ProgSlice_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ProgSlice_8h_source.html +1 -1
- package/SVF-doxygen/html/RelExeState_8cpp_source.html +1 -1
- package/SVF-doxygen/html/RelExeState_8h_source.html +1 -1
- package/SVF-doxygen/html/RelationSolver_8cpp_source.html +1 -1
- package/SVF-doxygen/html/RelationSolver_8h_source.html +1 -1
- package/SVF-doxygen/html/SCC_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFBugReport_8cpp_source.html +2 -2
- package/SVF-doxygen/html/SVFBugReport_8h_source.html +2 -2
- package/SVF-doxygen/html/SVFFileSystem_8cpp.html +1 -1
- package/SVF-doxygen/html/SVFFileSystem_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFFileSystem_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFGEdge_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFGOPT_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFGOPT_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFGReadWrite_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFGStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFGStat_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFG_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFIR2ConsExeState_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFIR2Relation_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFIRBuilder_8cpp_source.html +41 -41
- package/SVF-doxygen/html/SVFIRBuilder_8h_source.html +47 -47
- package/SVF-doxygen/html/SVFIRExtAPI_8cpp_source.html +8 -8
- package/SVF-doxygen/html/SVFIR_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFIR_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFLoop_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFModule_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFModule_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFStat_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFStatements_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFStatements_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFType_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFType_8h_source.html +1 -1
- package/SVF-doxygen/html/SVFUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SVFUtil_8h_source.html +1 -1
- 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/SaberCheckerAPI_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SaberCheckerAPI_8h_source.html +1 -1
- package/SVF-doxygen/html/SaberCondAllocator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SaberCondAllocator_8h_source.html +1 -1
- package/SVF-doxygen/html/SaberSVFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SaberSVFGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/SingleAbsValue_8h_source.html +1 -1
- package/SVF-doxygen/html/SparseBitVector_8h_source.html +2 -2
- package/SVF-doxygen/html/SrcSnkDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SrcSnkDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/SrcSnkSolver_8h_source.html +1 -1
- package/SVF-doxygen/html/Steensgaard_8cpp_source.html +1 -1
- package/SVF-doxygen/html/Steensgaard_8h_source.html +1 -1
- package/SVF-doxygen/html/SymState_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SymState_8h_source.html +1 -1
- package/SVF-doxygen/html/SymbolTableBuilder_8cpp_source.html +34 -34
- package/SVF-doxygen/html/SymbolTableBuilder_8h_source.html +7 -7
- package/SVF-doxygen/html/SymbolTableInfo_8cpp_source.html +1 -1
- package/SVF-doxygen/html/SymbolTableInfo_8h_source.html +1 -1
- package/SVF-doxygen/html/TCT_8cpp_source.html +1 -1
- package/SVF-doxygen/html/TCT_8h_source.html +1 -1
- package/SVF-doxygen/html/ThreadAPI_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ThreadAPI_8h_source.html +1 -1
- package/SVF-doxygen/html/ThreadCallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ThreadCallGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/TypeAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/TypeAnalysis_8h_source.html +1 -1
- package/SVF-doxygen/html/VFGEdge_8h_source.html +1 -1
- package/SVF-doxygen/html/VFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/VFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/VFG_8h_source.html +1 -1
- package/SVF-doxygen/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/VersionedFlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/VersionedFlowSensitive_8h_source.html +1 -1
- package/SVF-doxygen/html/WPAFSSolver_8h_source.html +1 -1
- package/SVF-doxygen/html/WPAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/WPAPass_8h_source.html +1 -1
- package/SVF-doxygen/html/WPASolver_8h_source.html +1 -1
- package/SVF-doxygen/html/WPAStat_8h_source.html +1 -1
- package/SVF-doxygen/html/WTO_8h_source.html +1 -1
- package/SVF-doxygen/html/WorkList_8h_source.html +1 -1
- package/SVF-doxygen/html/Z3Expr_8cpp_source.html +1 -1
- package/SVF-doxygen/html/Z3Expr_8h_source.html +1 -1
- package/SVF-doxygen/html/ae_8cpp_source.html +1 -1
- package/SVF-doxygen/html/cfl_8cpp_source.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1Annotator.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1BreakConstantGEPs.html +4 -4
- package/SVF-doxygen/html/classSVF_1_1CHGBuilder.html +299 -298
- package/SVF-doxygen/html/classSVF_1_1DCHGraph.html +20 -20
- package/SVF-doxygen/html/classSVF_1_1ICFGBuilder.html +7 -7
- package/SVF-doxygen/html/classSVF_1_1LLVMLoopAnalysis.html +6 -6
- package/SVF-doxygen/html/classSVF_1_1LLVMModuleSet.html +36 -36
- package/SVF-doxygen/html/classSVF_1_1LockResultValidator.html +11 -11
- package/SVF-doxygen/html/classSVF_1_1MTAAnnotator.html +5 -5
- package/SVF-doxygen/html/classSVF_1_1MTAResultValidator.html +10 -10
- package/SVF-doxygen/html/classSVF_1_1MergeFunctionRets.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1ObjTypeInference.html +509 -485
- package/SVF-doxygen/html/classSVF_1_1RaceResultValidator.html +7 -7
- package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +22 -22
- package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +35 -35
- package/SVF-doxygen/html/classllvm_1_1generic__bridge__gep__type__iterator.html +2 -2
- package/SVF-doxygen/html/dda_8cpp_source.html +1 -1
- package/SVF-doxygen/html/iterator_8h_source.html +1 -1
- package/SVF-doxygen/html/iterator__range_8h_source.html +1 -1
- package/SVF-doxygen/html/llvm2svf_8cpp_source.html +1 -1
- package/SVF-doxygen/html/mta_8cpp_source.html +1 -1
- package/SVF-doxygen/html/namespaceSVF.html +115 -115
- package/SVF-doxygen/html/namespaceSVF_1_1LLVMUtil.html +33 -33
- package/SVF-doxygen/html/namespaceSVF_1_1cppUtil.html +12 -12
- package/SVF-doxygen/html/saber_8cpp_source.html +1 -1
- package/SVF-doxygen/html/structSVF_1_1PopulationCounter.html +1 -1
- package/SVF-doxygen/html/structSVF_1_1PopulationCounter_3_01T_00_018_01_4.html +1 -1
- package/SVF-doxygen/html/svf-ex_8cpp_source.html +1 -1
- package/SVF-doxygen/html/svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html +5 -5
- package/SVF-doxygen/html/svf_2include_2MTA_2MTAResultValidator_8h_source.html +8 -8
- package/SVF-doxygen/html/wpa_8cpp_source.html +1 -1
- package/package.json +1 -1
- package/svf-llvm/include/SVF-LLVM/BasicTypes.h +1 -0
- package/svf-llvm/lib/CHGBuilder.cpp +1 -0
- package/svf-llvm/lib/ObjTypeInference.cpp +51 -27
|
@@ -266,9 +266,9 @@ $(function() {
|
|
|
266
266
|
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  }</div>
|
|
267
267
|
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *gepInst = SVFUtil::dyn_cast<GetElementPtrInst>(curValue))</div>
|
|
268
268
|
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  insertInferSite(gepInst);</div>
|
|
269
|
-
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &it: curValue->
|
|
269
|
+
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &it: curValue->users())</div>
|
|
270
270
|
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  {</div>
|
|
271
|
-
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *loadInst = SVFUtil::dyn_cast<LoadInst>(it
|
|
271
|
+
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *loadInst = SVFUtil::dyn_cast<LoadInst>(it))</div>
|
|
272
272
|
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  {</div>
|
|
273
273
|
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="comment">/*</span></div>
|
|
274
274
|
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment"> * infer based on load, e.g.,</span></div>
|
|
@@ -278,7 +278,7 @@ $(function() {
|
|
|
278
278
|
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment"> */</span></div>
|
|
279
279
|
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  insertInferSite(loadInst);</div>
|
|
280
280
|
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div>
|
|
281
|
-
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *storeInst = SVFUtil::dyn_cast<StoreInst>(it
|
|
281
|
+
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *storeInst = SVFUtil::dyn_cast<StoreInst>(it))</div>
|
|
282
282
|
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  {</div>
|
|
283
283
|
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">if</span> (storeInst->getPointerOperand() == curValue)</div>
|
|
284
284
|
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  {</div>
|
|
@@ -292,7 +292,7 @@ $(function() {
|
|
|
292
292
|
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div>
|
|
293
293
|
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">else</span></div>
|
|
294
294
|
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  {</div>
|
|
295
|
-
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &nit: storeInst->getPointerOperand()->
|
|
295
|
+
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &nit: storeInst->getPointerOperand()->users())</div>
|
|
296
296
|
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  {</div>
|
|
297
297
|
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="comment">/*</span></div>
|
|
298
298
|
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment"> * propagate across store (value operand) and load</span></div>
|
|
@@ -301,8 +301,8 @@ $(function() {
|
|
|
301
301
|
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="comment"> %q = load i8*, i8** %p</span></div>
|
|
302
302
|
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="comment"> ..infer based on %q..</span></div>
|
|
303
303
|
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="comment"> */</span></div>
|
|
304
|
-
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadInst>(nit
|
|
305
|
-
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  insertInferSitesOrPushWorklist(nit
|
|
304
|
+
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadInst>(nit))</div>
|
|
305
|
+
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  insertInferSitesOrPushWorklist(nit);</div>
|
|
306
306
|
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  }</div>
|
|
307
307
|
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="comment">/*</span></div>
|
|
308
308
|
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="comment"> * infer based on store (value operand) <- gep (result element)</span></div>
|
|
@@ -322,18 +322,18 @@ $(function() {
|
|
|
322
322
|
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *gepBase = gepInst->getPointerOperand();</div>
|
|
323
323
|
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<LoadInst>(gepBase)) <span class="keywordflow">continue</span>;</div>
|
|
324
324
|
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keyword">const</span> <span class="keyword">auto</span> *load = SVFUtil::dyn_cast<LoadInst>(gepBase);</div>
|
|
325
|
-
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &loadUse: load->getPointerOperand()->
|
|
325
|
+
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &loadUse: load->getPointerOperand()->users())</div>
|
|
326
326
|
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  {</div>
|
|
327
|
-
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">if</span> (loadUse
|
|
327
|
+
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">if</span> (loadUse == load || !SVFUtil::isa<LoadInst>(loadUse))</div>
|
|
328
328
|
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordflow">continue</span>;</div>
|
|
329
|
-
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &gepUse: loadUse
|
|
329
|
+
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &gepUse: loadUse->users())</div>
|
|
330
330
|
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  {</div>
|
|
331
|
-
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<GetElementPtrInst>(gepUse
|
|
332
|
-
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &loadUse2: gepUse
|
|
331
|
+
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<GetElementPtrInst>(gepUse)) <span class="keywordflow">continue</span>;</div>
|
|
332
|
+
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &loadUse2: gepUse->users())</div>
|
|
333
333
|
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  {</div>
|
|
334
|
-
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadInst>(loadUse2
|
|
334
|
+
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadInst>(loadUse2))</div>
|
|
335
335
|
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  {</div>
|
|
336
|
-
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  insertInferSitesOrPushWorklist(loadUse2
|
|
336
|
+
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  insertInferSitesOrPushWorklist(loadUse2);</div>
|
|
337
337
|
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  }</div>
|
|
338
338
|
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  }</div>
|
|
339
339
|
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  }</div>
|
|
@@ -343,7 +343,7 @@ $(function() {
|
|
|
343
343
|
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  }</div>
|
|
344
344
|
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  </div>
|
|
345
345
|
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  }</div>
|
|
346
|
-
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *gepInst = SVFUtil::dyn_cast<GetElementPtrInst>(it
|
|
346
|
+
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *gepInst = SVFUtil::dyn_cast<GetElementPtrInst>(it))</div>
|
|
347
347
|
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  {</div>
|
|
348
348
|
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="comment">/*</span></div>
|
|
349
349
|
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="comment"> * infer based on gep (pointer operand)</span></div>
|
|
@@ -354,17 +354,17 @@ $(function() {
|
|
|
354
354
|
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordflow">if</span> (gepInst->getPointerOperand() == curValue)</div>
|
|
355
355
|
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  insertInferSite(gepInst);</div>
|
|
356
356
|
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  }</div>
|
|
357
|
-
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitcast = SVFUtil::dyn_cast<BitCastInst>(it
|
|
357
|
+
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitcast = SVFUtil::dyn_cast<BitCastInst>(it))</div>
|
|
358
358
|
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  {</div>
|
|
359
359
|
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="comment">// continue on bitcast</span></div>
|
|
360
360
|
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  insertInferSitesOrPushWorklist(bitcast);</div>
|
|
361
361
|
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  }</div>
|
|
362
|
-
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *phiNode = SVFUtil::dyn_cast<PHINode>(it
|
|
362
|
+
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *phiNode = SVFUtil::dyn_cast<PHINode>(it))</div>
|
|
363
363
|
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  {</div>
|
|
364
364
|
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="comment">// continue on bitcast</span></div>
|
|
365
365
|
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  insertInferSitesOrPushWorklist(phiNode);</div>
|
|
366
366
|
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div>
|
|
367
|
-
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *retInst = SVFUtil::dyn_cast<ReturnInst>(it
|
|
367
|
+
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *retInst = SVFUtil::dyn_cast<ReturnInst>(it))</div>
|
|
368
368
|
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  {</div>
|
|
369
369
|
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="comment">/*</span></div>
|
|
370
370
|
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment"> * propagate from return to caller</span></div>
|
|
@@ -377,9 +377,9 @@ $(function() {
|
|
|
377
377
|
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="comment"> %call = call i8* @malloc_wrapper()</span></div>
|
|
378
378
|
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="comment"> ..infer based on %call..</span></div>
|
|
379
379
|
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="comment"> */</span></div>
|
|
380
|
-
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &callsite: retInst->getFunction()->
|
|
380
|
+
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &callsite: retInst->getFunction()->users())</div>
|
|
381
381
|
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  {</div>
|
|
382
|
-
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast<CallBase>(callsite
|
|
382
|
+
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast<CallBase>(callsite))</div>
|
|
383
383
|
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  {</div>
|
|
384
384
|
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="comment">// skip function as parameter</span></div>
|
|
385
385
|
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="comment">// e.g., call void @foo(%struct.ssl_ctx_st* %9, i32 (i8*, i32, i32, i8*)* @passwd_callback)</span></div>
|
|
@@ -388,7 +388,7 @@ $(function() {
|
|
|
388
388
|
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div>
|
|
389
389
|
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div>
|
|
390
390
|
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div>
|
|
391
|
-
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast<CallBase>(it
|
|
391
|
+
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast<CallBase>(it))</div>
|
|
392
392
|
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  {</div>
|
|
393
393
|
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="comment">/*</span></div>
|
|
394
394
|
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="comment"> * propagate from callsite to callee</span></div>
|
|
@@ -409,507 +409,531 @@ $(function() {
|
|
|
409
409
|
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *calleeFunc = callBase->getCalledFunction())</div>
|
|
410
410
|
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  {</div>
|
|
411
411
|
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> pos = getArgPosInCall(callBase, curValue);</div>
|
|
412
|
-
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="comment">// for
|
|
413
|
-
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="
|
|
414
|
-
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="
|
|
415
|
-
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  {</div>
|
|
416
|
-
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> 
|
|
417
|
-
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> 
|
|
418
|
-
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> 
|
|
419
|
-
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> 
|
|
420
|
-
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> 
|
|
421
|
-
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> 
|
|
422
|
-
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> 
|
|
423
|
-
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> 
|
|
424
|
-
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> 
|
|
425
|
-
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> 
|
|
426
|
-
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> 
|
|
427
|
-
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> 
|
|
428
|
-
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> 
|
|
429
|
-
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> 
|
|
430
|
-
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> 
|
|
431
|
-
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> 
|
|
432
|
-
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> 
|
|
433
|
-
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> 
|
|
434
|
-
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> 
|
|
435
|
-
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> 
|
|
436
|
-
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> 
|
|
437
|
-
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> 
|
|
438
|
-
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> 
|
|
439
|
-
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> 
|
|
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="
|
|
412
|
+
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="comment">// for varargs function, we cannot directly get the value-flow between actual and formal args</span></div>
|
|
413
|
+
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="comment">// e.g., consider the following vararg function @callee</span></div>
|
|
414
|
+
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="comment">// 1: call void @callee(%arg)</span></div>
|
|
415
|
+
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="comment">// 2: define dso_local i32 @callee(...) #0 !dbg !17 {</span></div>
|
|
416
|
+
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="comment">// 3: .......</span></div>
|
|
417
|
+
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="comment">// 4: %5 = load i32, ptr %vaarg.addr, align 4, !dbg !55</span></div>
|
|
418
|
+
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="comment">// 5: .......</span></div>
|
|
419
|
+
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="comment">// 6: }</span></div>
|
|
420
|
+
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="comment">// it is challenging to precisely identify the forward value-flow of %arg (Line 2)</span></div>
|
|
421
|
+
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="comment">// because the function definition of callee (Line 2) does not have any formal args related to the actual arg %arg</span></div>
|
|
422
|
+
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="comment">// therefore we track all possible instructions like ``load i32, ptr %vaarg.addr''</span></div>
|
|
423
|
+
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">if</span> (calleeFunc->isVarArg())</div>
|
|
424
|
+
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  {</div>
|
|
425
|
+
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="comment">// conservatively track all var args</span></div>
|
|
426
|
+
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> &I: instructions(calleeFunc))</div>
|
|
427
|
+
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  {</div>
|
|
428
|
+
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordflow">if</span> (<span class="keyword">auto</span> *load = llvm::dyn_cast<llvm::LoadInst>(&I))</div>
|
|
429
|
+
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  {</div>
|
|
430
|
+
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">llvm::Value</a>* loadPointer = load->getPointerOperand();</div>
|
|
431
|
+
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordflow">if</span> (loadPointer->getName().compare(<span class="stringliteral">"vaarg.addr"</span>) == 0)</div>
|
|
432
|
+
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  {</div>
|
|
433
|
+
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  insertInferSitesOrPushWorklist(load);</div>
|
|
434
|
+
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  }</div>
|
|
435
|
+
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  }</div>
|
|
436
|
+
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div>
|
|
437
|
+
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  }</div>
|
|
438
|
+
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!calleeFunc->isDeclaration())</div>
|
|
439
|
+
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  {</div>
|
|
440
|
+
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  insertInferSitesOrPushWorklist(calleeFunc->getArg(pos));</div>
|
|
441
|
+
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  }</div>
|
|
442
|
+
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  }</div>
|
|
443
|
+
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  }</div>
|
|
444
|
+
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  }</div>
|
|
445
|
+
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordflow">if</span> (canUpdate)</div>
|
|
446
|
+
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  {</div>
|
|
447
|
+
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Type *></a> types;</div>
|
|
448
|
+
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  std::transform(infersites.begin(), infersites.end(), std::inserter(types, types.begin()),</div>
|
|
449
|
+
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <a class="code" href="ObjTypeInference_8cpp.html#a19b8626948c43f4ce19dbc69742d309e">infersiteToType</a>);</div>
|
|
450
|
+
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  _valueToInferSites[curValue] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVFUtil::move</a>(infersites);</div>
|
|
451
|
+
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  _valueToType[curValue] = selectLargestSizedType(types);</div>
|
|
452
|
+
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  }</div>
|
|
448
453
|
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  }</div>
|
|
449
|
-
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  </div>
|
|
450
|
-
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="
|
|
451
|
-
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> 
|
|
452
|
-
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> 
|
|
453
|
-
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> 
|
|
454
|
-
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> 
|
|
455
|
-
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> 
|
|
456
|
-
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> 
|
|
457
|
-
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> 
|
|
458
|
-
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> 
|
|
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="
|
|
505
|
-
<div class="line"><a name="
|
|
506
|
-
<div class="line"><a name="
|
|
507
|
-
<div class="line"><a name="
|
|
508
|
-
<div class="line"><a name="
|
|
509
|
-
<div class="line"><a name="
|
|
510
|
-
<div class="line"><a name="
|
|
511
|
-
<div class="line"><a name="
|
|
512
|
-
<div class="line"><a name="
|
|
513
|
-
<div class="line"><a name="
|
|
514
|
-
<div class="line"><a name="
|
|
515
|
-
<div class="line"><a name="
|
|
516
|
-
<div class="line"><a name="
|
|
517
|
-
<div class="line"><a name="
|
|
518
|
-
<div class="line"><a name="
|
|
519
|
-
<div class="line"><a name="
|
|
520
|
-
<div class="line"><a name="
|
|
521
|
-
<div class="line"><a name="
|
|
522
|
-
<div class="line"><a name="
|
|
523
|
-
<div class="line"><a name="
|
|
524
|
-
<div class="line"><a name="
|
|
525
|
-
<div class="line"><a name="
|
|
526
|
-
<div class="line"><a name="
|
|
527
|
-
<div class="line"><a name="
|
|
528
|
-
<div class="line"><a name="
|
|
529
|
-
<div class="line"><a name="
|
|
530
|
-
<div class="line"><a name="
|
|
531
|
-
<div class="line"><a name="
|
|
532
|
-
<div class="line"><a name="
|
|
533
|
-
<div class="line"><a name="
|
|
534
|
-
<div class="line"><a name="
|
|
535
|
-
<div class="line"><a name="
|
|
536
|
-
<div class="line"><a name="
|
|
537
|
-
<div class="line"><a name="
|
|
538
|
-
<div class="line"><a name="
|
|
539
|
-
<div class="line"><a name="
|
|
540
|
-
<div class="line"><a name="
|
|
541
|
-
<div class="line"><a name="
|
|
542
|
-
<div class="line"><a name="
|
|
543
|
-
<div class="line"><a name="
|
|
544
|
-
<div class="line"><a name="
|
|
545
|
-
<div class="line"><a name="
|
|
546
|
-
<div class="line"><a name="
|
|
547
|
-
<div class="line"><a name="
|
|
548
|
-
<div class="line"><a name="
|
|
549
|
-
<div class="line"><a name="
|
|
550
|
-
<div class="line"><a name="
|
|
551
|
-
<div class="line"><a name="
|
|
552
|
-
<div class="line"><a name="
|
|
553
|
-
<div class="line"><a name="
|
|
554
|
-
<div class="line"><a name="
|
|
555
|
-
<div class="line"><a name="
|
|
556
|
-
<div class="line"><a name="
|
|
557
|
-
<div class="line"><a name="
|
|
558
|
-
<div class="line"><a name="
|
|
559
|
-
<div class="line"><a name="
|
|
560
|
-
<div class="line"><a name="
|
|
561
|
-
<div class="line"><a name="
|
|
562
|
-
<div class="line"><a name="
|
|
563
|
-
<div class="line"><a name="
|
|
564
|
-
<div class="line"><a name="
|
|
565
|
-
<div class="line"><a name="
|
|
566
|
-
<div class="line"><a name="
|
|
567
|
-
<div class="line"><a name="
|
|
568
|
-
<div class="line"><a name="
|
|
569
|
-
<div class="line"><a name="
|
|
570
|
-
<div class="line"><a name="
|
|
571
|
-
<div class="line"><a name="
|
|
572
|
-
<div class="line"><a name="
|
|
573
|
-
<div class="line"><a name="
|
|
574
|
-
<div class="line"><a name="
|
|
575
|
-
<div class="line"><a name="
|
|
576
|
-
<div class="line"><a name="
|
|
577
|
-
<div class="line"><a name="
|
|
578
|
-
<div class="line"><a name="
|
|
579
|
-
<div class="line"><a name="
|
|
580
|
-
<div class="line"><a name="
|
|
581
|
-
<div class="line"><a name="
|
|
582
|
-
<div class="line"><a name="
|
|
583
|
-
<div class="line"><a name="
|
|
584
|
-
<div class="line"><a name="
|
|
585
|
-
<div class="line"><a name="
|
|
586
|
-
<div class="line"><a name="
|
|
587
|
-
<div class="line"><a name="
|
|
588
|
-
<div class="line"><a name="
|
|
589
|
-
<div class="line"><a name="
|
|
590
|
-
<div class="line"><a name="
|
|
591
|
-
<div class="line"><a name="
|
|
592
|
-
<div class="line"><a name="
|
|
593
|
-
<div class="line"><a name="
|
|
594
|
-
<div class="line"><a name="
|
|
595
|
-
<div class="line"><a name="
|
|
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="
|
|
614
|
-
<div class="line"><a name="
|
|
615
|
-
<div class="line"><a name="
|
|
616
|
-
<div class="line"><a name="
|
|
617
|
-
<div class="line"><a name="
|
|
618
|
-
<div class="line"><a name="
|
|
619
|
-
<div class="line"><a name="
|
|
620
|
-
<div class="line"><a name="
|
|
621
|
-
<div class="line"><a name="
|
|
622
|
-
<div class="line"><a name="
|
|
623
|
-
<div class="line"><a name="
|
|
624
|
-
<div class="line"><a name="
|
|
625
|
-
<div class="line"><a name="
|
|
626
|
-
<div class="line"><a name="
|
|
627
|
-
<div class="line"><a name="
|
|
628
|
-
<div class="line"><a name="
|
|
629
|
-
<div class="line"><a name="
|
|
630
|
-
<div class="line"><a name="
|
|
631
|
-
<div class="line"><a name="
|
|
632
|
-
<div class="line"><a name="
|
|
633
|
-
<div class="line"><a name="
|
|
634
|
-
<div class="line"><a name="
|
|
635
|
-
<div class="line"><a name="
|
|
636
|
-
<div class="line"><a name="
|
|
637
|
-
<div class="line"><a name="
|
|
638
|
-
<div class="line"><a name="
|
|
639
|
-
<div class="line"><a name="
|
|
640
|
-
<div class="line"><a name="
|
|
641
|
-
<div class="line"><a name="
|
|
642
|
-
<div class="line"><a name="
|
|
643
|
-
<div class="line"><a name="
|
|
644
|
-
<div class="line"><a name="
|
|
645
|
-
<div class="line"><a name="
|
|
646
|
-
<div class="line"><a name="
|
|
647
|
-
<div class="line"><a name="
|
|
648
|
-
<div class="line"><a name="
|
|
649
|
-
<div class="line"><a name="
|
|
650
|
-
<div class="line"><a name="
|
|
651
|
-
<div class="line"><a name="
|
|
652
|
-
<div class="line"><a name="
|
|
653
|
-
<div class="line"><a name="
|
|
654
|
-
<div class="line"><a name="
|
|
454
|
+
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = _valueToType[var];</div>
|
|
455
|
+
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <span class="keyword">nullptr</span>)</div>
|
|
456
|
+
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  {</div>
|
|
457
|
+
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = defaultType(var);</div>
|
|
458
|
+
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <a class="code" href="ObjTypeInference_8cpp.html#ac48ef12f2a6f605d6fa5d31e7623a826">WARN_MSG</a>(<span class="stringliteral">"Using default type, trace ID is "</span> + std::to_string(traceId) + <span class="stringliteral">":"</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(var));</div>
|
|
459
|
+
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  }</div>
|
|
460
|
+
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, <span class="stringliteral">"type cannot be a null ptr"</span>);</div>
|
|
461
|
+
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keywordflow">return</span> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>;</div>
|
|
462
|
+
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> }</div>
|
|
463
|
+
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  </div>
|
|
464
|
+
<div class="line"><a name="l00410"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInference.html#a42149ece87a178241ef1ef0cce7ec554"> 410</a></span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Value *></a> &<a class="code" href="classSVF_1_1ObjTypeInference.html#a42149ece87a178241ef1ef0cce7ec554">ObjTypeInference::bwfindAllocOfVar</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *var)</div>
|
|
465
|
+
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> {</div>
|
|
466
|
+
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  </div>
|
|
467
|
+
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="comment">// consult cache</span></div>
|
|
468
|
+
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keyword">auto</span> tIt = _valueToAllocs.find(var);</div>
|
|
469
|
+
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordflow">if</span> (tIt != _valueToAllocs.end())</div>
|
|
470
|
+
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  {</div>
|
|
471
|
+
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">return</span> tIt->second;</div>
|
|
472
|
+
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  }</div>
|
|
473
|
+
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  </div>
|
|
474
|
+
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="comment">// simulate the call stack, the second element indicates whether we should update sources for current value</span></div>
|
|
475
|
+
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <a class="code" href="classSVF_1_1FILOWorkList.html">FILOWorkList<ValueBoolPair></a> workList;</div>
|
|
476
|
+
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<ValueBoolPair></a> visited;</div>
|
|
477
|
+
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  workList.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>({var, <span class="keyword">false</span>});</div>
|
|
478
|
+
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keywordflow">while</span> (!workList.<a class="code" href="classSVF_1_1FILOWorkList.html#a071a624c91def82a4bbbf3806c7b7eea">empty</a>())</div>
|
|
479
|
+
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  {</div>
|
|
480
|
+
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keyword">auto</span> curPair = workList.<a class="code" href="classSVF_1_1FILOWorkList.html#a3fd9acb6d09fd142bfd402fdf8cac93b">pop</a>();</div>
|
|
481
|
+
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">if</span> (visited.count(curPair)) <span class="keywordflow">continue</span>;</div>
|
|
482
|
+
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  visited.insert(curPair);</div>
|
|
483
|
+
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *curValue = curPair.first;</div>
|
|
484
|
+
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keywordtype">bool</span> canUpdate = curPair.second;</div>
|
|
485
|
+
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  </div>
|
|
486
|
+
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Value *></a> sources;</div>
|
|
487
|
+
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keyword">auto</span> insertAllocs = [&sources, &canUpdate](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *source)</div>
|
|
488
|
+
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  {</div>
|
|
489
|
+
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">if</span> (canUpdate) sources.insert(source);</div>
|
|
490
|
+
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  };</div>
|
|
491
|
+
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keyword">auto</span> insertAllocsOrPushWorklist = [<span class="keyword">this</span>, &sources, &workList, &canUpdate](<span class="keyword">const</span> <span class="keyword">auto</span> &pUser)</div>
|
|
492
|
+
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  {</div>
|
|
493
|
+
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keyword">auto</span> vIt = _valueToAllocs.find(pUser);</div>
|
|
494
|
+
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordflow">if</span> (canUpdate)</div>
|
|
495
|
+
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  {</div>
|
|
496
|
+
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keywordflow">if</span> (vIt != _valueToAllocs.end())</div>
|
|
497
|
+
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  {</div>
|
|
498
|
+
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  sources.insert(vIt->second.begin(), vIt->second.end());</div>
|
|
499
|
+
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div>
|
|
500
|
+
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  }</div>
|
|
501
|
+
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keywordflow">else</span></div>
|
|
502
|
+
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  {</div>
|
|
503
|
+
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">if</span> (vIt == _valueToAllocs.end()) workList.push({pUser, <span class="keyword">false</span>});</div>
|
|
504
|
+
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  }</div>
|
|
505
|
+
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  };</div>
|
|
506
|
+
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  </div>
|
|
507
|
+
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="keywordflow">if</span> (!canUpdate && !_valueToAllocs.count(curValue))</div>
|
|
508
|
+
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  {</div>
|
|
509
|
+
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  workList.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>({curValue, <span class="keyword">true</span>});</div>
|
|
510
|
+
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  }</div>
|
|
511
|
+
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  </div>
|
|
512
|
+
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="keywordflow">if</span> (isAlloc(curValue))</div>
|
|
513
|
+
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  {</div>
|
|
514
|
+
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  insertAllocs(curValue);</div>
|
|
515
|
+
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  }</div>
|
|
516
|
+
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitCastInst = SVFUtil::dyn_cast<BitCastInst>(curValue))</div>
|
|
517
|
+
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  {</div>
|
|
518
|
+
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *prevVal = bitCastInst->getOperand(0);</div>
|
|
519
|
+
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  insertAllocsOrPushWorklist(prevVal);</div>
|
|
520
|
+
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  }</div>
|
|
521
|
+
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *phiNode = SVFUtil::dyn_cast<PHINode>(curValue))</div>
|
|
522
|
+
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  {</div>
|
|
523
|
+
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < phiNode->getNumOperands(); ++i)</div>
|
|
524
|
+
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  {</div>
|
|
525
|
+
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  insertAllocsOrPushWorklist(phiNode->getOperand(i));</div>
|
|
526
|
+
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  }</div>
|
|
527
|
+
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  }</div>
|
|
528
|
+
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *loadInst = SVFUtil::dyn_cast<LoadInst>(curValue))</div>
|
|
529
|
+
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  {</div>
|
|
530
|
+
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &use: loadInst->getPointerOperand()->users())</div>
|
|
531
|
+
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  {</div>
|
|
532
|
+
<div class="line"><a name="l00478"></a><span class="lineno"> 478</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>(use))</div>
|
|
533
|
+
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  {</div>
|
|
534
|
+
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <span class="keywordflow">if</span> (storeInst->getPointerOperand() == loadInst->getPointerOperand())</div>
|
|
535
|
+
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  {</div>
|
|
536
|
+
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  insertAllocsOrPushWorklist(storeInst->getValueOperand());</div>
|
|
537
|
+
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  }</div>
|
|
538
|
+
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  }</div>
|
|
539
|
+
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  }</div>
|
|
540
|
+
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  }</div>
|
|
541
|
+
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *argument = SVFUtil::dyn_cast<Argument>(curValue))</div>
|
|
542
|
+
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  {</div>
|
|
543
|
+
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &use: argument->getParent()->users())</div>
|
|
544
|
+
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  {</div>
|
|
545
|
+
<div class="line"><a name="l00491"></a><span class="lineno"> 491</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>(use))</div>
|
|
546
|
+
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  {</div>
|
|
547
|
+
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="comment">// skip function as parameter</span></div>
|
|
548
|
+
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <span class="comment">// e.g., call void @foo(%struct.ssl_ctx_st* %9, i32 (i8*, i32, i32, i8*)* @passwd_callback)</span></div>
|
|
549
|
+
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keywordflow">if</span> (callBase->getCalledFunction() != argument->getParent()) <span class="keywordflow">continue</span>;</div>
|
|
550
|
+
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> pos = argument->getParent()->isVarArg() ? 0 : argument->getArgNo();</div>
|
|
551
|
+
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  insertAllocsOrPushWorklist(callBase->getArgOperand(pos));</div>
|
|
552
|
+
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  }</div>
|
|
553
|
+
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  }</div>
|
|
554
|
+
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  }</div>
|
|
555
|
+
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast<CallBase>(curValue))</div>
|
|
556
|
+
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  {</div>
|
|
557
|
+
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(!callBase->doesNotReturn(), <span class="stringliteral">"callbase does not return:"</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(callBase));</div>
|
|
558
|
+
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *callee = callBase->getCalledFunction())</div>
|
|
559
|
+
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  {</div>
|
|
560
|
+
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keywordflow">if</span> (!callee->isDeclaration())</div>
|
|
561
|
+
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  {</div>
|
|
562
|
+
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *svfFunc = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(callee);</div>
|
|
563
|
+
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *pValue = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#aaf9b679407f12b93afc53c157d37b444">getLLVMValue</a>(svfFunc-><a class="code" href="classSVF_1_1SVFFunction.html#ac4c28c8d205d354f3a982119f29f2aac">getExitBB</a>()-><a class="code" href="classSVF_1_1SVFBasicBlock.html#ad05f85ce931d4479f71d1947a25599dc">back</a>());</div>
|
|
564
|
+
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keyword">const</span> <span class="keyword">auto</span> *retInst = SVFUtil::dyn_cast<ReturnInst>(pValue);</div>
|
|
565
|
+
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(retInst && retInst->getReturnValue(), <span class="stringliteral">"not return inst?"</span>);</div>
|
|
566
|
+
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  insertAllocsOrPushWorklist(retInst->getReturnValue());</div>
|
|
567
|
+
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  }</div>
|
|
568
|
+
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  }</div>
|
|
569
|
+
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  }</div>
|
|
570
|
+
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keywordflow">if</span> (canUpdate)</div>
|
|
571
|
+
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  {</div>
|
|
572
|
+
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  _valueToAllocs[curValue] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVFUtil::move</a>(sources);</div>
|
|
573
|
+
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  }</div>
|
|
574
|
+
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  }</div>
|
|
575
|
+
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Value *></a> &srcs = _valueToAllocs[var];</div>
|
|
576
|
+
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordflow">if</span> (srcs.empty())</div>
|
|
577
|
+
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  {</div>
|
|
578
|
+
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <a class="code" href="ObjTypeInference_8cpp.html#ac48ef12f2a6f605d6fa5d31e7623a826">WARN_MSG</a>(<span class="stringliteral">"Cannot find allocation: "</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(var));</div>
|
|
579
|
+
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  }</div>
|
|
580
|
+
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keywordflow">return</span> srcs;</div>
|
|
581
|
+
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> }</div>
|
|
582
|
+
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  </div>
|
|
583
|
+
<div class="line"><a name="l00529"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInference.html#a62020ece25ac660f1adb41bd0cf40be7"> 529</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ObjTypeInference.html#a62020ece25ac660f1adb41bd0cf40be7">ObjTypeInference::isAlloc</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a> *val)</div>
|
|
584
|
+
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> {</div>
|
|
585
|
+
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aca11801ed6ef6ff8d2a1e85bc0fc5794">LLVMUtil::isObject</a>(val);</div>
|
|
586
|
+
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> }</div>
|
|
587
|
+
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  </div>
|
|
588
|
+
<div class="line"><a name="l00538"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInference.html#afe926ee3427bb329d189e0c40bb1cd60"> 538</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ObjTypeInference.html#afe926ee3427bb329d189e0c40bb1cd60">ObjTypeInference::validateTypeCheck</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *cs)</div>
|
|
589
|
+
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> {</div>
|
|
590
|
+
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *func = cs->getCalledFunction())</div>
|
|
591
|
+
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  {</div>
|
|
592
|
+
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keywordflow">if</span> (func->getName().find(<a class="code" href="ObjTypeInference_8cpp.html#a5f334de99eb942058f27a1025c346f70">TYPEMALLOC</a>) != std::string::npos)</div>
|
|
593
|
+
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  {</div>
|
|
594
|
+
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *objType = fwInferObjType(cs);</div>
|
|
595
|
+
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="keyword">const</span> <span class="keyword">auto</span> *pInt =</div>
|
|
596
|
+
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  SVFUtil::dyn_cast<llvm::ConstantInt>(cs->getOperand(1));</div>
|
|
597
|
+
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  assert(pInt && <span class="stringliteral">"the second argument is a integer"</span>);</div>
|
|
598
|
+
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> iTyNum = objTyToNumFields(objType);</div>
|
|
599
|
+
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keywordflow">if</span> (iTyNum >= pInt->getZExtValue())</div>
|
|
600
|
+
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a05dc00b2bd9a8176aae31b6cfffe725d">SVFUtil::sucMsg</a>(<span class="stringliteral">"\t SUCCESS :"</span>) << <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(cs)</div>
|
|
601
|
+
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">SVFUtil::pasMsg</a>(<span class="stringliteral">" TYPE: "</span>)</div>
|
|
602
|
+
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  << <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">dumpType</a>(objType) << <span class="stringliteral">"\n"</span>;</div>
|
|
603
|
+
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keywordflow">else</span></div>
|
|
604
|
+
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  {</div>
|
|
605
|
+
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7655b13bbfe720ca2b8a25e0a72528e6">SVFUtil::errMsg</a>(<span class="stringliteral">"\t FAILURE :"</span>) << <span class="stringliteral">":"</span> << <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(cs) << <span class="stringliteral">" TYPE: "</span></div>
|
|
606
|
+
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  << <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">dumpType</a>(objType) << <span class="stringliteral">"\n"</span>;</div>
|
|
607
|
+
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  abort();</div>
|
|
608
|
+
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  }</div>
|
|
609
|
+
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  }</div>
|
|
610
|
+
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  }</div>
|
|
611
|
+
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> }</div>
|
|
612
|
+
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  </div>
|
|
613
|
+
<div class="line"><a name="l00563"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInference.html#a99eaaef89f214fc8587349361600b44d"> 563</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ObjTypeInference.html#a99eaaef89f214fc8587349361600b44d">ObjTypeInference::typeSizeDiffTest</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a> *oPTy, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *iTy, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div>
|
|
614
|
+
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> {</div>
|
|
615
|
+
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="preprocessor">#if TYPE_DEBUG</span></div>
|
|
616
|
+
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *oTy = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(oPTy);</div>
|
|
617
|
+
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> iTyNum = objTyToNumFields(iTy);</div>
|
|
618
|
+
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab5b55fce942ab6d7995541f3fe0503f8">getNumOfElements</a>(oTy) > iTyNum)</div>
|
|
619
|
+
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  {</div>
|
|
620
|
+
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <a class="code" href="ObjTypeInference_8cpp.html#aa73dde570491da218d3ef11359f16955">ERR_MSG</a>(<span class="stringliteral">"original type is:"</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">dumpType</a>(oTy));</div>
|
|
621
|
+
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <a class="code" href="ObjTypeInference_8cpp.html#aa73dde570491da218d3ef11359f16955">ERR_MSG</a>(<span class="stringliteral">"infered type is:"</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">dumpType</a>(iTy));</div>
|
|
622
|
+
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <a class="code" href="ObjTypeInference_8cpp.html#a54176d0866e198769367b0dc65e049b5">ABORT_MSG</a>(<span class="stringliteral">"wrong type, trace ID is "</span> + std::to_string(traceId) + <span class="stringliteral">":"</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(val));</div>
|
|
623
|
+
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  }</div>
|
|
624
|
+
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="preprocessor">#endif</span></div>
|
|
625
|
+
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> }</div>
|
|
626
|
+
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  </div>
|
|
627
|
+
<div class="line"><a name="l00577"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInference.html#a72da2d7f06e8fee67dc5b3c451fa5dee"> 577</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1ObjTypeInference.html#a72da2d7f06e8fee67dc5b3c451fa5dee">ObjTypeInference::getArgPosInCall</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *callBase, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *arg)</div>
|
|
628
|
+
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> {</div>
|
|
629
|
+
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  assert(callBase->hasArgument(arg) && <span class="stringliteral">"callInst does not have argument arg?"</span>);</div>
|
|
630
|
+
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keyword">auto</span> it = std::find(callBase->arg_begin(), callBase->arg_end(), arg);</div>
|
|
631
|
+
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  assert(it != callBase->arg_end() && <span class="stringliteral">"Didn't find argument?"</span>);</div>
|
|
632
|
+
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keywordflow">return</span> std::distance(callBase->arg_begin(), it);</div>
|
|
633
|
+
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> }</div>
|
|
634
|
+
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  </div>
|
|
635
|
+
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  </div>
|
|
636
|
+
<div class="line"><a name="l00586"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319"> 586</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *<a class="code" href="classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319">ObjTypeInference::selectLargestSizedType</a>(<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Type *></a> &objTys)</div>
|
|
637
|
+
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> {</div>
|
|
638
|
+
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keywordflow">if</span> (objTys.empty()) <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
|
|
639
|
+
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="comment">// map type size to types from with key in descending order</span></div>
|
|
640
|
+
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap<u32_t, OrderedSet<const Type *></a>, std::greater<int>> typeSzToTypes;</div>
|
|
641
|
+
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *ty: objTys)</div>
|
|
642
|
+
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  {</div>
|
|
643
|
+
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  typeSzToTypes[objTyToNumFields(ty)].insert(ty);</div>
|
|
644
|
+
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  }</div>
|
|
645
|
+
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  assert(!typeSzToTypes.empty() && <span class="stringliteral">"typeSzToTypes cannot be empty"</span>);</div>
|
|
646
|
+
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <a class="code" href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">OrderedSet<const Type *></a> largestTypes;</div>
|
|
647
|
+
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  std::tie(std::ignore, largestTypes) = *typeSzToTypes.begin();</div>
|
|
648
|
+
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  assert(!largestTypes.empty() && <span class="stringliteral">"largest element cannot be empty"</span>);</div>
|
|
649
|
+
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="keywordflow">return</span> *largestTypes.begin();</div>
|
|
650
|
+
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> }</div>
|
|
651
|
+
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  </div>
|
|
652
|
+
<div class="line"><a name="l00602"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e"> 602</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">ObjTypeInference::objTyToNumFields</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *objTy)</div>
|
|
653
|
+
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> {</div>
|
|
654
|
+
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>();</div>
|
|
655
|
+
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keywordflow">if</span> (SVFUtil::isa<ArrayType>(objTy))</div>
|
|
656
|
+
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  num = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab5b55fce942ab6d7995541f3fe0503f8">getNumOfElements</a>(objTy);</div>
|
|
657
|
+
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *st = SVFUtil::dyn_cast<StructType>(objTy))</div>
|
|
658
|
+
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  {</div>
|
|
659
|
+
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1cppUtil.html#a4e1785295e2695fae72758d8bbe4f7ac">classTyHasVTable</a>(st))</div>
|
|
660
|
+
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  num = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab5b55fce942ab6d7995541f3fe0503f8">getNumOfElements</a>(st);</div>
|
|
661
|
+
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  }</div>
|
|
662
|
+
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keywordflow">return</span> num;</div>
|
|
663
|
+
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> }</div>
|
|
655
664
|
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  </div>
|
|
656
|
-
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> 
|
|
657
|
-
<div class="line"><a name="
|
|
658
|
-
<div class="line"><a name="
|
|
659
|
-
<div class="line"><a name="
|
|
660
|
-
<div class="line"><a name="
|
|
661
|
-
<div class="line"><a name="
|
|
662
|
-
<div class="line"><a name="
|
|
663
|
-
<div class="line"><a name="
|
|
664
|
-
<div class="line"><a name="
|
|
665
|
-
<div class="line"><a name="
|
|
666
|
-
<div class="line"><a name="
|
|
667
|
-
<div class="line"><a name="
|
|
668
|
-
<div class="line"><a name="
|
|
669
|
-
<div class="line"><a name="
|
|
670
|
-
<div class="line"><a name="
|
|
671
|
-
<div class="line"><a name="
|
|
672
|
-
<div class="line"><a name="
|
|
673
|
-
<div class="line"><a name="
|
|
674
|
-
<div class="line"><a name="
|
|
675
|
-
<div class="line"><a name="
|
|
676
|
-
<div class="line"><a name="
|
|
677
|
-
<div class="line"><a name="
|
|
678
|
-
<div class="line"><a name="
|
|
679
|
-
<div class="line"><a name="
|
|
680
|
-
<div class="line"><a name="
|
|
681
|
-
<div class="line"><a name="
|
|
682
|
-
<div class="line"><a name="
|
|
683
|
-
<div class="line"><a name="
|
|
684
|
-
<div class="line"><a name="
|
|
685
|
-
<div class="line"><a name="
|
|
686
|
-
<div class="line"><a name="
|
|
687
|
-
<div class="line"><a name="
|
|
688
|
-
<div class="line"><a name="
|
|
689
|
-
<div class="line"><a name="
|
|
690
|
-
<div class="line"><a name="
|
|
691
|
-
<div class="line"><a name="
|
|
692
|
-
<div class="line"><a name="
|
|
693
|
-
<div class="line"><a name="
|
|
694
|
-
<div class="line"><a name="
|
|
695
|
-
<div class="line"><a name="
|
|
696
|
-
<div class="line"><a name="
|
|
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="
|
|
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="
|
|
710
|
-
<div class="line"><a name="
|
|
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="l00741"></a><span class="lineno"> 741</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *getElementPtrInst = SVFUtil::dyn_cast<GetElementPtrInst>(curValue))</div>
|
|
774
|
-
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  {</div>
|
|
775
|
-
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  insertSourcesOrPushWorklist(getElementPtrInst->getPointerOperand());</div>
|
|
776
|
-
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  }</div>
|
|
777
|
-
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitCastInst = SVFUtil::dyn_cast<BitCastInst>(curValue))</div>
|
|
778
|
-
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  {</div>
|
|
779
|
-
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  insertSourcesOrPushWorklist(bitCastInst->getOperand(0));</div>
|
|
780
|
-
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  }</div>
|
|
781
|
-
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *phiNode = SVFUtil::dyn_cast<PHINode>(curValue))</div>
|
|
665
|
+
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  </div>
|
|
666
|
+
<div class="line"><a name="l00627"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInference.html#a8b5f65818c69c70e07ffbc2bbe1c7c91"> 627</a></span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<std::string></a> &<a class="code" href="classSVF_1_1ObjTypeInference.html#a8b5f65818c69c70e07ffbc2bbe1c7c91">ObjTypeInference::inferThisPtrClsName</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *thisPtr)</div>
|
|
667
|
+
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> {</div>
|
|
668
|
+
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="keyword">auto</span> it = _thisPtrClassNames.find(thisPtr);</div>
|
|
669
|
+
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <span class="keywordflow">if</span> (it != _thisPtrClassNames.end()) <span class="keywordflow">return</span> it->second;</div>
|
|
670
|
+
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  </div>
|
|
671
|
+
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<std::string></a> names;</div>
|
|
672
|
+
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  </div>
|
|
673
|
+
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <span class="comment">// Lambda for checking a function is a valid name source & extracting a class name from it</span></div>
|
|
674
|
+
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keyword">auto</span> addNamesFromFunc = [&names](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *func) -> <span class="keywordtype">void</span></div>
|
|
675
|
+
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  {</div>
|
|
676
|
+
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(<a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(func), <span class="stringliteral">"Func is invalid class name source: "</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(func));</div>
|
|
677
|
+
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &<a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a> : <a class="code" href="namespaceSVF_1_1cppUtil.html#ae97bb256f20aa617f21a49c98d46177a">extractClsNamesFromFunc</a>(func)) names.insert(<a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>);</div>
|
|
678
|
+
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  };</div>
|
|
679
|
+
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  </div>
|
|
680
|
+
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <span class="comment">// Lambda for getting callee & extracting class name for calls to constructors/destructors/template funcs</span></div>
|
|
681
|
+
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <span class="keyword">auto</span> addNamesFromCall = [&names, &addNamesFromFunc](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *call) -> <span class="keywordtype">void</span></div>
|
|
682
|
+
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  {</div>
|
|
683
|
+
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(<a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(call), <span class="stringliteral">"Call is invalid class name source: "</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(call));</div>
|
|
684
|
+
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  </div>
|
|
685
|
+
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="keyword">const</span> <span class="keyword">auto</span> *func = call->getCalledFunction();</div>
|
|
686
|
+
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#afd5fcc8fe98df5f057ff2e04c68b49b5">isDynCast</a>(func)) names.insert(<a class="code" href="namespaceSVF_1_1cppUtil.html#a26ccd6abf127a7ccc34a973f7b13161b">extractClsNameFromDynCast</a>(call));</div>
|
|
687
|
+
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="keywordflow">else</span> addNamesFromFunc(func);</div>
|
|
688
|
+
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  };</div>
|
|
689
|
+
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  </div>
|
|
690
|
+
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="comment">// Walk backwards to find all valid source sites for the pointer (e.g. stack/global/heap variables)</span></div>
|
|
691
|
+
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &val: bwFindAllocOrClsNameSources(thisPtr))</div>
|
|
692
|
+
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  {</div>
|
|
693
|
+
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="comment">// A source site is either a constructor/destructor/template function from which the class name can be</span></div>
|
|
694
|
+
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="comment">// extracted; a call to a C++ constructor/destructor/template function from which the class name can be</span></div>
|
|
695
|
+
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="comment">// extracted; or an allocation site of an object (i.e. a stack/global/heap variable), from which a</span></div>
|
|
696
|
+
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="comment">// forward walk can be performed to find calls to C++ constructor/destructor/template functions from</span></div>
|
|
697
|
+
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <span class="comment">// which the class' name can then be extracted; skip starting pointer</span></div>
|
|
698
|
+
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <span class="keywordflow">if</span> (val == thisPtr) <span class="keywordflow">continue</span>;</div>
|
|
699
|
+
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  </div>
|
|
700
|
+
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *func = SVFUtil::dyn_cast<Function>(val))</div>
|
|
701
|
+
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  {</div>
|
|
702
|
+
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="comment">// Constructor/destructor/template func; extract name from func directly</span></div>
|
|
703
|
+
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  addNamesFromFunc(func);</div>
|
|
704
|
+
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  }</div>
|
|
705
|
+
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(val))</div>
|
|
706
|
+
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  {</div>
|
|
707
|
+
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  <span class="comment">// Call to constructor/destructor/template func; get callee; extract name from callee</span></div>
|
|
708
|
+
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(SVFUtil::isa<CallBase>(val), <span class="stringliteral">"Call source site is not a callbase: "</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(val));</div>
|
|
709
|
+
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  addNamesFromCall(SVFUtil::cast<CallBase>(val));</div>
|
|
710
|
+
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  }</div>
|
|
711
|
+
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (isAlloc(val))</div>
|
|
712
|
+
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  {</div>
|
|
713
|
+
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <span class="comment">// Stack/global/heap allocation site; walk forward; find constructor/destructor/template calls</span></div>
|
|
714
|
+
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>((SVFUtil::isa<AllocaInst, CallBase, GlobalVariable>(val)),</div>
|
|
715
|
+
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="stringliteral">"Alloc site source is not a stack/heap/global variable: "</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(val));</div>
|
|
716
|
+
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *src : fwFindClsNameSources(val))</div>
|
|
717
|
+
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  {</div>
|
|
718
|
+
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *func = SVFUtil::dyn_cast<Function>(src)) addNamesFromFunc(func);</div>
|
|
719
|
+
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *call = SVFUtil::dyn_cast<CallBase>(src)) addNamesFromCall(call);</div>
|
|
720
|
+
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  <span class="keywordflow">else</span> <a class="code" href="ObjTypeInference_8cpp.html#a54176d0866e198769367b0dc65e049b5">ABORT_MSG</a>(<span class="stringliteral">"Source site from forward walk is invalid: "</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(src));</div>
|
|
721
|
+
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  }</div>
|
|
722
|
+
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  }</div>
|
|
723
|
+
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordflow">else</span></div>
|
|
724
|
+
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  {</div>
|
|
725
|
+
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <a class="code" href="ObjTypeInference_8cpp.html#aa73dde570491da218d3ef11359f16955">ERR_MSG</a>(<span class="stringliteral">"Unsupported source type found:"</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(val));</div>
|
|
726
|
+
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  }</div>
|
|
727
|
+
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  }</div>
|
|
728
|
+
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  </div>
|
|
729
|
+
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <span class="keywordflow">return</span> _thisPtrClassNames[thisPtr] = names;</div>
|
|
730
|
+
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> }</div>
|
|
731
|
+
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  </div>
|
|
732
|
+
<div class="line"><a name="l00700"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInference.html#a744de27c13a045108c834c9484d7271c"> 700</a></span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Value *></a> &<a class="code" href="classSVF_1_1ObjTypeInference.html#a744de27c13a045108c834c9484d7271c">ObjTypeInference::bwFindAllocOrClsNameSources</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *startValue)</div>
|
|
733
|
+
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> {</div>
|
|
734
|
+
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  </div>
|
|
735
|
+
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <span class="comment">// consult cache</span></div>
|
|
736
|
+
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keyword">auto</span> tIt = _valueToAllocOrClsNameSources.find(startValue);</div>
|
|
737
|
+
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordflow">if</span> (tIt != _valueToAllocOrClsNameSources.end())</div>
|
|
738
|
+
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  {</div>
|
|
739
|
+
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="keywordflow">return</span> tIt->second;</div>
|
|
740
|
+
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  }</div>
|
|
741
|
+
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  </div>
|
|
742
|
+
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  <span class="comment">// simulate the call stack, the second element indicates whether we should update sources for current value</span></div>
|
|
743
|
+
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <a class="code" href="classSVF_1_1FILOWorkList.html">FILOWorkList<ValueBoolPair></a> workList;</div>
|
|
744
|
+
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<ValueBoolPair></a> visited;</div>
|
|
745
|
+
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  workList.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>({startValue, <span class="keyword">false</span>});</div>
|
|
746
|
+
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <span class="keywordflow">while</span> (!workList.<a class="code" href="classSVF_1_1FILOWorkList.html#a071a624c91def82a4bbbf3806c7b7eea">empty</a>())</div>
|
|
747
|
+
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  {</div>
|
|
748
|
+
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="keyword">auto</span> curPair = workList.<a class="code" href="classSVF_1_1FILOWorkList.html#a3fd9acb6d09fd142bfd402fdf8cac93b">pop</a>();</div>
|
|
749
|
+
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <span class="keywordflow">if</span> (visited.count(curPair)) <span class="keywordflow">continue</span>;</div>
|
|
750
|
+
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  visited.insert(curPair);</div>
|
|
751
|
+
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *curValue = curPair.first;</div>
|
|
752
|
+
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <span class="keywordtype">bool</span> canUpdate = curPair.second;</div>
|
|
753
|
+
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  </div>
|
|
754
|
+
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Value *></a> sources;</div>
|
|
755
|
+
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="keyword">auto</span> insertSource = [&sources, &canUpdate](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *source)</div>
|
|
756
|
+
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  {</div>
|
|
757
|
+
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  <span class="keywordflow">if</span> (canUpdate) sources.insert(source);</div>
|
|
758
|
+
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  };</div>
|
|
759
|
+
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="keyword">auto</span> insertSourcesOrPushWorklist = [<span class="keyword">this</span>, &sources, &workList, &canUpdate](<span class="keyword">const</span> <span class="keyword">auto</span> &pUser)</div>
|
|
760
|
+
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  {</div>
|
|
761
|
+
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="keyword">auto</span> vIt = _valueToAllocOrClsNameSources.find(pUser);</div>
|
|
762
|
+
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  <span class="keywordflow">if</span> (canUpdate)</div>
|
|
763
|
+
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  {</div>
|
|
764
|
+
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <span class="keywordflow">if</span> (vIt != _valueToAllocOrClsNameSources.end() && !vIt->second.empty())</div>
|
|
765
|
+
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  {</div>
|
|
766
|
+
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  sources.insert(vIt->second.begin(), vIt->second.end());</div>
|
|
767
|
+
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  }</div>
|
|
768
|
+
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  }</div>
|
|
769
|
+
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keywordflow">else</span></div>
|
|
770
|
+
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  {</div>
|
|
771
|
+
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <span class="keywordflow">if</span> (vIt == _valueToAllocOrClsNameSources.end()) workList.push({pUser, <span class="keyword">false</span>});</div>
|
|
772
|
+
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  }</div>
|
|
773
|
+
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  };</div>
|
|
774
|
+
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  </div>
|
|
775
|
+
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  <span class="keywordflow">if</span> (!canUpdate && !_valueToAllocOrClsNameSources.count(curValue))</div>
|
|
776
|
+
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  {</div>
|
|
777
|
+
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  workList.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>({curValue, <span class="keyword">true</span>});</div>
|
|
778
|
+
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  }</div>
|
|
779
|
+
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  </div>
|
|
780
|
+
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <span class="comment">// If current value is an instruction inside a constructor/destructor/template, use it as a source</span></div>
|
|
781
|
+
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *inst = SVFUtil::dyn_cast<Instruction>(curValue))</div>
|
|
782
782
|
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  {</div>
|
|
783
|
-
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="keywordflow">
|
|
783
|
+
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *parent = inst->getFunction())</div>
|
|
784
784
|
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  {</div>
|
|
785
|
-
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> 
|
|
785
|
+
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(parent)) insertSource(parent);</div>
|
|
786
786
|
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  }</div>
|
|
787
787
|
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  }</div>
|
|
788
|
-
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> 
|
|
789
|
-
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> 
|
|
790
|
-
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> 
|
|
791
|
-
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> 
|
|
792
|
-
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> 
|
|
793
|
-
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> 
|
|
794
|
-
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> 
|
|
795
|
-
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> 
|
|
796
|
-
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> 
|
|
797
|
-
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> 
|
|
798
|
-
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> 
|
|
799
|
-
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> 
|
|
788
|
+
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  </div>
|
|
789
|
+
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <span class="comment">// If the current value is an object (global, heap, stack, etc) or name source (constructor/destructor,</span></div>
|
|
790
|
+
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  <span class="comment">// a C++ dynamic cast, or a template function), use it as a source</span></div>
|
|
791
|
+
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <span class="keywordflow">if</span> (isAlloc(curValue) || <a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(curValue))</div>
|
|
792
|
+
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  {</div>
|
|
793
|
+
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  insertSource(curValue);</div>
|
|
794
|
+
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  }</div>
|
|
795
|
+
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  </div>
|
|
796
|
+
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  <span class="comment">// Explore the current value further depending on the type of the value; use cached values if possible</span></div>
|
|
797
|
+
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *getElementPtrInst = SVFUtil::dyn_cast<GetElementPtrInst>(curValue))</div>
|
|
798
|
+
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  {</div>
|
|
799
|
+
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  insertSourcesOrPushWorklist(getElementPtrInst->getPointerOperand());</div>
|
|
800
800
|
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  }</div>
|
|
801
|
-
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *
|
|
801
|
+
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitCastInst = SVFUtil::dyn_cast<BitCastInst>(curValue))</div>
|
|
802
802
|
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  {</div>
|
|
803
|
-
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> 
|
|
804
|
-
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> 
|
|
805
|
-
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> 
|
|
806
|
-
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> 
|
|
807
|
-
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> 
|
|
808
|
-
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> 
|
|
809
|
-
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> 
|
|
810
|
-
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> 
|
|
811
|
-
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> 
|
|
812
|
-
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> 
|
|
813
|
-
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> 
|
|
814
|
-
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> 
|
|
815
|
-
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> 
|
|
816
|
-
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> 
|
|
817
|
-
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> 
|
|
818
|
-
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> 
|
|
819
|
-
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> 
|
|
820
|
-
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> 
|
|
821
|
-
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> 
|
|
822
|
-
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> 
|
|
823
|
-
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> 
|
|
824
|
-
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> 
|
|
825
|
-
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> 
|
|
826
|
-
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> 
|
|
827
|
-
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> 
|
|
828
|
-
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> 
|
|
829
|
-
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> 
|
|
830
|
-
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> 
|
|
831
|
-
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> 
|
|
832
|
-
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> 
|
|
833
|
-
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> 
|
|
834
|
-
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> 
|
|
835
|
-
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> 
|
|
836
|
-
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> 
|
|
837
|
-
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> 
|
|
838
|
-
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> 
|
|
839
|
-
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> 
|
|
840
|
-
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> 
|
|
841
|
-
<div class="line"><a name="l00809"></a><span class="lineno"
|
|
842
|
-
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> 
|
|
843
|
-
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> 
|
|
844
|
-
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  </div>
|
|
845
|
-
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> 
|
|
846
|
-
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> 
|
|
847
|
-
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> 
|
|
848
|
-
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> 
|
|
849
|
-
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> 
|
|
850
|
-
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> 
|
|
851
|
-
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> 
|
|
852
|
-
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> 
|
|
853
|
-
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> 
|
|
854
|
-
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> 
|
|
855
|
-
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> 
|
|
856
|
-
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> 
|
|
857
|
-
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> 
|
|
858
|
-
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> 
|
|
859
|
-
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> 
|
|
860
|
-
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> 
|
|
861
|
-
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> 
|
|
862
|
-
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <span class="keywordflow">
|
|
863
|
-
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> 
|
|
864
|
-
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> 
|
|
865
|
-
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> 
|
|
866
|
-
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> 
|
|
867
|
-
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> 
|
|
868
|
-
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> 
|
|
869
|
-
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> 
|
|
870
|
-
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> 
|
|
871
|
-
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> 
|
|
872
|
-
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> 
|
|
873
|
-
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> 
|
|
874
|
-
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> 
|
|
875
|
-
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> 
|
|
876
|
-
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> 
|
|
877
|
-
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> 
|
|
878
|
-
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> 
|
|
879
|
-
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  </div>
|
|
880
|
-
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> 
|
|
881
|
-
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> 
|
|
882
|
-
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> 
|
|
803
|
+
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  insertSourcesOrPushWorklist(bitCastInst->getOperand(0));</div>
|
|
804
|
+
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  }</div>
|
|
805
|
+
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *phiNode = SVFUtil::dyn_cast<PHINode>(curValue))</div>
|
|
806
|
+
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  {</div>
|
|
807
|
+
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *op : phiNode->operand_values())</div>
|
|
808
|
+
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  {</div>
|
|
809
|
+
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  insertSourcesOrPushWorklist(op);</div>
|
|
810
|
+
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  }</div>
|
|
811
|
+
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  }</div>
|
|
812
|
+
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *loadInst = SVFUtil::dyn_cast<LoadInst>(curValue))</div>
|
|
813
|
+
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  {</div>
|
|
814
|
+
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *user : loadInst->getPointerOperand()->users())</div>
|
|
815
|
+
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  {</div>
|
|
816
|
+
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *storeInst = SVFUtil::dyn_cast<StoreInst>(user))</div>
|
|
817
|
+
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  {</div>
|
|
818
|
+
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <span class="keywordflow">if</span> (storeInst->getPointerOperand() == loadInst->getPointerOperand())</div>
|
|
819
|
+
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  {</div>
|
|
820
|
+
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  insertSourcesOrPushWorklist(storeInst->getValueOperand());</div>
|
|
821
|
+
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  }</div>
|
|
822
|
+
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  }</div>
|
|
823
|
+
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  }</div>
|
|
824
|
+
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  }</div>
|
|
825
|
+
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *argument = SVFUtil::dyn_cast<Argument>(curValue))</div>
|
|
826
|
+
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  {</div>
|
|
827
|
+
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *user: argument->getParent()->users())</div>
|
|
828
|
+
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  {</div>
|
|
829
|
+
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast<CallBase>(user))</div>
|
|
830
|
+
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  {</div>
|
|
831
|
+
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  <span class="comment">// skip function as parameter</span></div>
|
|
832
|
+
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  <span class="comment">// e.g., call void @foo(%struct.ssl_ctx_st* %9, i32 (i8*, i32, i32, i8*)* @passwd_callback)</span></div>
|
|
833
|
+
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keywordflow">if</span> (callBase->getCalledFunction() != argument->getParent()) <span class="keywordflow">continue</span>;</div>
|
|
834
|
+
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> pos = argument->getParent()->isVarArg() ? 0 : argument->getArgNo();</div>
|
|
835
|
+
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  insertSourcesOrPushWorklist(callBase->getArgOperand(pos));</div>
|
|
836
|
+
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  }</div>
|
|
837
|
+
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  }</div>
|
|
838
|
+
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  }</div>
|
|
839
|
+
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast<CallBase>(curValue))</div>
|
|
840
|
+
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  {</div>
|
|
841
|
+
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(!callBase->doesNotReturn(), <span class="stringliteral">"callbase does not return:"</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(callBase));</div>
|
|
842
|
+
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callee = callBase->getCalledFunction())</div>
|
|
843
|
+
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  {</div>
|
|
844
|
+
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keywordflow">if</span> (!callee->isDeclaration())</div>
|
|
845
|
+
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  {</div>
|
|
846
|
+
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *svfFunc = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(callee);</div>
|
|
847
|
+
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *pValue = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#aaf9b679407f12b93afc53c157d37b444">getLLVMValue</a>(svfFunc-><a class="code" href="classSVF_1_1SVFFunction.html#ac4c28c8d205d354f3a982119f29f2aac">getExitBB</a>()-><a class="code" href="classSVF_1_1SVFBasicBlock.html#ad05f85ce931d4479f71d1947a25599dc">back</a>());</div>
|
|
848
|
+
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="keyword">const</span> <span class="keyword">auto</span> *retInst = SVFUtil::dyn_cast<ReturnInst>(pValue);</div>
|
|
849
|
+
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(retInst && retInst->getReturnValue(), <span class="stringliteral">"not return inst?"</span>);</div>
|
|
850
|
+
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  insertSourcesOrPushWorklist(retInst->getReturnValue());</div>
|
|
851
|
+
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  }</div>
|
|
852
|
+
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  }</div>
|
|
853
|
+
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  }</div>
|
|
854
|
+
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  </div>
|
|
855
|
+
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  <span class="comment">// If updating is allowed; store the gathered sources as sources for the current value in the cache</span></div>
|
|
856
|
+
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="keywordflow">if</span> (canUpdate)</div>
|
|
857
|
+
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  {</div>
|
|
858
|
+
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  _valueToAllocOrClsNameSources[curValue] = sources;</div>
|
|
859
|
+
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  }</div>
|
|
860
|
+
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  }</div>
|
|
861
|
+
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  </div>
|
|
862
|
+
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <span class="keywordflow">return</span> _valueToAllocOrClsNameSources[startValue];</div>
|
|
863
|
+
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> }</div>
|
|
864
|
+
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  </div>
|
|
865
|
+
<div class="line"><a name="l00833"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInference.html#af44dd44401384a8e50b0cbe288152ab5"> 833</a></span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const CallBase *></a> &<a class="code" href="classSVF_1_1ObjTypeInference.html#af44dd44401384a8e50b0cbe288152ab5">ObjTypeInference::fwFindClsNameSources</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *startValue)</div>
|
|
866
|
+
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> {</div>
|
|
867
|
+
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  assert(startValue && <span class="stringliteral">"startValue was null?"</span>);</div>
|
|
868
|
+
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  </div>
|
|
869
|
+
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <span class="comment">// consult cache</span></div>
|
|
870
|
+
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keyword">auto</span> tIt = <a class="code" href="classSVF_1_1ObjTypeInference.html#af1bd0b800558eb5e3bcc6fae9c86a874">_objToClsNameSources</a>.find(startValue);</div>
|
|
871
|
+
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <span class="keywordflow">if</span> (tIt != <a class="code" href="classSVF_1_1ObjTypeInference.html#af1bd0b800558eb5e3bcc6fae9c86a874">_objToClsNameSources</a>.end())</div>
|
|
872
|
+
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  {</div>
|
|
873
|
+
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <span class="keywordflow">return</span> tIt->second;</div>
|
|
874
|
+
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  }</div>
|
|
875
|
+
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  </div>
|
|
876
|
+
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const CallBase *></a> sources;</div>
|
|
877
|
+
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  </div>
|
|
878
|
+
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="comment">// Lambda for adding a callee to the sources iff it is a constructor/destructor/template/dyncast</span></div>
|
|
879
|
+
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="keyword">auto</span> inferViaCppCall = [&sources](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *caller)</div>
|
|
880
|
+
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  {</div>
|
|
881
|
+
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <span class="keywordflow">if</span> (!caller) <span class="keywordflow">return</span>;</div>
|
|
882
|
+
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">isClsNameSource</a>(caller)) sources.insert(caller);</div>
|
|
883
|
+
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  };</div>
|
|
884
|
+
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  </div>
|
|
885
|
+
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="comment">// Find all calls of starting val (or through cast); add as potential source iff applicable</span></div>
|
|
886
|
+
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *user : startValue->users())</div>
|
|
887
|
+
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  {</div>
|
|
888
|
+
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *caller = SVFUtil::dyn_cast<CallBase>(user))</div>
|
|
889
|
+
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  {</div>
|
|
890
|
+
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  inferViaCppCall(caller);</div>
|
|
891
|
+
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  }</div>
|
|
892
|
+
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitcast = SVFUtil::dyn_cast<BitCastInst>(user))</div>
|
|
893
|
+
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  {</div>
|
|
894
|
+
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *cast_user : bitcast->users())</div>
|
|
895
|
+
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  {</div>
|
|
896
|
+
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *caller = SVFUtil::dyn_cast<CallBase>(cast_user))</div>
|
|
897
|
+
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  {</div>
|
|
898
|
+
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  inferViaCppCall(caller);</div>
|
|
899
|
+
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  }</div>
|
|
900
|
+
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  }</div>
|
|
901
|
+
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  }</div>
|
|
902
|
+
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  }</div>
|
|
903
|
+
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  </div>
|
|
904
|
+
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <span class="comment">// Store sources in cache for starting value & return the found sources</span></div>
|
|
905
|
+
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ObjTypeInference.html#af1bd0b800558eb5e3bcc6fae9c86a874">_objToClsNameSources</a>[startValue] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVFUtil::move</a>(sources);</div>
|
|
906
|
+
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> }</div>
|
|
883
907
|
</div><!-- fragment --></div><!-- contents -->
|
|
884
|
-
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a744de27c13a045108c834c9484d7271c"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a744de27c13a045108c834c9484d7271c">SVF::ObjTypeInference::bwFindAllocOrClsNameSources</a></div><div class="ttdeci">Set< const Value * > & bwFindAllocOrClsNameSources(const Value *startValue)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#
|
|
908
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a744de27c13a045108c834c9484d7271c"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a744de27c13a045108c834c9484d7271c">SVF::ObjTypeInference::bwFindAllocOrClsNameSources</a></div><div class="ttdeci">Set< const Value * > & bwFindAllocOrClsNameSources(const Value *startValue)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00700">ObjTypeInference.cpp:700</a></div></div>
|
|
885
909
|
<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#l00105">LLVMModule.h:105</a></div></div>
|
|
886
910
|
<div class="ttc" id="aObjTypeInference_8cpp_html_ac48ef12f2a6f605d6fa5d31e7623a826"><div class="ttname"><a href="ObjTypeInference_8cpp.html#ac48ef12f2a6f605d6fa5d31e7623a826">WARN_MSG</a></div><div class="ttdeci">#define WARN_MSG(msg)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00071">ObjTypeInference.cpp:71</a></div></div>
|
|
887
911
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a7655b13bbfe720ca2b8a25e0a72528e6"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a7655b13bbfe720ca2b8a25e0a72528e6">SVF::SVFUtil::errMsg</a></div><div class="ttdeci">std::string errMsg(const std::string &msg)</div><div class="ttdoc">Print error message by converting a string into red string output.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00076">SVFUtil.cpp:76</a></div></div>
|
|
888
912
|
<div class="ttc" id="anamespaceSVF_html_aedf0d6718ca176e0b9e17ab4b30729c6"><div class="ttname"><a href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">SVF::OrderedMap</a></div><div class="ttdeci">std::map< Key, Value, Compare, Allocator > OrderedMap</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00105">GeneralType.h:105</a></div></div>
|
|
889
|
-
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_af44dd44401384a8e50b0cbe288152ab5"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#af44dd44401384a8e50b0cbe288152ab5">SVF::ObjTypeInference::fwFindClsNameSources</a></div><div class="ttdeci">Set< const CallBase * > & fwFindClsNameSources(const Value *startValue)</div><div class="ttdoc">forward find class name sources starting from an allocation</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#
|
|
890
|
-
<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#
|
|
913
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_af44dd44401384a8e50b0cbe288152ab5"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#af44dd44401384a8e50b0cbe288152ab5">SVF::ObjTypeInference::fwFindClsNameSources</a></div><div class="ttdeci">Set< const CallBase * > & fwFindClsNameSources(const Value *startValue)</div><div class="ttdoc">forward find class name sources starting from an allocation</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00833">ObjTypeInference.cpp:833</a></div></div>
|
|
914
|
+
<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#l00148">BasicTypes.h:148</a></div></div>
|
|
891
915
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_aca11801ed6ef6ff8d2a1e85bc0fc5794"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#aca11801ed6ef6ff8d2a1e85bc0fc5794">SVF::LLVMUtil::isObject</a></div><div class="ttdeci">bool isObject(const Value *ref)</div><div class="ttdoc">Return true if this value refers to a object.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00069">LLVMUtil.cpp:69</a></div></div>
|
|
892
916
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a86c0a0cb4ada72bd4f42c77558e6a350"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">SVF::LLVMUtil::dumpValueAndDbgInfo</a></div><div class="ttdeci">std::string dumpValueAndDbgInfo(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00917">LLVMUtil.cpp:917</a></div></div>
|
|
893
917
|
<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#l00198">LLVMModule.h:198</a></div></div>
|
|
894
918
|
<div class="ttc" id="aLLVMUtil_8h_html"><div class="ttname"><a href="LLVMUtil_8h.html">LLVMUtil.h</a></div></div>
|
|
895
919
|
<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="GeneralType_8h_source.html#l00092">GeneralType.h:92</a></div></div>
|
|
896
920
|
<div class="ttc" id="anamespaceSVF_1_1cppUtil_html_a4e1785295e2695fae72758d8bbe4f7ac"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a4e1785295e2695fae72758d8bbe4f7ac">SVF::cppUtil::classTyHasVTable</a></div><div class="ttdeci">bool classTyHasVTable(const StructType *ty)</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8cpp_source.html#l00504">CppUtil.cpp:504</a></div></div>
|
|
897
|
-
<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#
|
|
898
|
-
<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#
|
|
921
|
+
<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#l00067">BasicTypes.h:67</a></div></div>
|
|
922
|
+
<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#l00096">BasicTypes.h:96</a></div></div>
|
|
899
923
|
<div class="ttc" id="anamespaceSVF_1_1cppUtil_html_a26ccd6abf127a7ccc34a973f7b13161b"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a26ccd6abf127a7ccc34a973f7b13161b">SVF::cppUtil::extractClsNameFromDynCast</a></div><div class="ttdeci">std::string extractClsNameFromDynCast(const CallBase *callBase)</div><div class="ttdoc">extract class name from cpp dyncast function</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8cpp_source.html#l00853">CppUtil.cpp:853</a></div></div>
|
|
900
924
|
<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#l00205">LLVMModule.h:205</a></div></div>
|
|
901
|
-
<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#
|
|
925
|
+
<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#l00082">BasicTypes.h:82</a></div></div>
|
|
902
926
|
<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>
|
|
903
927
|
<div class="ttc" id="acJSON_8h_html_a25d22ecc7e656d2c59332072684e8766"><div class="ttname"><a href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a></div><div class="ttdeci">const char *const name</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00264">cJSON.h:264</a></div></div>
|
|
904
|
-
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a205fa59a7250270b216f47df78ef2319"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319">SVF::ObjTypeInference::selectLargestSizedType</a></div><div class="ttdeci">const Type * selectLargestSizedType(Set< const Type * > &objTys)</div><div class="ttdoc">select the largest (conservative) type from all types</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#
|
|
905
|
-
<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#
|
|
906
|
-
<div class="ttc" id="anamespaceSVF_html_affba423b674a0aba723e33101826e297"><div class="ttname"><a href="namespaceSVF.html#affba423b674a0aba723e33101826e297">SVF::LLVMContext</a></div><div class="ttdeci">llvm::LLVMContext LLVMContext</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#
|
|
907
|
-
<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#
|
|
908
|
-
<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#
|
|
928
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a205fa59a7250270b216f47df78ef2319"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319">SVF::ObjTypeInference::selectLargestSizedType</a></div><div class="ttdeci">const Type * selectLargestSizedType(Set< const Type * > &objTys)</div><div class="ttdoc">select the largest (conservative) type from all types</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00586">ObjTypeInference.cpp:586</a></div></div>
|
|
929
|
+
<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#l00085">BasicTypes.h:85</a></div></div>
|
|
930
|
+
<div class="ttc" id="anamespaceSVF_html_affba423b674a0aba723e33101826e297"><div class="ttname"><a href="namespaceSVF.html#affba423b674a0aba723e33101826e297">SVF::LLVMContext</a></div><div class="ttdeci">llvm::LLVMContext LLVMContext</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
|
|
931
|
+
<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#l00146">BasicTypes.h:146</a></div></div>
|
|
932
|
+
<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#l00083">BasicTypes.h:83</a></div></div>
|
|
909
933
|
<div class="ttc" id="aObjTypeInference_8h_html"><div class="ttname"><a href="ObjTypeInference_8h.html">ObjTypeInference.h</a></div></div>
|
|
910
934
|
<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#l00906">LLVMUtil.cpp:906</a></div></div>
|
|
911
935
|
<div class="ttc" id="aclassSVF_1_1SVFBasicBlock_html_ad05f85ce931d4479f71d1947a25599dc"><div class="ttname"><a href="classSVF_1_1SVFBasicBlock.html#ad05f85ce931d4479f71d1947a25599dc">SVF::SVFBasicBlock::back</a></div><div class="ttdeci">const SVFInstruction * back() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00603">SVFValue.h:603</a></div></div>
|
|
912
|
-
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a99eaaef89f214fc8587349361600b44d"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a99eaaef89f214fc8587349361600b44d">SVF::ObjTypeInference::typeSizeDiffTest</a></div><div class="ttdeci">void typeSizeDiffTest(const PointerType *oPTy, const Type *iTy, const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#
|
|
936
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a99eaaef89f214fc8587349361600b44d"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a99eaaef89f214fc8587349361600b44d">SVF::ObjTypeInference::typeSizeDiffTest</a></div><div class="ttdeci">void typeSizeDiffTest(const PointerType *oPTy, const Type *iTy, const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00563">ObjTypeInference.cpp:563</a></div></div>
|
|
913
937
|
<div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ac1a9d20d62066ec4e181fad223669e32"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ac1a9d20d62066ec4e181fad223669e32">SVF::LLVMModuleSet::getContext</a></div><div class="ttdeci">LLVMContext & getContext() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00344">LLVMModule.h:344</a></div></div>
|
|
914
938
|
<div class="ttc" id="aCppUtil_8h_html"><div class="ttname"><a href="CppUtil_8h.html">CppUtil.h</a></div></div>
|
|
915
939
|
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a9d99aa95a862bc1434c6fbc3dec67a64"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a9d99aa95a862bc1434c6fbc3dec67a64">SVF::ObjTypeInference::fwInferObjType</a></div><div class="ttdeci">const Type * fwInferObjType(const Value *var)</div><div class="ttdoc">forward infer the type of the object pointed by var</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00162">ObjTypeInference.cpp:162</a></div></div>
|
|
@@ -917,19 +941,19 @@ $(function() {
|
|
|
917
941
|
<div class="ttc" id="anamespaceSVF_1_1cppUtil_html_a985a32c8324d559a87e4ee6e5a1e1efd"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a985a32c8324d559a87e4ee6e5a1e1efd">SVF::cppUtil::isClsNameSource</a></div><div class="ttdeci">bool isClsNameSource(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8cpp_source.html#l00793">CppUtil.cpp:793</a></div></div>
|
|
918
942
|
<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>
|
|
919
943
|
<div class="ttc" id="anamespaceSVF_1_1cppUtil_html_ae97bb256f20aa617f21a49c98d46177a"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#ae97bb256f20aa617f21a49c98d46177a">SVF::cppUtil::extractClsNamesFromFunc</a></div><div class="ttdeci">Set< std::string > extractClsNamesFromFunc(const Function *foo)</div><div class="ttdoc">extract class name from the c++ function name, e.g., constructor/destructors</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8cpp_source.html#l00641">CppUtil.cpp:641</a></div></div>
|
|
920
|
-
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a5eae038a7bffb0549ca75cd9c850ff1e"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">SVF::ObjTypeInference::objTyToNumFields</a></div><div class="ttdeci">u32_t objTyToNumFields(const Type *objTy)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#
|
|
944
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a5eae038a7bffb0549ca75cd9c850ff1e"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">SVF::ObjTypeInference::objTyToNumFields</a></div><div class="ttdeci">u32_t objTyToNumFields(const Type *objTy)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00602">ObjTypeInference.cpp:602</a></div></div>
|
|
921
945
|
<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>
|
|
922
946
|
<div class="ttc" id="aclassSVF_1_1FILOWorkList_html_afcf3fcda18e8d3e2bad70a51376c0ce1"><div class="ttname"><a href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">SVF::FILOWorkList::push</a></div><div class="ttdeci">bool push(const Data &data)</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00257">WorkList.h:257</a></div></div>
|
|
923
947
|
<div class="ttc" id="aBasicTypes_8h_html"><div class="ttname"><a href="BasicTypes_8h.html">BasicTypes.h</a></div></div>
|
|
924
|
-
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a42149ece87a178241ef1ef0cce7ec554"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a42149ece87a178241ef1ef0cce7ec554">SVF::ObjTypeInference::bwfindAllocOfVar</a></div><div class="ttdeci">Set< const Value * > & bwfindAllocOfVar(const Value *var)</div><div class="ttdoc">backward collect all possible allocation sites (stack, static, heap) of var</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#
|
|
925
|
-
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a62020ece25ac660f1adb41bd0cf40be7"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a62020ece25ac660f1adb41bd0cf40be7">SVF::ObjTypeInference::isAlloc</a></div><div class="ttdeci">bool isAlloc(const SVF::Value *val)</div><div class="ttdoc">is allocation (stack, static, heap)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#
|
|
948
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a42149ece87a178241ef1ef0cce7ec554"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a42149ece87a178241ef1ef0cce7ec554">SVF::ObjTypeInference::bwfindAllocOfVar</a></div><div class="ttdeci">Set< const Value * > & bwfindAllocOfVar(const Value *var)</div><div class="ttdoc">backward collect all possible allocation sites (stack, static, heap) of var</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00410">ObjTypeInference.cpp:410</a></div></div>
|
|
949
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a62020ece25ac660f1adb41bd0cf40be7"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a62020ece25ac660f1adb41bd0cf40be7">SVF::ObjTypeInference::isAlloc</a></div><div class="ttdeci">bool isAlloc(const SVF::Value *val)</div><div class="ttdoc">is allocation (stack, static, heap)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00529">ObjTypeInference.cpp:529</a></div></div>
|
|
926
950
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a72502f7f536418621485e90ab98c2016"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVF::SVFUtil::move</a></div><div class="ttdeci">constexpr std::remove_reference< T >::type && move(T &&t) noexcept</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00621">SVFUtil.h:621</a></div></div>
|
|
927
951
|
<div class="ttc" id="aclassSVF_1_1SVFFunction_html_ac4c28c8d205d354f3a982119f29f2aac"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ac4c28c8d205d354f3a982119f29f2aac">SVF::SVFFunction::getExitBB</a></div><div class="ttdeci">const SVFBasicBlock * getExitBB() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8cpp_source.html#l00192">SVFValue.cpp:192</a></div></div>
|
|
928
952
|
<div class="ttc" id="aLLVMModule_8h_html"><div class="ttname"><a href="LLVMModule_8h.html">LLVMModule.h</a></div></div>
|
|
929
953
|
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_aee4383a13cda421acb034ea147e33a6d"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#aee4383a13cda421acb034ea147e33a6d">SVF::ObjTypeInference::defaultType</a></div><div class="ttdeci">const Type * defaultType(const Value *val)</div><div class="ttdoc">default type</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00114">ObjTypeInference.cpp:114</a></div></div>
|
|
930
954
|
<div class="ttc" id="anamespaceSVF_html_a4f21e91ff8eaea5207afe5c60dbd78d7"><div class="ttname"><a href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">SVF::OrderedSet</a></div><div class="ttdeci">std::set< Key, Compare, Allocator > OrderedSet</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00101">GeneralType.h:101</a></div></div>
|
|
931
955
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00050">SVFUtil.h:50</a></div></div>
|
|
932
|
-
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_afe926ee3427bb329d189e0c40bb1cd60"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#afe926ee3427bb329d189e0c40bb1cd60">SVF::ObjTypeInference::validateTypeCheck</a></div><div class="ttdeci">void validateTypeCheck(const CallBase *cs)</div><div class="ttdoc">validate type inference</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#
|
|
956
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_afe926ee3427bb329d189e0c40bb1cd60"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#afe926ee3427bb329d189e0c40bb1cd60">SVF::ObjTypeInference::validateTypeCheck</a></div><div class="ttdeci">void validateTypeCheck(const CallBase *cs)</div><div class="ttdoc">validate type inference</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00538">ObjTypeInference.cpp:538</a></div></div>
|
|
933
957
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a05dc00b2bd9a8176aae31b6cfffe725d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a05dc00b2bd9a8176aae31b6cfffe725d">SVF::SVFUtil::sucMsg</a></div><div class="ttdeci">std::string sucMsg(const std::string &msg)</div><div class="ttdoc">Returns successful message by converting a string into green string output.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00053">SVFUtil.cpp:53</a></div></div>
|
|
934
958
|
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_af1bd0b800558eb5e3bcc6fae9c86a874"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#af1bd0b800558eb5e3bcc6fae9c86a874">SVF::ObjTypeInference::_objToClsNameSources</a></div><div class="ttdeci">ObjToClsNameSources _objToClsNameSources</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8h_source.html#l00060">ObjTypeInference.h:60</a></div></div>
|
|
935
959
|
<div class="ttc" id="aObjTypeInference_8cpp_html_a5f334de99eb942058f27a1025c346f70"><div class="ttname"><a href="ObjTypeInference_8cpp.html#a5f334de99eb942058f27a1025c346f70">TYPEMALLOC</a></div><div class="ttdeci">const std::string TYPEMALLOC</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00081">ObjTypeInference.cpp:81</a></div></div>
|
|
@@ -943,10 +967,10 @@ $(function() {
|
|
|
943
967
|
<div class="ttc" id="aclassSVF_1_1FILOWorkList_html_a3fd9acb6d09fd142bfd402fdf8cac93b"><div class="ttname"><a href="classSVF_1_1FILOWorkList.html#a3fd9acb6d09fd142bfd402fdf8cac93b">SVF::FILOWorkList::pop</a></div><div class="ttdeci">Data pop()</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00272">WorkList.h:272</a></div></div>
|
|
944
968
|
<div class="ttc" id="aclassSVF_1_1FILOWorkList_html"><div class="ttname"><a href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a></div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00044">AbstractExecution.h:44</a></div></div>
|
|
945
969
|
<div class="ttc" id="aclassSVF_1_1Options_html_aaab923c093730b1670a54f09340b1bd5"><div class="ttname"><a href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">SVF::Options::MaxFieldLimit</a></div><div class="ttdeci">static const Option< u32_t > MaxFieldLimit</div><div class="ttdoc">Maximum number of field derivations for an object.</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00038">Options.h:38</a></div></div>
|
|
946
|
-
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a72da2d7f06e8fee67dc5b3c451fa5dee"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a72da2d7f06e8fee67dc5b3c451fa5dee">SVF::ObjTypeInference::getArgPosInCall</a></div><div class="ttdeci">u32_t getArgPosInCall(const CallBase *callBase, const Value *arg)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#
|
|
970
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a72da2d7f06e8fee67dc5b3c451fa5dee"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a72da2d7f06e8fee67dc5b3c451fa5dee">SVF::ObjTypeInference::getArgPosInCall</a></div><div class="ttdeci">u32_t getArgPosInCall(const CallBase *callBase, const Value *arg)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00577">ObjTypeInference.cpp:577</a></div></div>
|
|
947
971
|
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_ae905a7d3f1b211fbaaf9e703b1f44482"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#ae905a7d3f1b211fbaaf9e703b1f44482">SVF::ObjTypeInference::inferObjType</a></div><div class="ttdeci">const Type * inferObjType(const Value *var)</div><div class="ttdoc">get or infer the type of the object pointed by the value</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00136">ObjTypeInference.cpp:136</a></div></div>
|
|
948
972
|
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a172f97ff9c9a7c90dbec6329c89775ad"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a172f97ff9c9a7c90dbec6329c89775ad">SVF::ObjTypeInference::getLLVMCtx</a></div><div class="ttdeci">LLVMContext & getLLVMCtx()</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00125">ObjTypeInference.cpp:125</a></div></div>
|
|
949
|
-
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a8b5f65818c69c70e07ffbc2bbe1c7c91"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a8b5f65818c69c70e07ffbc2bbe1c7c91">SVF::ObjTypeInference::inferThisPtrClsName</a></div><div class="ttdeci">Set< std::string > & inferThisPtrClsName(const Value *thisPtr)</div><div class="ttdoc">get or infer the class names of thisptr</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#
|
|
973
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a8b5f65818c69c70e07ffbc2bbe1c7c91"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a8b5f65818c69c70e07ffbc2bbe1c7c91">SVF::ObjTypeInference::inferThisPtrClsName</a></div><div class="ttdeci">Set< std::string > & inferThisPtrClsName(const Value *thisPtr)</div><div class="ttdoc">get or infer the class names of thisptr</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00627">ObjTypeInference.cpp:627</a></div></div>
|
|
950
974
|
<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#l00099">LLVMUtil.h:99</a></div></div>
|
|
951
975
|
<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="GeneralType_8h_source.html#l00046">GeneralType.h:46</a></div></div>
|
|
952
976
|
<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>
|