svf-tools 1.0.461 → 1.0.464
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/Andersen_8h_source.html +2 -2
- package/SVF-doxygen/html/html/Annotator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/BreakConstantExpr_8cpp.html +1 -1
- package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CFLAlias_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CFLGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +16 -16
- package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +5 -5
- package/SVF-doxygen/html/html/CHG_8cpp.html +2 -2
- package/SVF-doxygen/html/html/CHG_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/CHG_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +17 -17
- package/SVF-doxygen/html/html/CPPUtil_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ConsG_8h_source.html +5 -5
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CxtStmt_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +23 -23
- package/SVF-doxygen/html/html/DCHG_8h_source.html +11 -11
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/DDAPass_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DPItem_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +7 -7
- package/SVF-doxygen/html/html/ExeState_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ExtAPI_8h_source.html +3 -3
- package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp.html +7 -6
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +51 -50
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +28 -28
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +6 -6
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +5 -5
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +16 -16
- package/SVF-doxygen/html/html/LLVMUtil_8h.html +1 -1
- package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +12 -12
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LeakChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp.html +2 -2
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/MHP_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +4 -4
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MTA_8h_source.html +4 -4
- package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemPartition_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Options_8cpp_source.html +11 -12
- package/SVF-doxygen/html/html/Options_8h_source.html +11 -12
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +4 -4
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +6 -6
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h.html +157 -67
- package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h_source.html +72 -67
- package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +50 -43
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +43 -42
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +20 -22
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +45 -46
- package/SVF-doxygen/html/html/SVFModule_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/SVFUtil_8h_source.html +5 -5
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +28 -28
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +2 -2
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/TCT_8h_source.html +8 -8
- package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +4 -4
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +2 -2
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp.html +3 -2
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +45 -44
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +33 -33
- package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +0 -12
- package/SVF-doxygen/html/html/Util_2BasicTypes_8h_source.html +71 -76
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/WPAPass_8h_source.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1Annotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +41 -41
- package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CondStdSet.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CondVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ContextCond.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtProc.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +152 -152
- package/SVF-doxygen/html/html/classSVF_1_1DCHNode.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +117 -117
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IteratedDominanceFrontier.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1MemSSADF.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MergeFunctionRets.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +79 -80
- package/SVF-doxygen/html/html/classSVF_1_1Options.html +11 -37
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACFInfoBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +27 -27
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +94 -95
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +119 -160
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +56 -55
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +125 -81
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +129 -129
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +11 -11
- package/SVF-doxygen/html/html/functions_func_g.html +1 -1
- package/SVF-doxygen/html/html/functions_g.html +12 -15
- package/SVF-doxygen/html/html/functions_i.html +3 -3
- package/SVF-doxygen/html/html/functions_l.html +6 -6
- package/SVF-doxygen/html/html/functions_n.html +3 -3
- package/SVF-doxygen/html/html/functions_p.html +18 -14
- package/SVF-doxygen/html/html/functions_s.html +13 -15
- package/SVF-doxygen/html/html/functions_t.html +1 -3
- package/SVF-doxygen/html/html/functions_v.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_g.html +0 -3
- package/SVF-doxygen/html/html/functions_w.html +10 -6
- package/SVF-doxygen/html/html/globals_d.html +12 -0
- package/SVF-doxygen/html/html/globals_g.html +5 -2
- package/SVF-doxygen/html/html/globals_s.html +3 -3
- package/SVF-doxygen/html/html/globals_type.html +15 -0
- package/SVF-doxygen/html/html/namespaceSVF.html +35 -131
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +42 -42
- package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +29 -29
- package/SVF-doxygen/html/html/namespacemembers_d.html +2 -14
- package/SVF-doxygen/html/html/namespacemembers_g.html +2 -5
- package/SVF-doxygen/html/html/namespacemembers_type.html +0 -15
- package/SVF-doxygen/html/html/search/all_10.js +6 -6
- package/SVF-doxygen/html/html/search/all_13.js +12 -12
- package/SVF-doxygen/html/html/search/all_14.js +3 -3
- package/SVF-doxygen/html/html/search/all_16.js +1 -1
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_4.js +4 -4
- package/SVF-doxygen/html/html/search/all_7.js +2 -3
- package/SVF-doxygen/html/html/search/all_9.js +1 -1
- package/SVF-doxygen/html/html/search/all_b.js +1 -1
- package/SVF-doxygen/html/html/search/all_c.js +2 -2
- package/SVF-doxygen/html/html/search/all_d.js +1 -1
- package/SVF-doxygen/html/html/search/all_e.js +3 -3
- package/SVF-doxygen/html/html/search/functions_10.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_3.js +4 -4
- package/SVF-doxygen/html/html/search/typedefs_6.js +1 -1
- package/SVF-doxygen/html/html/search/variables_14.js +3 -3
- package/SVF-doxygen/html/html/search/variables_7.js +0 -1
- package/SVF-doxygen/html/html/search/variables_e.js +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4.html +3 -3
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PTACallGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +4 -4
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +4 -4
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CallSite_01_4.html +3 -3
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtProc_01_4.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
- package/include/MemoryModel/SVFIR.h +0 -1
- package/include/SVF-FE/BasicTypes.h +6 -1
- package/include/SVF-FE/SVFIRBuilder.h +1 -0
- package/include/Util/BasicTypes.h +1 -9
- package/include/Util/Options.h +0 -3
- package/lib/MemoryModel/SVFIR.cpp +4 -28
- package/lib/SVF-FE/SVFIRBuilder.cpp +25 -2
- package/lib/Util/Options.cpp +0 -8
- package/lib/WPA/FlowSensitiveTBHC.cpp +1 -0
- package/lib/WPA/TypeAnalysis.cpp +1 -1
- package/lib/WPA/TypeBasedHeapCloning.cpp +1 -0
- package/package.json +1 -1
|
@@ -111,25 +111,25 @@ Public Member Functions</h2></td></tr>
|
|
|
111
111
|
<tr class="separator:a3383b841bb79ee39cb108b9906fca6a9"><td class="memSeparator" colspan="2"> </td></tr>
|
|
112
112
|
<tr class="memitem:a6a5d012fda005d45bf3196d1a7d2c6fa"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a6a5d012fda005d45bf3196d1a7d2c6fa">getVFnsFromVtbls</a> (<a class="el" href="classSVF_1_1CallSite.html">CallSite</a> cs, const <a class="el" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a> &vtbls, <a class="el" href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7">VFunSet</a> &virtualFunctions) override</td></tr>
|
|
113
113
|
<tr class="separator:a6a5d012fda005d45bf3196d1a7d2c6fa"><td class="memSeparator" colspan="2"> </td></tr>
|
|
114
|
-
<tr class="memitem:ab33f9af6ad22eb99dd0d9950fb0e50e6"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#ab33f9af6ad22eb99dd0d9950fb0e50e6">isBase</a> (const <a class="el" href="
|
|
114
|
+
<tr class="memitem:ab33f9af6ad22eb99dd0d9950fb0e50e6"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#ab33f9af6ad22eb99dd0d9950fb0e50e6">isBase</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *a, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *b, bool firstField)</td></tr>
|
|
115
115
|
<tr class="separator:ab33f9af6ad22eb99dd0d9950fb0e50e6"><td class="memSeparator" colspan="2"> </td></tr>
|
|
116
|
-
<tr class="memitem:af0534356b4a8c68507e1237f1d7a8c11"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#af0534356b4a8c68507e1237f1d7a8c11">isFieldOf</a> (const <a class="el" href="
|
|
116
|
+
<tr class="memitem:af0534356b4a8c68507e1237f1d7a8c11"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#af0534356b4a8c68507e1237f1d7a8c11">isFieldOf</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *f, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *b)</td></tr>
|
|
117
117
|
<tr class="memdesc:af0534356b4a8c68507e1237f1d7a8c11"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if f is a field of b (fields from getFieldTypes). <a href="#af0534356b4a8c68507e1237f1d7a8c11">More...</a><br /></td></tr>
|
|
118
118
|
<tr class="separator:af0534356b4a8c68507e1237f1d7a8c11"><td class="memSeparator" colspan="2"> </td></tr>
|
|
119
|
-
<tr class="memitem:a079feacdcc3783f4a9108a3b2d2aed2c"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="
|
|
119
|
+
<tr class="memitem:a079feacdcc3783f4a9108a3b2d2aed2c"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t)</td></tr>
|
|
120
120
|
<tr class="separator:a079feacdcc3783f4a9108a3b2d2aed2c"><td class="memSeparator" colspan="2"> </td></tr>
|
|
121
|
-
<tr class="memitem:acaff636e6a9cf59363d6ee00435c04ff"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="
|
|
121
|
+
<tr class="memitem:acaff636e6a9cf59363d6ee00435c04ff"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#acaff636e6a9cf59363d6ee00435c04ff">getFieldType</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *base, unsigned idx)</td></tr>
|
|
122
122
|
<tr class="memdesc:acaff636e6a9cf59363d6ee00435c04ff"><td class="mdescLeft"> </td><td class="mdescRight">Returns the type of field number idx (flattened) in base. <a href="#acaff636e6a9cf59363d6ee00435c04ff">More...</a><br /></td></tr>
|
|
123
123
|
<tr class="separator:acaff636e6a9cf59363d6ee00435c04ff"><td class="memSeparator" colspan="2"> </td></tr>
|
|
124
|
-
<tr class="memitem:ae9a0007299178912e2568dc7158d6824"><td class="memItemLeft" align="right" valign="top">const std::vector< const <a class="el" href="
|
|
124
|
+
<tr class="memitem:ae9a0007299178912e2568dc7158d6824"><td class="memItemLeft" align="right" valign="top">const std::vector< const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * > & </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">getFieldTypes</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *base)</td></tr>
|
|
125
125
|
<tr class="memdesc:ae9a0007299178912e2568dc7158d6824"><td class="mdescLeft"> </td><td class="mdescRight">Returns a vector of the types of all fields in base. <a href="#ae9a0007299178912e2568dc7158d6824">More...</a><br /></td></tr>
|
|
126
126
|
<tr class="separator:ae9a0007299178912e2568dc7158d6824"><td class="memSeparator" colspan="2"> </td></tr>
|
|
127
|
-
<tr class="memitem:a0788694fbff155949fc4f4d6487c223e"><td class="memItemLeft" align="right" valign="top">unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a0788694fbff155949fc4f4d6487c223e">getNumFields</a> (const <a class="el" href="
|
|
127
|
+
<tr class="memitem:a0788694fbff155949fc4f4d6487c223e"><td class="memItemLeft" align="right" valign="top">unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a0788694fbff155949fc4f4d6487c223e">getNumFields</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *base)</td></tr>
|
|
128
128
|
<tr class="separator:a0788694fbff155949fc4f4d6487c223e"><td class="memSeparator" colspan="2"> </td></tr>
|
|
129
|
-
<tr class="memitem:a159e158c794fff115d5642b85963f43b"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< const <a class="el" href="
|
|
129
|
+
<tr class="memitem:a159e158c794fff115d5642b85963f43b"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * > & </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a159e158c794fff115d5642b85963f43b">getAggs</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *base)</td></tr>
|
|
130
130
|
<tr class="memdesc:a159e158c794fff115d5642b85963f43b"><td class="mdescLeft"> </td><td class="mdescRight">Returns all the aggregates contained (transitively) in base. <a href="#a159e158c794fff115d5642b85963f43b">More...</a><br /></td></tr>
|
|
131
131
|
<tr class="separator:a159e158c794fff115d5642b85963f43b"><td class="memSeparator" colspan="2"> </td></tr>
|
|
132
|
-
<tr class="memitem:a2b2dbc52089696854a8339f2e83fc333"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a2b2dbc52089696854a8339f2e83fc333">isFirstField</a> (const <a class="el" href="
|
|
132
|
+
<tr class="memitem:a2b2dbc52089696854a8339f2e83fc333"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a2b2dbc52089696854a8339f2e83fc333">isFirstField</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *f, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *b)</td></tr>
|
|
133
133
|
<tr class="separator:a2b2dbc52089696854a8339f2e83fc333"><td class="memSeparator" colspan="2"> </td></tr>
|
|
134
134
|
<tr class="inherit_header pub_methods_classSVF_1_1CommonCHGraph"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classSVF_1_1CommonCHGraph')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classSVF_1_1CommonCHGraph.html">SVF::CommonCHGraph</a></td></tr>
|
|
135
135
|
<tr class="memitem:aeb7e79b36c74bcded008fe227952c335 inherit pub_methods_classSVF_1_1CommonCHGraph"><td class="memItemLeft" align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CommonCHGraph.html#aeb7e79b36c74bcded008fe227952c335">~CommonCHGraph</a> ()</td></tr>
|
|
@@ -180,18 +180,18 @@ Public Member Functions</h2></td></tr>
|
|
|
180
180
|
</table><table class="memberdecls">
|
|
181
181
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
|
|
182
182
|
Static Public Member Functions</h2></td></tr>
|
|
183
|
-
<tr class="memitem:a175ed6ad0c9b23d5617f755ab96c76c4"><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="
|
|
183
|
+
<tr class="memitem:a175ed6ad0c9b23d5617f755ab96c76c4"><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *)</td></tr>
|
|
184
184
|
<tr class="memdesc:a175ed6ad0c9b23d5617f755ab96c76c4"><td class="mdescLeft"> </td><td class="mdescRight">Returns the DIType beneath the qualifiers. Does not strip away "DW_TAG_members". <a href="#a175ed6ad0c9b23d5617f755ab96c76c4">More...</a><br /></td></tr>
|
|
185
185
|
<tr class="separator:a175ed6ad0c9b23d5617f755ab96c76c4"><td class="memSeparator" colspan="2"> </td></tr>
|
|
186
|
-
<tr class="memitem:a6c276e661e5e63c1c84387f84c8a62e4"><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="
|
|
186
|
+
<tr class="memitem:a6c276e661e5e63c1c84387f84c8a62e4"><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a6c276e661e5e63c1c84387f84c8a62e4">stripArray</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *)</td></tr>
|
|
187
187
|
<tr class="memdesc:a6c276e661e5e63c1c84387f84c8a62e4"><td class="mdescLeft"> </td><td class="mdescRight">Returns the DIType beneath all qualifiers and arrays. <a href="#a6c276e661e5e63c1c84387f84c8a62e4">More...</a><br /></td></tr>
|
|
188
188
|
<tr class="separator:a6c276e661e5e63c1c84387f84c8a62e4"><td class="memSeparator" colspan="2"> </td></tr>
|
|
189
|
-
<tr class="memitem:acb76ab20da1bfbec00f63d08e48cbddd"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">teq</a> (const <a class="el" href="
|
|
189
|
+
<tr class="memitem:acb76ab20da1bfbec00f63d08e48cbddd"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">teq</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t1, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t2)</td></tr>
|
|
190
190
|
<tr class="separator:acb76ab20da1bfbec00f63d08e48cbddd"><td class="memSeparator" colspan="2"> </td></tr>
|
|
191
|
-
<tr class="memitem:a2dc488345cc3a5f37079952f638d8c2b"><td class="memItemLeft" align="right" valign="top">static std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a> (const <a class="el" href="
|
|
191
|
+
<tr class="memitem:a2dc488345cc3a5f37079952f638d8c2b"><td class="memItemLeft" align="right" valign="top">static std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *)</td></tr>
|
|
192
192
|
<tr class="memdesc:a2dc488345cc3a5f37079952f638d8c2b"><td class="mdescLeft"> </td><td class="mdescRight">Returns a human-readable version of the DIType. <a href="#a2dc488345cc3a5f37079952f638d8c2b">More...</a><br /></td></tr>
|
|
193
193
|
<tr class="separator:a2dc488345cc3a5f37079952f638d8c2b"><td class="memSeparator" colspan="2"> </td></tr>
|
|
194
|
-
<tr class="memitem:a9d2be5aec5216cbc1d1709b41f79c44b"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">isAgg</a> (const <a class="el" href="
|
|
194
|
+
<tr class="memitem:a9d2be5aec5216cbc1d1709b41f79c44b"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">isAgg</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t)</td></tr>
|
|
195
195
|
<tr class="separator:a9d2be5aec5216cbc1d1709b41f79c44b"><td class="memSeparator" colspan="2"> </td></tr>
|
|
196
196
|
<tr class="memitem:af9970ff0ef4a8f4c638da9f519d14a21"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#af9970ff0ef4a8f4c638da9f519d14a21">classof</a> (const <a class="el" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</a> *chg)</td></tr>
|
|
197
197
|
<tr class="separator:af9970ff0ef4a8f4c638da9f519d14a21"><td class="memSeparator" colspan="2"> </td></tr>
|
|
@@ -204,34 +204,34 @@ Protected Attributes</h2></td></tr>
|
|
|
204
204
|
<tr class="memitem:aa6f49dfc9e3580d3f2d8c257395eb11e"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a> = false</td></tr>
|
|
205
205
|
<tr class="memdesc:aa6f49dfc9e3580d3f2d8c257395eb11e"><td class="mdescLeft"> </td><td class="mdescRight">Whether this CHG is an extended CHG (first-field). Set by buildCHG. <a href="#aa6f49dfc9e3580d3f2d8c257395eb11e">More...</a><br /></td></tr>
|
|
206
206
|
<tr class="separator:aa6f49dfc9e3580d3f2d8c257395eb11e"><td class="memSeparator" colspan="2"> </td></tr>
|
|
207
|
-
<tr class="memitem:a581ce71cbc7994f71c9a6b9b145d3b9f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="
|
|
207
|
+
<tr class="memitem:a581ce71cbc7994f71c9a6b9b145d3b9f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a> * > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a581ce71cbc7994f71c9a6b9b145d3b9f">diTypeToNodeMap</a></td></tr>
|
|
208
208
|
<tr class="memdesc:a581ce71cbc7994f71c9a6b9b145d3b9f"><td class="mdescLeft"> </td><td class="mdescRight">Maps DITypes to their nodes. <a href="#a581ce71cbc7994f71c9a6b9b145d3b9f">More...</a><br /></td></tr>
|
|
209
209
|
<tr class="separator:a581ce71cbc7994f71c9a6b9b145d3b9f"><td class="memSeparator" colspan="2"> </td></tr>
|
|
210
|
-
<tr class="memitem:aaa63715e67ade7711a0366eb7559b708"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *, const <a class="el" href="
|
|
210
|
+
<tr class="memitem:aaa63715e67ade7711a0366eb7559b708"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a></td></tr>
|
|
211
211
|
<tr class="memdesc:aaa63715e67ade7711a0366eb7559b708"><td class="mdescLeft"> </td><td class="mdescRight">Maps VTables to the DIType associated with them. <a href="#aaa63715e67ade7711a0366eb7559b708">More...</a><br /></td></tr>
|
|
212
212
|
<tr class="separator:aaa63715e67ade7711a0366eb7559b708"><td class="memSeparator" colspan="2"> </td></tr>
|
|
213
|
-
<tr class="memitem:ac0d5f1e10f642aac5b64792bf5fcbd9d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="
|
|
213
|
+
<tr class="memitem:ac0d5f1e10f642aac5b64792bf5fcbd9d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#ac0d5f1e10f642aac5b64792bf5fcbd9d">chaMap</a></td></tr>
|
|
214
214
|
<tr class="memdesc:ac0d5f1e10f642aac5b64792bf5fcbd9d"><td class="mdescLeft"> </td><td class="mdescRight">Maps types to all children (i.e. CHA). <a href="#ac0d5f1e10f642aac5b64792bf5fcbd9d">More...</a><br /></td></tr>
|
|
215
215
|
<tr class="separator:ac0d5f1e10f642aac5b64792bf5fcbd9d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
216
|
-
<tr class="memitem:abe8d313b501182ab62f2276a19d670a4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="
|
|
216
|
+
<tr class="memitem:abe8d313b501182ab62f2276a19d670a4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#abe8d313b501182ab62f2276a19d670a4">chaFFMap</a></td></tr>
|
|
217
217
|
<tr class="memdesc:abe8d313b501182ab62f2276a19d670a4"><td class="mdescLeft"> </td><td class="mdescRight">Maps types to all children but also considering first field. <a href="#abe8d313b501182ab62f2276a19d670a4">More...</a><br /></td></tr>
|
|
218
218
|
<tr class="separator:abe8d313b501182ab62f2276a19d670a4"><td class="memSeparator" colspan="2"> </td></tr>
|
|
219
|
-
<tr class="memitem:a294e7a04aff9cef87c1008e91a620155"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="
|
|
219
|
+
<tr class="memitem:a294e7a04aff9cef87c1008e91a620155"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a></td></tr>
|
|
220
220
|
<tr class="memdesc:a294e7a04aff9cef87c1008e91a620155"><td class="mdescLeft"> </td><td class="mdescRight">Maps types to a set with their vtable and all their children's. <a href="#a294e7a04aff9cef87c1008e91a620155">More...</a><br /></td></tr>
|
|
221
221
|
<tr class="separator:a294e7a04aff9cef87c1008e91a620155"><td class="memSeparator" colspan="2"> </td></tr>
|
|
222
222
|
<tr class="memitem:ad79a569e77f94fa8494eed3f18e07e90"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< <a class="el" href="classSVF_1_1CallSite.html">CallSite</a>, <a class="el" href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7">VFunSet</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#ad79a569e77f94fa8494eed3f18e07e90">csCHAMap</a></td></tr>
|
|
223
223
|
<tr class="memdesc:ad79a569e77f94fa8494eed3f18e07e90"><td class="mdescLeft"> </td><td class="mdescRight">Maps callsites to a set of potential virtual functions based on CHA. <a href="#ad79a569e77f94fa8494eed3f18e07e90">More...</a><br /></td></tr>
|
|
224
224
|
<tr class="separator:ad79a569e77f94fa8494eed3f18e07e90"><td class="memSeparator" colspan="2"> </td></tr>
|
|
225
|
-
<tr class="memitem:a498a18fe8702251b6f2a4e6379e5cbb1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="
|
|
225
|
+
<tr class="memitem:a498a18fe8702251b6f2a4e6379e5cbb1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a></td></tr>
|
|
226
226
|
<tr class="memdesc:a498a18fe8702251b6f2a4e6379e5cbb1"><td class="mdescLeft"> </td><td class="mdescRight">Maps types to their canonical type (many-to-one). <a href="#a498a18fe8702251b6f2a4e6379e5cbb1">More...</a><br /></td></tr>
|
|
227
227
|
<tr class="separator:a498a18fe8702251b6f2a4e6379e5cbb1"><td class="memSeparator" colspan="2"> </td></tr>
|
|
228
|
-
<tr class="memitem:a10225f56b21eb7f0870fdc433de3c393"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< const <a class="el" href="
|
|
228
|
+
<tr class="memitem:a10225f56b21eb7f0870fdc433de3c393"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">canonicalTypes</a></td></tr>
|
|
229
229
|
<tr class="memdesc:a10225f56b21eb7f0870fdc433de3c393"><td class="mdescLeft"> </td><td class="mdescRight">Set of all possible canonical types (i.e. values of canonicalTypeMap). <a href="#a10225f56b21eb7f0870fdc433de3c393">More...</a><br /></td></tr>
|
|
230
230
|
<tr class="separator:a10225f56b21eb7f0870fdc433de3c393"><td class="memSeparator" colspan="2"> </td></tr>
|
|
231
|
-
<tr class="memitem:a574ec14099f1112b394b00a79f3fdf1a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="
|
|
231
|
+
<tr class="memitem:a574ec14099f1112b394b00a79f3fdf1a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, std::vector< const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * > > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a></td></tr>
|
|
232
232
|
<tr class="memdesc:a574ec14099f1112b394b00a79f3fdf1a"><td class="mdescLeft"> </td><td class="mdescRight">Maps types to their flattened fields' types. <a href="#a574ec14099f1112b394b00a79f3fdf1a">More...</a><br /></td></tr>
|
|
233
233
|
<tr class="separator:a574ec14099f1112b394b00a79f3fdf1a"><td class="memSeparator" colspan="2"> </td></tr>
|
|
234
|
-
<tr class="memitem:adc7a17f70ac3fa89624ad874dbd16ff9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="
|
|
234
|
+
<tr class="memitem:adc7a17f70ac3fa89624ad874dbd16ff9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * > > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a></td></tr>
|
|
235
235
|
<tr class="memdesc:adc7a17f70ac3fa89624ad874dbd16ff9"><td class="mdescLeft"> </td><td class="mdescRight">Maps aggregate types to all the aggregate types it transitively contains. <a href="#adc7a17f70ac3fa89624ad874dbd16ff9">More...</a><br /></td></tr>
|
|
236
236
|
<tr class="separator:adc7a17f70ac3fa89624ad874dbd16ff9"><td class="memSeparator" colspan="2"> </td></tr>
|
|
237
237
|
<tr class="inherit_header pro_attribs_classSVF_1_1CommonCHGraph"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classSVF_1_1CommonCHGraph')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="classSVF_1_1CommonCHGraph.html">SVF::CommonCHGraph</a></td></tr>
|
|
@@ -247,10 +247,10 @@ Private Member Functions</h2></td></tr>
|
|
|
247
247
|
<tr class="memitem:a86bf48776ccf53092f4cb742cf95f8eb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a86bf48776ccf53092f4cb742cf95f8eb">handleDIBasicType</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *basicType)</td></tr>
|
|
248
248
|
<tr class="memdesc:a86bf48776ccf53092f4cb742cf95f8eb"><td class="mdescLeft"> </td><td class="mdescRight">Construction helper to process DIBasicTypes. <a href="#a86bf48776ccf53092f4cb742cf95f8eb">More...</a><br /></td></tr>
|
|
249
249
|
<tr class="separator:a86bf48776ccf53092f4cb742cf95f8eb"><td class="memSeparator" colspan="2"> </td></tr>
|
|
250
|
-
<tr class="memitem:a3ce75cbe92a1fa7d34c6fca2d2ca1b0f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a3ce75cbe92a1fa7d34c6fca2d2ca1b0f">handleDICompositeType</a> (const <a class="el" href="
|
|
250
|
+
<tr class="memitem:a3ce75cbe92a1fa7d34c6fca2d2ca1b0f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a3ce75cbe92a1fa7d34c6fca2d2ca1b0f">handleDICompositeType</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *compositeType)</td></tr>
|
|
251
251
|
<tr class="memdesc:a3ce75cbe92a1fa7d34c6fca2d2ca1b0f"><td class="mdescLeft"> </td><td class="mdescRight">Construction helper to process DICompositeTypes. <a href="#a3ce75cbe92a1fa7d34c6fca2d2ca1b0f">More...</a><br /></td></tr>
|
|
252
252
|
<tr class="separator:a3ce75cbe92a1fa7d34c6fca2d2ca1b0f"><td class="memSeparator" colspan="2"> </td></tr>
|
|
253
|
-
<tr class="memitem:a1a4162e68b22d53e9dca73c6780ed3e5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a1a4162e68b22d53e9dca73c6780ed3e5">handleDIDerivedType</a> (const <a class="el" href="
|
|
253
|
+
<tr class="memitem:a1a4162e68b22d53e9dca73c6780ed3e5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a1a4162e68b22d53e9dca73c6780ed3e5">handleDIDerivedType</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *derivedType)</td></tr>
|
|
254
254
|
<tr class="memdesc:a1a4162e68b22d53e9dca73c6780ed3e5"><td class="mdescLeft"> </td><td class="mdescRight">Construction helper to process DIDerivedTypes. <a href="#a1a4162e68b22d53e9dca73c6780ed3e5">More...</a><br /></td></tr>
|
|
255
255
|
<tr class="separator:a1a4162e68b22d53e9dca73c6780ed3e5"><td class="memSeparator" colspan="2"> </td></tr>
|
|
256
256
|
<tr class="memitem:a671f379ae54eef247b5e013478eb3f0c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a671f379ae54eef247b5e013478eb3f0c">handleDISubroutineType</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#aad46bd16008ebbc81e632f4fc69b3ea9">DISubroutineType</a> *subroutineType)</td></tr>
|
|
@@ -259,34 +259,34 @@ Private Member Functions</h2></td></tr>
|
|
|
259
259
|
<tr class="memitem:a0c873ab28d5967991e636696fae8c67f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a0c873ab28d5967991e636696fae8c67f">buildVTables</a> (const <a class="el" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &module)</td></tr>
|
|
260
260
|
<tr class="memdesc:a0c873ab28d5967991e636696fae8c67f"><td class="mdescLeft"> </td><td class="mdescRight">Finds all defined virtual functions and attaches them to nodes. <a href="#a0c873ab28d5967991e636696fae8c67f">More...</a><br /></td></tr>
|
|
261
261
|
<tr class="separator:a0c873ab28d5967991e636696fae8c67f"><td class="memSeparator" colspan="2"> </td></tr>
|
|
262
|
-
<tr class="memitem:a0a3dfe1f2757eabd75082e2c4caec47a"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a0a3dfe1f2757eabd75082e2c4caec47a">cha</a> (const <a class="el" href="
|
|
262
|
+
<tr class="memitem:a0a3dfe1f2757eabd75082e2c4caec47a"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a0a3dfe1f2757eabd75082e2c4caec47a">cha</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *type, bool firstField)</td></tr>
|
|
263
263
|
<tr class="memdesc:a0a3dfe1f2757eabd75082e2c4caec47a"><td class="mdescLeft"> </td><td class="mdescRight">Returns a set of all children of type (CHA). Also gradually builds chaMap. <a href="#a0a3dfe1f2757eabd75082e2c4caec47a">More...</a><br /></td></tr>
|
|
264
264
|
<tr class="separator:a0a3dfe1f2757eabd75082e2c4caec47a"><td class="memSeparator" colspan="2"> </td></tr>
|
|
265
|
-
<tr class="memitem:a6d97a772afe16c1483e65eea81f82603"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a6d97a772afe16c1483e65eea81f82603">handleTypedef</a> (const <a class="el" href="
|
|
265
|
+
<tr class="memitem:a6d97a772afe16c1483e65eea81f82603"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a6d97a772afe16c1483e65eea81f82603">handleTypedef</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *typedefType)</td></tr>
|
|
266
266
|
<tr class="memdesc:a6d97a772afe16c1483e65eea81f82603"><td class="mdescLeft"> </td><td class="mdescRight">Attaches the typedef(s) to the base node. <a href="#a6d97a772afe16c1483e65eea81f82603">More...</a><br /></td></tr>
|
|
267
267
|
<tr class="separator:a6d97a772afe16c1483e65eea81f82603"><td class="memSeparator" colspan="2"> </td></tr>
|
|
268
|
-
<tr class="memitem:ab96874bc8f6461fe0c3eb53b7f5cedce"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a> (const <a class="el" href="
|
|
268
|
+
<tr class="memitem:ab96874bc8f6461fe0c3eb53b7f5cedce"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *type)</td></tr>
|
|
269
269
|
<tr class="memdesc:ab96874bc8f6461fe0c3eb53b7f5cedce"><td class="mdescLeft"> </td><td class="mdescRight">Populates fieldTypes for type and all its elements. <a href="#ab96874bc8f6461fe0c3eb53b7f5cedce">More...</a><br /></td></tr>
|
|
270
270
|
<tr class="separator:ab96874bc8f6461fe0c3eb53b7f5cedce"><td class="memSeparator" colspan="2"> </td></tr>
|
|
271
|
-
<tr class="memitem:a8fcbea9435a77beb27ad64d5a3175b0b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a> (const <a class="el" href="
|
|
271
|
+
<tr class="memitem:a8fcbea9435a77beb27ad64d5a3175b0b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *type)</td></tr>
|
|
272
272
|
<tr class="memdesc:a8fcbea9435a77beb27ad64d5a3175b0b"><td class="mdescLeft"> </td><td class="mdescRight">Populates containingAggs for type and all its elements. <a href="#a8fcbea9435a77beb27ad64d5a3175b0b">More...</a><br /></td></tr>
|
|
273
273
|
<tr class="separator:a8fcbea9435a77beb27ad64d5a3175b0b"><td class="memSeparator" colspan="2"> </td></tr>
|
|
274
|
-
<tr class="memitem:a9ed6b91fad334605f514049a2072b538"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a> (const <a class="el" href="
|
|
274
|
+
<tr class="memitem:a9ed6b91fad334605f514049a2072b538"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *type)</td></tr>
|
|
275
275
|
<tr class="memdesc:a9ed6b91fad334605f514049a2072b538"><td class="mdescLeft"> </td><td class="mdescRight">Creates a node from type, or returns it if it exists. <a href="#a9ed6b91fad334605f514049a2072b538">More...</a><br /></td></tr>
|
|
276
276
|
<tr class="separator:a9ed6b91fad334605f514049a2072b538"><td class="memSeparator" colspan="2"> </td></tr>
|
|
277
|
-
<tr class="memitem:a236d785d728189c2026357ce837fcdc6"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="
|
|
277
|
+
<tr class="memitem:a236d785d728189c2026357ce837fcdc6"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">getCSStaticType</a> (<a class="el" href="classSVF_1_1CallSite.html">CallSite</a> cs) const</td></tr>
|
|
278
278
|
<tr class="memdesc:a236d785d728189c2026357ce837fcdc6"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves the metadata associated with a <em>virtual</em> callsite. <a href="#a236d785d728189c2026357ce837fcdc6">More...</a><br /></td></tr>
|
|
279
279
|
<tr class="separator:a236d785d728189c2026357ce837fcdc6"><td class="memSeparator" colspan="2"> </td></tr>
|
|
280
|
-
<tr class="memitem:a58341e23c1dc2b3e7fce190ed16a8a25"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">hasNode</a> (const <a class="el" href="
|
|
280
|
+
<tr class="memitem:a58341e23c1dc2b3e7fce190ed16a8a25"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">hasNode</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *type)</td></tr>
|
|
281
281
|
<tr class="memdesc:a58341e23c1dc2b3e7fce190ed16a8a25"><td class="mdescLeft"> </td><td class="mdescRight">Checks if a node exists for type. <a href="#a58341e23c1dc2b3e7fce190ed16a8a25">More...</a><br /></td></tr>
|
|
282
282
|
<tr class="separator:a58341e23c1dc2b3e7fce190ed16a8a25"><td class="memSeparator" colspan="2"> </td></tr>
|
|
283
|
-
<tr class="memitem:a96c68bbb5ee5e939158ce0b67da2c61d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">getNode</a> (const <a class="el" href="
|
|
283
|
+
<tr class="memitem:a96c68bbb5ee5e939158ce0b67da2c61d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">getNode</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *type)</td></tr>
|
|
284
284
|
<tr class="memdesc:a96c68bbb5ee5e939158ce0b67da2c61d"><td class="mdescLeft"> </td><td class="mdescRight">Returns the node for type (nullptr if it doesn't exist). <a href="#a96c68bbb5ee5e939158ce0b67da2c61d">More...</a><br /></td></tr>
|
|
285
285
|
<tr class="separator:a96c68bbb5ee5e939158ce0b67da2c61d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
286
|
-
<tr class="memitem:a294a2075c97e1db8003393fb472c1def"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1DCHEdge.html">DCHEdge</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a> (const <a class="el" href="
|
|
286
|
+
<tr class="memitem:a294a2075c97e1db8003393fb472c1def"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1DCHEdge.html">DCHEdge</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t1, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t2, <a class="el" href="classSVF_1_1GenericEdge.html#a5aceeb48929f54264807b36569019a8a">DCHEdge::GEdgeKind</a> et)</td></tr>
|
|
287
287
|
<tr class="memdesc:a294a2075c97e1db8003393fb472c1def"><td class="mdescLeft"> </td><td class="mdescRight">Creates an edge between from t1 to t2. <a href="#a294a2075c97e1db8003393fb472c1def">More...</a><br /></td></tr>
|
|
288
288
|
<tr class="separator:a294a2075c97e1db8003393fb472c1def"><td class="memSeparator" colspan="2"> </td></tr>
|
|
289
|
-
<tr class="memitem:a74b2e5787f65cf3e3b4a03ebec806b91"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1DCHEdge.html">DCHEdge</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a74b2e5787f65cf3e3b4a03ebec806b91">hasEdge</a> (const <a class="el" href="
|
|
289
|
+
<tr class="memitem:a74b2e5787f65cf3e3b4a03ebec806b91"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1DCHEdge.html">DCHEdge</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a74b2e5787f65cf3e3b4a03ebec806b91">hasEdge</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t1, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t2, <a class="el" href="classSVF_1_1GenericEdge.html#a5aceeb48929f54264807b36569019a8a">DCHEdge::GEdgeKind</a> et)</td></tr>
|
|
290
290
|
<tr class="memdesc:a74b2e5787f65cf3e3b4a03ebec806b91"><td class="mdescLeft"> </td><td class="mdescRight">Returns the edge between t1 and t2 if it exists, returns nullptr otherwise. <a href="#a74b2e5787f65cf3e3b4a03ebec806b91">More...</a><br /></td></tr>
|
|
291
291
|
<tr class="separator:a74b2e5787f65cf3e3b4a03ebec806b91"><td class="memSeparator" colspan="2"> </td></tr>
|
|
292
292
|
</table><table class="memberdecls">
|
|
@@ -401,13 +401,13 @@ Additional Inherited Members</h2></td></tr>
|
|
|
401
401
|
<tr>
|
|
402
402
|
<td class="memname"><a class="el" href="classSVF_1_1DCHEdge.html">DCHEdge</a> * DCHGraph::addEdge </td>
|
|
403
403
|
<td>(</td>
|
|
404
|
-
<td class="paramtype">const <a class="el" href="
|
|
404
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
405
405
|
<td class="paramname"><em>t1</em>, </td>
|
|
406
406
|
</tr>
|
|
407
407
|
<tr>
|
|
408
408
|
<td class="paramkey"></td>
|
|
409
409
|
<td></td>
|
|
410
|
-
<td class="paramtype">const <a class="el" href="
|
|
410
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
411
411
|
<td class="paramname"><em>t2</em>, </td>
|
|
412
412
|
</tr>
|
|
413
413
|
<tr>
|
|
@@ -467,30 +467,30 @@ Additional Inherited Members</h2></td></tr>
|
|
|
467
467
|
<p>Builds the CHG from DWARF debug information. extend determines whether to extend the CHG with first field edges. </p>
|
|
468
468
|
|
|
469
469
|
<p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00457">457</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
|
|
470
|
-
<div class="fragment"><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> {</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a> = extend;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a36ec1ba901eeebe7a242f18510831788">DebugInfoFinder</a> finder;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  finder.processModule(*(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getModule(i)));</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  }</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span> </div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="comment">// Create the void node regardless of whether it appears.</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(<span class="keyword">nullptr</span>);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="comment">// Find any char type.</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *charType = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="comment">/*</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="comment"> * We want void at the top, char as a child, and everything is a child of char:</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="comment"> * void</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="comment"> * |</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="comment"> * char</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="comment"> * / | \</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="comment"> * x y z</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="comment"> */</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *type : finder.types())</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *basicType = SVFUtil::dyn_cast<DIBasicType>(type))</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keywordflow">if</span> (basicType->getEncoding() == dwarf::DW_ATE_unsigned_char</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  || basicType->getEncoding() == dwarf::DW_ATE_signed_char)</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  charType = type;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  }</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a86bf48776ccf53092f4cb742cf95f8eb">handleDIBasicType</a>(basicType);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *compositeType = SVFUtil::dyn_cast<DICompositeType>(type))</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a3ce75cbe92a1fa7d34c6fca2d2ca1b0f">handleDICompositeType</a>(compositeType);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  }</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *derivedType = SVFUtil::dyn_cast<DIDerivedType>(type))</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  {</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a1a4162e68b22d53e9dca73c6780ed3e5">handleDIDerivedType</a>(derivedType);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  }</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#aad46bd16008ebbc81e632f4fc69b3ea9">DISubroutineType</a> *subroutineType = SVFUtil::dyn_cast<DISubroutineType>(type))</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  {</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a671f379ae54eef247b5e013478eb3f0c">handleDISubroutineType</a>(subroutineType);</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"DCHGraph::buildCHG: unexpected DIType."</span>);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  }</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a0c873ab28d5967991e636696fae8c67f">buildVTables</a>(*(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getModule(i)));</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  }</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span> </div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="comment">// Build the void/char/everything else relation.</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a> && charType != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="comment">// void <-- char</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a>(charType, <span class="keyword">nullptr</span>, <a class="code" href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a8b07351616a1798fa34ec3828f485ebb">DCHEdge::STD_DEF</a>);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <span class="comment">// char <-- x, char <-- y, ...</span></div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">iterator</a> nodeI = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nodeI != <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nodeI)</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  {</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="comment">// Everything without a parent gets char as a parent.</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="keywordflow">if</span> (nodeI->second->getType() != <span class="keyword">nullptr</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  && nodeI->second->getOutEdges().size() == 0)</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  {</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a>(nodeI->second->getType(), charType, <a class="code" href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a8b07351616a1798fa34ec3828f485ebb">DCHEdge::STD_DEF</a>);</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  }</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  }</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span> </div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#adf6c289ef9f2d0196984dd4024ea4316">Options::PrintDCHG</a>)</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a5f08ed4cbba3e4b7a348d5ad77664726">print</a>();</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span> }</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a0c873ab28d5967991e636696fae8c67f"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a0c873ab28d5967991e636696fae8c67f">SVF::DCHGraph::buildVTables</a></div><div class="ttdeci">void buildVTables(const Module &module)</div><div class="ttdoc">Finds all defined virtual functions and attaches them to nodes. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00166">DCHG.cpp:166</a></div></div>
|
|
470
|
+
<div class="fragment"><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> {</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a> = extend;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a36ec1ba901eeebe7a242f18510831788">DebugInfoFinder</a> finder;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  finder.processModule(*(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getModule(i)));</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  }</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span> </div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="comment">// Create the void node regardless of whether it appears.</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(<span class="keyword">nullptr</span>);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="comment">// Find any char type.</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *charType = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="comment">/*</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="comment"> * We want void at the top, char as a child, and everything is a child of char:</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="comment"> * void</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="comment"> * |</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="comment"> * char</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="comment"> * / | \</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="comment"> * x y z</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="comment"> */</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *type : finder.types())</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *basicType = SVFUtil::dyn_cast<DIBasicType>(type))</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keywordflow">if</span> (basicType->getEncoding() == dwarf::DW_ATE_unsigned_char</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  || basicType->getEncoding() == dwarf::DW_ATE_signed_char)</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  charType = type;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  }</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a86bf48776ccf53092f4cb742cf95f8eb">handleDIBasicType</a>(basicType);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *compositeType = SVFUtil::dyn_cast<DICompositeType>(type))</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a3ce75cbe92a1fa7d34c6fca2d2ca1b0f">handleDICompositeType</a>(compositeType);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  }</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *derivedType = SVFUtil::dyn_cast<DIDerivedType>(type))</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  {</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a1a4162e68b22d53e9dca73c6780ed3e5">handleDIDerivedType</a>(derivedType);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  }</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#aad46bd16008ebbc81e632f4fc69b3ea9">DISubroutineType</a> *subroutineType = SVFUtil::dyn_cast<DISubroutineType>(type))</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  {</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a671f379ae54eef247b5e013478eb3f0c">handleDISubroutineType</a>(subroutineType);</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"DCHGraph::buildCHG: unexpected DIType."</span>);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  }</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a0c873ab28d5967991e636696fae8c67f">buildVTables</a>(*(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getModule(i)));</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  }</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span> </div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="comment">// Build the void/char/everything else relation.</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a> && charType != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="comment">// void <-- char</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a>(charType, <span class="keyword">nullptr</span>, <a class="code" href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a8b07351616a1798fa34ec3828f485ebb">DCHEdge::STD_DEF</a>);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <span class="comment">// char <-- x, char <-- y, ...</span></div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">iterator</a> nodeI = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nodeI != <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nodeI)</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  {</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="comment">// Everything without a parent gets char as a parent.</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="keywordflow">if</span> (nodeI->second->getType() != <span class="keyword">nullptr</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  && nodeI->second->getOutEdges().size() == 0)</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  {</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a>(nodeI->second->getType(), charType, <a class="code" href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a8b07351616a1798fa34ec3828f485ebb">DCHEdge::STD_DEF</a>);</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  }</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  }</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span> </div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#adf6c289ef9f2d0196984dd4024ea4316">Options::PrintDCHG</a>)</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a5f08ed4cbba3e4b7a348d5ad77664726">print</a>();</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span> }</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a0c873ab28d5967991e636696fae8c67f"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a0c873ab28d5967991e636696fae8c67f">SVF::DCHGraph::buildVTables</a></div><div class="ttdeci">void buildVTables(const Module &module)</div><div class="ttdoc">Finds all defined virtual functions and attaches them to nodes. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00166">DCHG.cpp:166</a></div></div>
|
|
471
471
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph< DCHNode, DCHEdge >::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
|
|
472
472
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a9ed6b91fad334605f514049a2072b538"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">SVF::DCHGraph::getOrCreateNode</a></div><div class="ttdeci">DCHNode * getOrCreateNode(const DIType *type)</div><div class="ttdoc">Creates a node from type, or returns it if it exists. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00403">DCHG.cpp:403</a></div></div>
|
|
473
473
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
474
|
-
<div class="ttc" id="namespaceSVF_html_aded9b991c77acc5284ccead0739e84f1"><div class="ttname"><a href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">SVF::DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00127">BasicTypes.h:127</a></div></div>
|
|
475
474
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a671f379ae54eef247b5e013478eb3f0c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a671f379ae54eef247b5e013478eb3f0c">SVF::DCHGraph::handleDISubroutineType</a></div><div class="ttdeci">void handleDISubroutineType(const DISubroutineType *subroutineType)</div><div class="ttdoc">Construction helper to process DISubroutineTypes. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00133">DCHG.cpp:133</a></div></div>
|
|
476
475
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_ae265a7f3cc7367d62013e0f15cf3d233"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">SVF::LLVMModuleSet::getModuleNum</a></div><div class="ttdeci">u32_t getModuleNum() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00095">LLVMModule.h:95</a></div></div>
|
|
477
476
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00084">SVFBasicTypes.h:84</a></div></div>
|
|
478
477
|
<div class="ttc" id="classSVF_1_1Options_html_adf6c289ef9f2d0196984dd4024ea4316"><div class="ttname"><a href="classSVF_1_1Options.html#adf6c289ef9f2d0196984dd4024ea4316">SVF::Options::PrintDCHG</a></div><div class="ttdeci">static const llvm::cl::opt< bool > PrintDCHG</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00205">Options.h:205</a></div></div>
|
|
479
478
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph< DCHNode, DCHEdge >::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00369">GenericGraph.h:369</a></div></div>
|
|
480
|
-
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a36ec1ba901eeebe7a242f18510831788"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a36ec1ba901eeebe7a242f18510831788">DebugInfoFinder</a></div><div class="ttdeci">llvm::DebugInfoFinder DebugInfoFinder</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
479
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a36ec1ba901eeebe7a242f18510831788"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a36ec1ba901eeebe7a242f18510831788">DebugInfoFinder</a></div><div class="ttdeci">llvm::DebugInfoFinder DebugInfoFinder</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
|
|
481
480
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a294a2075c97e1db8003393fb472c1def"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">SVF::DCHGraph::addEdge</a></div><div class="ttdeci">DCHEdge * addEdge(const DIType *t1, const DIType *t2, DCHEdge::GEdgeKind et)</div><div class="ttdoc">Creates an edge between from t1 to t2. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00421">DCHG.cpp:421</a></div></div>
|
|
482
481
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph< DCHNode, DCHEdge >::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00342">GenericGraph.h:342</a></div></div>
|
|
482
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
|
|
483
483
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a1a4162e68b22d53e9dca73c6780ed3e5"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a1a4162e68b22d53e9dca73c6780ed3e5">SVF::DCHGraph::handleDIDerivedType</a></div><div class="ttdeci">void handleDIDerivedType(const DIDerivedType *derivedType)</div><div class="ttdoc">Construction helper to process DIDerivedTypes. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00097">DCHG.cpp:97</a></div></div>
|
|
484
|
-
<div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00128">BasicTypes.h:128</a></div></div>
|
|
485
484
|
<div class="ttc" id="classSVF_1_1DCHEdge_html_a9ab4cd83d9ee475d3d8445cd91839726a8b07351616a1798fa34ec3828f485ebb"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a8b07351616a1798fa34ec3828f485ebb">SVF::DCHEdge::STD_DEF</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00038">DCHG.h:38</a></div></div>
|
|
486
485
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a5f08ed4cbba3e4b7a348d5ad77664726"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a5f08ed4cbba3e4b7a348d5ad77664726">SVF::DCHGraph::print</a></div><div class="ttdeci">void print(void)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l01131">DCHG.cpp:1131</a></div></div>
|
|
486
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
|
|
487
487
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a86bf48776ccf53092f4cb742cf95f8eb"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a86bf48776ccf53092f4cb742cf95f8eb">SVF::DCHGraph::handleDIBasicType</a></div><div class="ttdeci">void handleDIBasicType(const DIBasicType *basicType)</div><div class="ttdoc">Construction helper to process DIBasicTypes. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00022">DCHG.cpp:22</a></div></div>
|
|
488
|
-
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_aad46bd16008ebbc81e632f4fc69b3ea9"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#aad46bd16008ebbc81e632f4fc69b3ea9">DISubroutineType</a></div><div class="ttdeci">llvm::DISubroutineType DISubroutineType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
488
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_aad46bd16008ebbc81e632f4fc69b3ea9"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#aad46bd16008ebbc81e632f4fc69b3ea9">DISubroutineType</a></div><div class="ttdeci">llvm::DISubroutineType DISubroutineType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
|
|
489
489
|
<div class="ttc" id="classSVF_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#l00070">LLVMModule.h:70</a></div></div>
|
|
490
|
-
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a5f7968b31d2b29b589360067cf48e625"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a></div><div class="ttdeci">llvm::DIBasicType DIBasicType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
490
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a5f7968b31d2b29b589360067cf48e625"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a></div><div class="ttdeci">llvm::DIBasicType DIBasicType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
|
|
491
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
|
|
491
492
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a3ce75cbe92a1fa7d34c6fca2d2ca1b0f"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a3ce75cbe92a1fa7d34c6fca2d2ca1b0f">SVF::DCHGraph::handleDICompositeType</a></div><div class="ttdeci">void handleDICompositeType(const DICompositeType *compositeType)</div><div class="ttdoc">Construction helper to process DICompositeTypes. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00027">DCHG.cpp:27</a></div></div>
|
|
492
493
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_aa6f49dfc9e3580d3f2d8c257395eb11e"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">SVF::DCHGraph::extended</a></div><div class="ttdeci">bool extended</div><div class="ttdoc">Whether this CHG is an extended CHG (first-field). Set by buildCHG. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00356">DCHG.h:356</a></div></div>
|
|
493
|
-
<div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdoc">LLVM debug information. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00126">BasicTypes.h:126</a></div></div>
|
|
494
494
|
</div><!-- fragment -->
|
|
495
495
|
</div>
|
|
496
496
|
</div>
|
|
@@ -521,22 +521,22 @@ Additional Inherited Members</h2></td></tr>
|
|
|
521
521
|
<p>Finds all defined virtual functions and attaches them to nodes. </p>
|
|
522
522
|
|
|
523
523
|
<p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00166">166</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
|
|
524
|
-
<div class="fragment"><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">for</span> (Module::const_global_iterator gvI = module.global_begin(); gvI != module.global_end(); ++gvI)</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="comment">// Though this will return more than GlobalVariables, we only care about GlobalVariables (for the vtbls).</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gv = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>>(&(*gvI));</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">if</span> (gv == <span class="keyword">nullptr</span>) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">if</span> (gv->hasMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#aa4630844aa25aa4801659304a2552058">cppUtil::ctir::vtMDName</a>) && gv->getNumOperands() > 0)</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *type = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a>>(gv->getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#aa4630844aa25aa4801659304a2552058">cppUtil::ctir::vtMDName</a>));</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type && <span class="stringliteral">"DCHG::buildVTables: bad metadata for ctir.vt"</span>);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *node = <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(type);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  node-><a class="code" href="classSVF_1_1DCHNode.html#ab8a339276172b8aa0fc915e5bde0b3db">setVTable</a>(gv);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>[gv] = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39fea8c436d96d2b5a74f5e02cc5d952">ConstantStruct</a> *vtbls = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a39fea8c436d96d2b5a74f5e02cc5d952">ConstantStruct</a>>(gv->getOperand(0));</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vtbls && <span class="stringliteral">"unexpected vtable type"</span>);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> nthVtbl = 0; nthVtbl < vtbls->getNumOperands(); ++nthVtbl)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *vtbl = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a>>(vtbls->getOperand(nthVtbl));</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vtbl && <span class="stringliteral">"Element of vtbl struct not an array"</span>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  std::vector<const Function *> &vfns = node-><a class="code" href="classSVF_1_1DCHNode.html#a11ad6b4fc518f6307727f6b76f7f6f53">getVfnVector</a>(nthVtbl);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="comment">// Iterating over the vtbl, we will run into:</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">// 1. i8* null (don't care for now).</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="comment">// 2. i8* inttoptr ... (don't care for now).</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="comment">// 3. i8* bitcast ... (we only care when a function pointer is being bitcasted).</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> cN = 0; cN < vtbl->getNumOperands(); ++cN)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *c = vtbl->getOperand(cN);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">if</span> (SVFUtil::isa<ConstantPointerNull>(c))</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="comment">// Don't care for now.</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a> *ce = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a>>(c);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(ce && <span class="stringliteral">"non-ConstantExpr, non-ConstantPointerNull in vtable?"</span>);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">if</span> (ce->getOpcode() == Instruction::BitCast)</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="comment">// Could be a GlobalAlias which we don't care about, or a virtual/thunk function.</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *vfn = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>>(ce->getOperand(0));</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">if</span> (vfn != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  vfns.push_back(vfn);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> }</div><div class="ttc" id="namespaceSVF_html_a5ae718cba37d8e34d2946530dc098c8e"><div class="ttname"><a href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">SVF::ConstantArray</a></div><div class="ttdeci">llvm::ConstantArray ConstantArray</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
|
|
524
|
+
<div class="fragment"><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">for</span> (Module::const_global_iterator gvI = module.global_begin(); gvI != module.global_end(); ++gvI)</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="comment">// Though this will return more than GlobalVariables, we only care about GlobalVariables (for the vtbls).</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gv = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>>(&(*gvI));</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">if</span> (gv == <span class="keyword">nullptr</span>) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">if</span> (gv->hasMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#aa4630844aa25aa4801659304a2552058">cppUtil::ctir::vtMDName</a>) && gv->getNumOperands() > 0)</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *type = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a>>(gv->getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#aa4630844aa25aa4801659304a2552058">cppUtil::ctir::vtMDName</a>));</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type && <span class="stringliteral">"DCHG::buildVTables: bad metadata for ctir.vt"</span>);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *node = <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(type);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  node-><a class="code" href="classSVF_1_1DCHNode.html#ab8a339276172b8aa0fc915e5bde0b3db">setVTable</a>(gv);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>[gv] = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39fea8c436d96d2b5a74f5e02cc5d952">ConstantStruct</a> *vtbls = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a39fea8c436d96d2b5a74f5e02cc5d952">ConstantStruct</a>>(gv->getOperand(0));</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vtbls && <span class="stringliteral">"unexpected vtable type"</span>);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> nthVtbl = 0; nthVtbl < vtbls->getNumOperands(); ++nthVtbl)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *vtbl = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a>>(vtbls->getOperand(nthVtbl));</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vtbl && <span class="stringliteral">"Element of vtbl struct not an array"</span>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  std::vector<const Function *> &vfns = node-><a class="code" href="classSVF_1_1DCHNode.html#a11ad6b4fc518f6307727f6b76f7f6f53">getVfnVector</a>(nthVtbl);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="comment">// Iterating over the vtbl, we will run into:</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">// 1. i8* null (don't care for now).</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="comment">// 2. i8* inttoptr ... (don't care for now).</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="comment">// 3. i8* bitcast ... (we only care when a function pointer is being bitcasted).</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> cN = 0; cN < vtbl->getNumOperands(); ++cN)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *c = vtbl->getOperand(cN);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">if</span> (SVFUtil::isa<ConstantPointerNull>(c))</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="comment">// Don't care for now.</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a> *ce = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a>>(c);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(ce && <span class="stringliteral">"non-ConstantExpr, non-ConstantPointerNull in vtable?"</span>);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">if</span> (ce->getOpcode() == Instruction::BitCast)</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="comment">// Could be a GlobalAlias which we don't care about, or a virtual/thunk function.</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *vfn = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>>(ce->getOperand(0));</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">if</span> (vfn != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  vfns.push_back(vfn);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> }</div><div class="ttc" id="namespaceSVF_html_a5ae718cba37d8e34d2946530dc098c8e"><div class="ttname"><a href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">SVF::ConstantArray</a></div><div class="ttdeci">llvm::ConstantArray ConstantArray</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00093">BasicTypes.h:93</a></div></div>
|
|
525
525
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a9ed6b91fad334605f514049a2072b538"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">SVF::DCHGraph::getOrCreateNode</a></div><div class="ttdeci">DCHNode * getOrCreateNode(const DIType *type)</div><div class="ttdoc">Creates a node from type, or returns it if it exists. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00403">DCHG.cpp:403</a></div></div>
|
|
526
|
-
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39fea8c436d96d2b5a74f5e02cc5d952"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39fea8c436d96d2b5a74f5e02cc5d952">ConstantStruct</a></div><div class="ttdeci">llvm::ConstantStruct ConstantStruct</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
527
|
-
<div class="ttc" id="namespaceSVF_html_a09f5fa3bc44bf53612a085e3a611cc4e"><div class="ttname"><a href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">SVF::GlobalVariable</a></div><div class="ttdeci">llvm::GlobalVariable GlobalVariable</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
526
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39fea8c436d96d2b5a74f5e02cc5d952"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39fea8c436d96d2b5a74f5e02cc5d952">ConstantStruct</a></div><div class="ttdeci">llvm::ConstantStruct ConstantStruct</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00049">BasicTypes.h:49</a></div></div>
|
|
527
|
+
<div class="ttc" id="namespaceSVF_html_a09f5fa3bc44bf53612a085e3a611cc4e"><div class="ttname"><a href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">SVF::GlobalVariable</a></div><div class="ttdeci">llvm::GlobalVariable GlobalVariable</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00072">BasicTypes.h:72</a></div></div>
|
|
528
528
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
529
529
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_aaa63715e67ade7711a0366eb7559b708"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">SVF::DCHGraph::vtblToTypeMap</a></div><div class="ttdeci">Map< const GlobalValue *, const DIType * > vtblToTypeMap</div><div class="ttdoc">Maps VTables to the DIType associated with them. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00360">DCHG.h:360</a></div></div>
|
|
530
530
|
<div class="ttc" id="namespaceSVF_1_1cppUtil_1_1ctir_html_aa4630844aa25aa4801659304a2552058"><div class="ttname"><a href="namespaceSVF_1_1cppUtil_1_1ctir.html#aa4630844aa25aa4801659304a2552058">SVF::cppUtil::ctir::vtMDName</a></div><div class="ttdeci">const std::string vtMDName</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00116">CPPUtil.h:116</a></div></div>
|
|
531
|
-
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a60115de303225d173fb935cf7619a2cb"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
531
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a60115de303225d173fb935cf7619a2cb"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00057">BasicTypes.h:57</a></div></div>
|
|
532
532
|
<div class="ttc" id="namespaceSVF_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="Util_2BasicTypes_8h_source.html#l00066">BasicTypes.h:66</a></div></div>
|
|
533
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
|
|
533
534
|
<div class="ttc" id="classSVF_1_1DCHNode_html"><div class="ttname"><a href="classSVF_1_1DCHNode.html">SVF::DCHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00063">DCHG.h:63</a></div></div>
|
|
534
|
-
<div class="ttc" id="namespaceSVF_html_a7e230c0cba2e3a7c2e5a5f2ee7d88af9"><div class="ttname"><a href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">SVF::Constant</a></div><div class="ttdeci">llvm::Constant Constant</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
535
|
+
<div class="ttc" id="namespaceSVF_html_a7e230c0cba2e3a7c2e5a5f2ee7d88af9"><div class="ttname"><a href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">SVF::Constant</a></div><div class="ttdeci">llvm::Constant Constant</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00090">BasicTypes.h:90</a></div></div>
|
|
535
536
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a079feacdcc3783f4a9108a3b2d2aed2c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">SVF::DCHGraph::getCanonicalType</a></div><div class="ttdeci">const DIType * getCanonicalType(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00713">DCHG.cpp:713</a></div></div>
|
|
536
537
|
<div class="ttc" id="classSVF_1_1DCHNode_html_ab8a339276172b8aa0fc915e5bde0b3db"><div class="ttname"><a href="classSVF_1_1DCHNode.html#ab8a339276172b8aa0fc915e5bde0b3db">SVF::DCHNode::setVTable</a></div><div class="ttdeci">void setVTable(const GlobalValue *vtbl)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00164">DCHG.h:164</a></div></div>
|
|
537
538
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
538
539
|
<div class="ttc" id="classSVF_1_1DCHNode_html_a11ad6b4fc518f6307727f6b76f7f6f53"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a11ad6b4fc518f6307727f6b76f7f6f53">SVF::DCHNode::getVfnVector</a></div><div class="ttdeci">std::vector< const Function * > & getVfnVector(unsigned n)</div><div class="ttdoc">Return the nth virtual function vector in the vtable. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00181">DCHG.h:181</a></div></div>
|
|
539
|
-
<div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdoc">LLVM debug information. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00126">BasicTypes.h:126</a></div></div>
|
|
540
540
|
</div><!-- fragment -->
|
|
541
541
|
</div>
|
|
542
542
|
</div>
|
|
@@ -552,7 +552,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
552
552
|
<tr>
|
|
553
553
|
<td class="memname">const <a class="el" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> & DCHGraph::cha </td>
|
|
554
554
|
<td>(</td>
|
|
555
|
-
<td class="paramtype">const <a class="el" href="
|
|
555
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
556
556
|
<td class="paramname"><em>type</em>, </td>
|
|
557
557
|
</tr>
|
|
558
558
|
<tr>
|
|
@@ -682,12 +682,12 @@ Additional Inherited Members</h2></td></tr>
|
|
|
682
682
|
<p>Implements <a class="el" href="classSVF_1_1CommonCHGraph.html#aff7363feebc20267dad7230666b583b1">SVF::CommonCHGraph</a>.</p>
|
|
683
683
|
|
|
684
684
|
<p class="definition">Definition at line <a class="el" href="DCHG_8h_source.html#l00259">259</a> of file <a class="el" href="DCHG_8h_source.html">DCHG.h</a>.</p>
|
|
685
|
-
<div class="fragment"><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keyword">const</span> <a class="code" href="
|
|
685
|
+
<div class="fragment"><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *type = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">getCSStaticType</a>(cs));</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">hasNode</a>(type))</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  {</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">getNode</a>(type)-><a class="code" href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988">getVTable</a>() != <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  }</div><div class="ttc" id="classSVF_1_1DCHNode_html_a1a75ca91148992166d42d245d6c51988"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988">SVF::DCHNode::getVTable</a></div><div class="ttdeci">const GlobalValue * getVTable() const</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00169">DCHG.h:169</a></div></div>
|
|
686
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
|
|
686
687
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a236d785d728189c2026357ce837fcdc6"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">SVF::DCHGraph::getCSStaticType</a></div><div class="ttdeci">const DIType * getCSStaticType(CallSite cs) const</div><div class="ttdoc">Retrieves the metadata associated with a virtual callsite. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00407">DCHG.h:407</a></div></div>
|
|
687
688
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a96c68bbb5ee5e939158ce0b67da2c61d"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">SVF::DCHGraph::getNode</a></div><div class="ttdeci">DCHNode * getNode(const DIType *type)</div><div class="ttdoc">Returns the node for type (nullptr if it doesn&#39;t exist). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00424">DCHG.h:424</a></div></div>
|
|
688
689
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a58341e23c1dc2b3e7fce190ed16a8a25"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">SVF::DCHGraph::hasNode</a></div><div class="ttdeci">bool hasNode(const DIType *type)</div><div class="ttdoc">Checks if a node exists for type. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00417">DCHG.h:417</a></div></div>
|
|
689
690
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a079feacdcc3783f4a9108a3b2d2aed2c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">SVF::DCHGraph::getCanonicalType</a></div><div class="ttdeci">const DIType * getCanonicalType(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00713">DCHG.cpp:713</a></div></div>
|
|
690
|
-
<div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdoc">LLVM debug information. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00126">BasicTypes.h:126</a></div></div>
|
|
691
691
|
</div><!-- fragment -->
|
|
692
692
|
</div>
|
|
693
693
|
</div>
|
|
@@ -703,7 +703,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
703
703
|
<tr>
|
|
704
704
|
<td class="memname">std::string DCHGraph::diTypeToStr </td>
|
|
705
705
|
<td>(</td>
|
|
706
|
-
<td class="paramtype">const <a class="el" href="
|
|
706
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
707
707
|
<td class="paramname"><em>t</em></td><td>)</td>
|
|
708
708
|
<td></td>
|
|
709
709
|
</tr>
|
|
@@ -718,18 +718,18 @@ Additional Inherited Members</h2></td></tr>
|
|
|
718
718
|
<p>Returns a human-readable version of the DIType. </p>
|
|
719
719
|
|
|
720
720
|
<p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00958">958</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
|
|
721
|
-
<div class="fragment"><div class="line"><a name="l00959"></a><span class="lineno"> 959</span> {</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  std::stringstream ss;</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span> </div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  <span class="keywordflow">if</span> (t == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  {</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  <span class="keywordflow">return</span> <span class="stringliteral">"void"</span>;</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  }</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span> </div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *bt = SVFUtil::dyn_cast<DIBasicType>(t))</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  {</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  ss << bt->getName().str();</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  }</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *dt = SVFUtil::dyn_cast<DIDerivedType>(t))</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  {</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <span class="keywordflow">if</span> (dt->getName() == <span class="stringliteral">"__vtbl_ptr_type"</span>)</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  {</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  ss << <span class="stringliteral">"(vtbl * =) __vtbl_ptr_type"</span>;</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  }</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_const_type)</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  {</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  ss << <span class="stringliteral">"const "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType());</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  }</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_volatile_type)</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  {</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  ss << <span class="stringliteral">"volatile "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType());</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  }</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_restrict_type)</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  {</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  ss << <span class="stringliteral">"restrict "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType());</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  }</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_atomic_type)</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  {</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  ss << <span class="stringliteral">"atomic "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType());</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  }</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_pointer_type)</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  {</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  ss << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType()) << <span class="stringliteral">" *"</span>;</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  }</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_ptr_to_member_type)</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  {</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  ss << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType())</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  << <span class="stringliteral">" "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(SVFUtil::dyn_cast<DIType>(dt->getExtraData())) << <span class="stringliteral">"::*"</span>;</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  }</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_reference_type)</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  {</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  ss << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType()) << <span class="stringliteral">" &"</span>;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  }</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_rvalue_reference_type)</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  {</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  ss << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType()) << <span class="stringliteral">" &&"</span>;</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  }</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_typedef)</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  {</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  ss << dt->getName().str() << <span class="stringliteral">"->"</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType());</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  }</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  }</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *ct = SVFUtil::dyn_cast<DICompositeType>(t))</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  {</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  <span class="keywordflow">if</span> (ct->getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  || ct->getTag() == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  || ct->getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  {</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> </div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  <span class="keywordflow">if</span> (ct->getTag() == dwarf::DW_TAG_class_type)</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  {</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  ss << <span class="stringliteral">"class"</span>;</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  }</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct->getTag() == dwarf::DW_TAG_structure_type)</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  {</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  ss << <span class="stringliteral">"struct"</span>;</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  }</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct->getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  {</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  ss << <span class="stringliteral">"union"</span>;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  }</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> </div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  ss << <span class="stringliteral">"."</span>;</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <span class="keywordflow">if</span> (ct->getName() != <span class="stringliteral">""</span>)</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  {</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  ss << ct->getName().str();</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  }</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  {</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  <span class="comment">// Iterate over the element types.</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  ss << <span class="stringliteral">"{ "</span>;</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> </div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fields = ct->getElements();</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < fields.size(); ++i)</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  {</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  <span class="comment">// fields[i] gives a type which is DW_TAG_member, we want the member's type (getBaseType).</span></div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  <span class="comment">// It can also give a Subprogram type if the class just had non-virtual functions.</span></div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a89c7208bfc0b57873dfa574f52050295">DISubprogram</a> *sp = SVFUtil::dyn_cast<DISubprogram>(fields[i]))</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  {</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  ss << sp->getName().str();</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  }</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *mt = SVFUtil::dyn_cast<DIDerivedType>(fields[i]))</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  {</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mt->getTag() == dwarf::DW_TAG_member && <span class="stringliteral">"DCHG: expected member"</span>);</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  ss << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(mt->getBaseType());</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  }</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> </div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  <span class="keywordflow">if</span> (i != fields.size() - 1)</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  {</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  ss << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  }</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  }</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  ss << <span class="stringliteral">" }"</span>;</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  }</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  }</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct->getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  {</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  ss << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(ct->getBaseType());</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> sizes = ct->getElements();</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < sizes.size(); ++i)</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  {</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#ab0e8955a3dbfb0a836bfe64466411e4e">DISubrange</a> *sr = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#ab0e8955a3dbfb0a836bfe64466411e4e">DISubrange</a>>(sizes[0]);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(sr != <span class="keyword">nullptr</span> && <span class="stringliteral">"DCHG: non-subrange as array element?"</span>);</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  int64_t count = -1;</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *ci = sr->getCount().dyn_cast<<a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *>())</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  {</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  count = ci->getSExtValue();</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  }</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> </div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  ss << <span class="stringliteral">"["</span> << count << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  }</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  }</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct->getTag() == dwarf::DW_TAG_enumeration_type)</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  {</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  ss << <span class="stringliteral">"enum "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(ct->getBaseType());</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  }</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct->getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  {</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> </div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  }</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  }</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#aad46bd16008ebbc81e632f4fc69b3ea9">DISubroutineType</a> *st = SVFUtil::dyn_cast<DISubroutineType>(t))</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  {</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#abfc3b60432a782f5eb5ea73f20d34333">DITypeRefArray</a> types = st->getTypeArray();</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  <span class="comment">// Must have one element at least (the first type).</span></div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  ss << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(types[0]) << <span class="stringliteral">" fn("</span>;</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  <span class="keywordflow">if</span> (types.size() == 1)</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  {</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  ss << <span class="stringliteral">"void)"</span>;</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  }</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  {</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1; i < types.size(); ++i)</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  {</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  ss << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(types[i]);</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  <span class="keywordflow">if</span> (i + 1 != types.size())</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  {</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  <span class="comment">// There's another type.</span></div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  ss << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  }</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  }</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> </div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  ss << <span class="stringliteral">")"</span>;</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  }</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> </div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  ss << st->getName().str();</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  }</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> </div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  <span class="keywordflow">return</span> ss.str();</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> }</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a2dc488345cc3a5f37079952f638d8c2b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">SVF::DCHGraph::diTypeToStr</a></div><div class="ttdeci">static std::string diTypeToStr(const DIType *)</div><div class="ttdoc">Returns a human-readable version of the DIType. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00958">DCHG.cpp:958</a></div></div>
|
|
721
|
+
<div class="fragment"><div class="line"><a name="l00959"></a><span class="lineno"> 959</span> {</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  std::stringstream ss;</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span> </div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  <span class="keywordflow">if</span> (t == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  {</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  <span class="keywordflow">return</span> <span class="stringliteral">"void"</span>;</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  }</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span> </div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *bt = SVFUtil::dyn_cast<DIBasicType>(t))</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  {</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  ss << bt->getName().str();</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  }</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *dt = SVFUtil::dyn_cast<DIDerivedType>(t))</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  {</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <span class="keywordflow">if</span> (dt->getName() == <span class="stringliteral">"__vtbl_ptr_type"</span>)</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  {</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  ss << <span class="stringliteral">"(vtbl * =) __vtbl_ptr_type"</span>;</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  }</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_const_type)</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  {</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  ss << <span class="stringliteral">"const "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType());</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  }</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_volatile_type)</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  {</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  ss << <span class="stringliteral">"volatile "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType());</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  }</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_restrict_type)</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  {</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  ss << <span class="stringliteral">"restrict "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType());</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  }</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_atomic_type)</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  {</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  ss << <span class="stringliteral">"atomic "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType());</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  }</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_pointer_type)</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  {</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  ss << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType()) << <span class="stringliteral">" *"</span>;</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  }</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_ptr_to_member_type)</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  {</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  ss << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType())</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  << <span class="stringliteral">" "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(SVFUtil::dyn_cast<DIType>(dt->getExtraData())) << <span class="stringliteral">"::*"</span>;</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  }</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_reference_type)</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  {</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  ss << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType()) << <span class="stringliteral">" &"</span>;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  }</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_rvalue_reference_type)</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  {</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  ss << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType()) << <span class="stringliteral">" &&"</span>;</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  }</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt->getTag() == dwarf::DW_TAG_typedef)</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  {</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  ss << dt->getName().str() << <span class="stringliteral">"->"</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt->getBaseType());</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  }</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  }</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *ct = SVFUtil::dyn_cast<DICompositeType>(t))</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  {</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  <span class="keywordflow">if</span> (ct->getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  || ct->getTag() == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  || ct->getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  {</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> </div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  <span class="keywordflow">if</span> (ct->getTag() == dwarf::DW_TAG_class_type)</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  {</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  ss << <span class="stringliteral">"class"</span>;</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  }</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct->getTag() == dwarf::DW_TAG_structure_type)</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  {</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  ss << <span class="stringliteral">"struct"</span>;</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  }</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct->getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  {</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  ss << <span class="stringliteral">"union"</span>;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  }</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> </div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  ss << <span class="stringliteral">"."</span>;</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <span class="keywordflow">if</span> (ct->getName() != <span class="stringliteral">""</span>)</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  {</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  ss << ct->getName().str();</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  }</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  {</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  <span class="comment">// Iterate over the element types.</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  ss << <span class="stringliteral">"{ "</span>;</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> </div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fields = ct->getElements();</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < fields.size(); ++i)</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  {</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  <span class="comment">// fields[i] gives a type which is DW_TAG_member, we want the member's type (getBaseType).</span></div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  <span class="comment">// It can also give a Subprogram type if the class just had non-virtual functions.</span></div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a89c7208bfc0b57873dfa574f52050295">DISubprogram</a> *sp = SVFUtil::dyn_cast<DISubprogram>(fields[i]))</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  {</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  ss << sp->getName().str();</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  }</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *mt = SVFUtil::dyn_cast<DIDerivedType>(fields[i]))</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  {</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mt->getTag() == dwarf::DW_TAG_member && <span class="stringliteral">"DCHG: expected member"</span>);</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  ss << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(mt->getBaseType());</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  }</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> </div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  <span class="keywordflow">if</span> (i != fields.size() - 1)</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  {</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  ss << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  }</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  }</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  ss << <span class="stringliteral">" }"</span>;</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  }</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  }</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct->getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  {</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  ss << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(ct->getBaseType());</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> sizes = ct->getElements();</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < sizes.size(); ++i)</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  {</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#ab0e8955a3dbfb0a836bfe64466411e4e">DISubrange</a> *sr = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#ab0e8955a3dbfb0a836bfe64466411e4e">DISubrange</a>>(sizes[0]);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(sr != <span class="keyword">nullptr</span> && <span class="stringliteral">"DCHG: non-subrange as array element?"</span>);</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  int64_t count = -1;</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *ci = sr->getCount().dyn_cast<<a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *>())</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  {</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  count = ci->getSExtValue();</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  }</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> </div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  ss << <span class="stringliteral">"["</span> << count << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  }</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  }</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct->getTag() == dwarf::DW_TAG_enumeration_type)</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  {</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  ss << <span class="stringliteral">"enum "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(ct->getBaseType());</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  }</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct->getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  {</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> </div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  }</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  }</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#aad46bd16008ebbc81e632f4fc69b3ea9">DISubroutineType</a> *st = SVFUtil::dyn_cast<DISubroutineType>(t))</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  {</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#abfc3b60432a782f5eb5ea73f20d34333">DITypeRefArray</a> types = st->getTypeArray();</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  <span class="comment">// Must have one element at least (the first type).</span></div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  ss << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(types[0]) << <span class="stringliteral">" fn("</span>;</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  <span class="keywordflow">if</span> (types.size() == 1)</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  {</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  ss << <span class="stringliteral">"void)"</span>;</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  }</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  {</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1; i < types.size(); ++i)</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  {</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  ss << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(types[i]);</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  <span class="keywordflow">if</span> (i + 1 != types.size())</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  {</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  <span class="comment">// There's another type.</span></div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  ss << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  }</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  }</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> </div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  ss << <span class="stringliteral">")"</span>;</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  }</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> </div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  ss << st->getName().str();</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  }</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> </div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  <span class="keywordflow">return</span> ss.str();</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> }</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a2dc488345cc3a5f37079952f638d8c2b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">SVF::DCHGraph::diTypeToStr</a></div><div class="ttdeci">static std::string diTypeToStr(const DIType *)</div><div class="ttdoc">Returns a human-readable version of the DIType. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00958">DCHG.cpp:958</a></div></div>
|
|
722
722
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
723
|
-
<div class="ttc" id="
|
|
724
|
-
<div class="ttc" id="
|
|
725
|
-
<div class="ttc" id="SVF-
|
|
726
|
-
<div class="ttc" id="
|
|
727
|
-
<div class="ttc" id="
|
|
728
|
-
<div class="ttc" id="SVF-
|
|
729
|
-
<div class="ttc" id="SVF-
|
|
730
|
-
<div class="ttc" id="SVF-
|
|
731
|
-
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_abfc3b60432a782f5eb5ea73f20d34333"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#abfc3b60432a782f5eb5ea73f20d34333">DITypeRefArray</a></div><div class="ttdeci">llvm::DITypeRefArray DITypeRefArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
|
|
723
|
+
<div class="ttc" id="namespaceSVF_html_adefcb50414ea999d70cea5ccdbcb98d7"><div class="ttname"><a href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">SVF::ConstantInt</a></div><div class="ttdeci">llvm::ConstantInt ConstantInt</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00091">BasicTypes.h:91</a></div></div>
|
|
724
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a98bb9afb9385eac16d7c78da796fd601"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00104">BasicTypes.h:104</a></div></div>
|
|
725
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
|
|
726
|
+
<div class="ttc" id="namespaceSVF_html_a89c7208bfc0b57873dfa574f52050295"><div class="ttname"><a href="namespaceSVF.html#a89c7208bfc0b57873dfa574f52050295">SVF::DISubprogram</a></div><div class="ttdeci">llvm::DISubprogram DISubprogram</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00122">BasicTypes.h:122</a></div></div>
|
|
727
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_ab0e8955a3dbfb0a836bfe64466411e4e"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#ab0e8955a3dbfb0a836bfe64466411e4e">DISubrange</a></div><div class="ttdeci">llvm::DISubrange DISubrange</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00102">BasicTypes.h:102</a></div></div>
|
|
728
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_aad46bd16008ebbc81e632f4fc69b3ea9"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#aad46bd16008ebbc81e632f4fc69b3ea9">DISubroutineType</a></div><div class="ttdeci">llvm::DISubroutineType DISubroutineType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
|
|
729
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a5f7968b31d2b29b589360067cf48e625"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a></div><div class="ttdeci">llvm::DIBasicType DIBasicType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
|
|
730
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_abfc3b60432a782f5eb5ea73f20d34333"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#abfc3b60432a782f5eb5ea73f20d34333">DITypeRefArray</a></div><div class="ttdeci">llvm::DITypeRefArray DITypeRefArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00105">BasicTypes.h:105</a></div></div>
|
|
732
731
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
732
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
|
|
733
733
|
</div><!-- fragment -->
|
|
734
734
|
</div>
|
|
735
735
|
</div>
|
|
@@ -775,7 +775,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
775
775
|
<tr>
|
|
776
776
|
<td class="memname">void DCHGraph::flatten </td>
|
|
777
777
|
<td>(</td>
|
|
778
|
-
<td class="paramtype">const <a class="el" href="
|
|
778
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> * </td>
|
|
779
779
|
<td class="paramname"><em>type</em></td><td>)</td>
|
|
780
780
|
<td></td>
|
|
781
781
|
</tr>
|
|
@@ -790,15 +790,15 @@ Additional Inherited Members</h2></td></tr>
|
|
|
790
790
|
<p>Populates fieldTypes for type and all its elements. </p>
|
|
791
791
|
|
|
792
792
|
<p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00265">265</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
|
|
793
|
-
<div class="fragment"><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> {</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  type = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>>(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type));</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type && <span class="stringliteral">"DCHG::flatten: canon type of struct/class is not struct/class"</span>);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.find(type) != <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.end())</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="comment">// Already done (necessary because of the recursion).</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="comment">// Create empty vector.</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[type];</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type != <span class="keyword">nullptr</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  && (type->getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  || type->getTag() == dwarf::DW_TAG_structure_type)</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  && <span class="stringliteral">"DCHG::flatten: expected a class/struct"</span>);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="comment">// Sort the fields from getElements. Especially a problem for classes; it's all jumbled up.</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  std::vector<const DIDerivedType *> fields;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fieldsDINA = type->getElements();</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < fieldsDINA.size(); ++i)</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *dt = SVFUtil::dyn_cast<DIDerivedType>(fieldsDINA[i]))</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="comment">// Don't care about subprograms, only member/inheritance.</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  fields.push_back(dt);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="comment">// TODO: virtual inheritance is not handled at all!</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  std::sort(fields.begin(), fields.end(),</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  [](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *&a, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *&b) -> <span class="keywordtype">bool</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  { <span class="keywordflow">return</span> a->getOffsetInBits() < b->getOffsetInBits(); });</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *mt : fields)</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((mt->getTag() == dwarf::DW_TAG_member || mt->getTag() == dwarf::DW_TAG_inheritance)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  && <span class="stringliteral">"DCHG: expected member/inheritance"</span>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="comment">// Either we have a class, struct, array, or something not in need of flattening.</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *fieldType = mt->getBaseType();</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">if</span> (fieldType->getTag() == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  || fieldType->getTag() == dwarf::DW_TAG_class_type)</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  {</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <a class="code" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a>(SVFUtil::dyn_cast<DICompositeType>(fieldType));</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *ft : <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[fieldType])</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  {</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="comment">// ft is already a canonical type because the "root" additions insert</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="comment">// canonical types.</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[type].push_back(ft);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fieldType->getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *arrayType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>>(fieldType);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *baseType = arrayType->getBaseType();</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *cbt = SVFUtil::dyn_cast<DICompositeType>(baseType))</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <a class="code" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a>(cbt);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *ft : <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[cbt])</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  {</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="comment">// ft is already a canonical type like above.</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[type].push_back(ft);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[type].push_back(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(baseType));</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  }</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  {</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[type].push_back(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(fieldType));</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> }</div><div class="ttc" id="classSVF_1_1DCHGraph_html_ab96874bc8f6461fe0c3eb53b7f5cedce"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">SVF::DCHGraph::flatten</a></div><div class="ttdeci">void flatten(const DICompositeType *type)</div><div class="ttdoc">Populates fieldTypes for type and all its elements. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00265">DCHG.cpp:265</a></div></div>
|
|
793
|
+
<div class="fragment"><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> {</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  type = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>>(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type));</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type && <span class="stringliteral">"DCHG::flatten: canon type of struct/class is not struct/class"</span>);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.find(type) != <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.end())</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="comment">// Already done (necessary because of the recursion).</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="comment">// Create empty vector.</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[type];</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type != <span class="keyword">nullptr</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  && (type->getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  || type->getTag() == dwarf::DW_TAG_structure_type)</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  && <span class="stringliteral">"DCHG::flatten: expected a class/struct"</span>);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="comment">// Sort the fields from getElements. Especially a problem for classes; it's all jumbled up.</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  std::vector<const DIDerivedType *> fields;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fieldsDINA = type->getElements();</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < fieldsDINA.size(); ++i)</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *dt = SVFUtil::dyn_cast<DIDerivedType>(fieldsDINA[i]))</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="comment">// Don't care about subprograms, only member/inheritance.</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  fields.push_back(dt);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="comment">// TODO: virtual inheritance is not handled at all!</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  std::sort(fields.begin(), fields.end(),</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  [](<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *&a, <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *&b) -> <span class="keywordtype">bool</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  { <span class="keywordflow">return</span> a->getOffsetInBits() < b->getOffsetInBits(); });</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *mt : fields)</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((mt->getTag() == dwarf::DW_TAG_member || mt->getTag() == dwarf::DW_TAG_inheritance)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  && <span class="stringliteral">"DCHG: expected member/inheritance"</span>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="comment">// Either we have a class, struct, array, or something not in need of flattening.</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *fieldType = mt->getBaseType();</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">if</span> (fieldType->getTag() == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  || fieldType->getTag() == dwarf::DW_TAG_class_type)</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  {</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <a class="code" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a>(SVFUtil::dyn_cast<DICompositeType>(fieldType));</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *ft : <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[fieldType])</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  {</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="comment">// ft is already a canonical type because the "root" additions insert</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="comment">// canonical types.</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[type].push_back(ft);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fieldType->getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *arrayType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>>(fieldType);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *baseType = arrayType->getBaseType();</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *cbt = SVFUtil::dyn_cast<DICompositeType>(baseType))</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <a class="code" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a>(cbt);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *ft : <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[cbt])</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  {</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="comment">// ft is already a canonical type like above.</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[type].push_back(ft);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[type].push_back(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(baseType));</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  }</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  {</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[type].push_back(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(fieldType));</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> }</div><div class="ttc" id="classSVF_1_1DCHGraph_html_ab96874bc8f6461fe0c3eb53b7f5cedce"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">SVF::DCHGraph::flatten</a></div><div class="ttdeci">void flatten(const DICompositeType *type)</div><div class="ttdoc">Populates fieldTypes for type and all its elements. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00265">DCHG.cpp:265</a></div></div>
|
|
794
794
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
795
|
-
<div class="ttc" id="
|
|
796
|
-
<div class="ttc" id="SVF-
|
|
797
|
-
<div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00128">BasicTypes.h:128</a></div></div>
|
|
795
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a98bb9afb9385eac16d7c78da796fd601"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00104">BasicTypes.h:104</a></div></div>
|
|
796
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
|
|
798
797
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a574ec14099f1112b394b00a79f3fdf1a"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">SVF::DCHGraph::fieldTypes</a></div><div class="ttdeci">Map< const DIType *, std::vector< const DIType * > > fieldTypes</div><div class="ttdoc">Maps types to their flattened fields&#39; types. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00374">DCHG.h:374</a></div></div>
|
|
798
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
|
|
799
799
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a079feacdcc3783f4a9108a3b2d2aed2c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">SVF::DCHGraph::getCanonicalType</a></div><div class="ttdeci">const DIType * getCanonicalType(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00713">DCHG.cpp:713</a></div></div>
|
|
800
800
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
801
|
-
<div class="ttc" id="
|
|
801
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
|
|
802
802
|
</div><!-- fragment -->
|
|
803
803
|
</div>
|
|
804
804
|
</div>
|
|
@@ -814,7 +814,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
814
814
|
<tr>
|
|
815
815
|
<td class="memname">void DCHGraph::gatherAggs </td>
|
|
816
816
|
<td>(</td>
|
|
817
|
-
<td class="paramtype">const <a class="el" href="
|
|
817
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> * </td>
|
|
818
818
|
<td class="paramname"><em>type</em></td><td>)</td>
|
|
819
819
|
<td></td>
|
|
820
820
|
</tr>
|
|
@@ -829,18 +829,18 @@ Additional Inherited Members</h2></td></tr>
|
|
|
829
829
|
<p>Populates containingAggs for type and all its elements. </p>
|
|
830
830
|
|
|
831
831
|
<p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00350">350</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
|
|
832
|
-
<div class="fragment"><div class="line"><a name="l00351"></a><span class="lineno"> 351</span> {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>.find(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type)) != <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>.end())</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  {</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  }</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="comment">// Initialise an empty set. We want all aggregates to have a value in</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="comment">// this map, even if empty (e.g. struct has no aggs, only scalars).</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type)];</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> </div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keywordflow">if</span> (type->getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *bt = type->getBaseType();</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  bt = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(bt);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">isAgg</a>(bt))</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  {</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *cbt = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>>(bt);</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type)].insert(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cbt));</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(cbt);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="comment">// These must be canonical already because of aggs.insert above/below.</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type)].insert(</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cbt)].<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cbt)].<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>());</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  }</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fields = type->getElements();</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < fields.size(); ++i)</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  {</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="comment">// Unwrap the member (could be a subprogram, not type, so guard needed).</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *mt = SVFUtil::dyn_cast<DIDerivedType>(fields[i]))</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  {</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *ft = mt->getBaseType();</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  ft = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(ft);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">isAgg</a>(ft))</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  {</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *cft = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>>(ft);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type)].insert(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cft));</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(cft);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="comment">// These must be canonical already because of aggs.insert above.</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type)].insert(</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cft)].<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cft)].<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>());</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  }</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  }</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> }</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph< DCHNode, DCHEdge >::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
|
|
832
|
+
<div class="fragment"><div class="line"><a name="l00351"></a><span class="lineno"> 351</span> {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>.find(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type)) != <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>.end())</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  {</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  }</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="comment">// Initialise an empty set. We want all aggregates to have a value in</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="comment">// this map, even if empty (e.g. struct has no aggs, only scalars).</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type)];</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> </div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keywordflow">if</span> (type->getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *bt = type->getBaseType();</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  bt = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(bt);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">isAgg</a>(bt))</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  {</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *cbt = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>>(bt);</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type)].insert(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cbt));</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(cbt);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="comment">// These must be canonical already because of aggs.insert above/below.</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type)].insert(</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cbt)].<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cbt)].<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>());</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  }</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fields = type->getElements();</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < fields.size(); ++i)</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  {</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="comment">// Unwrap the member (could be a subprogram, not type, so guard needed).</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *mt = SVFUtil::dyn_cast<DIDerivedType>(fields[i]))</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  {</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *ft = mt->getBaseType();</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  ft = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(ft);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">isAgg</a>(ft))</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  {</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *cft = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>>(ft);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type)].insert(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cft));</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(cft);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="comment">// These must be canonical already because of aggs.insert above.</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type)].insert(</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cft)].<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cft)].<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>());</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  }</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  }</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> }</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph< DCHNode, DCHEdge >::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
|
|
833
833
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_adc7a17f70ac3fa89624ad874dbd16ff9"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">SVF::DCHGraph::containingAggs</a></div><div class="ttdeci">Map< const DIType *, Set< const DIType * > > containingAggs</div><div class="ttdoc">Maps aggregate types to all the aggregate types it transitively contains. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00376">DCHG.h:376</a></div></div>
|
|
834
834
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a8fcbea9435a77beb27ad64d5a3175b0b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">SVF::DCHGraph::gatherAggs</a></div><div class="ttdeci">void gatherAggs(const DICompositeType *type)</div><div class="ttdoc">Populates containingAggs for type and all its elements. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00350">DCHG.cpp:350</a></div></div>
|
|
835
835
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a175ed6ad0c9b23d5617f755ab96c76c4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">SVF::DCHGraph::stripQualifiers</a></div><div class="ttdeci">static const DIType * stripQualifiers(const DIType *)</div><div class="ttdoc">Returns the DIType beneath the qualifiers. Does not strip away "DW_TAG_members". </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00754">DCHG.cpp:754</a></div></div>
|
|
836
|
-
<div class="ttc" id="namespaceSVF_html_aded9b991c77acc5284ccead0739e84f1"><div class="ttname"><a href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">SVF::DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00127">BasicTypes.h:127</a></div></div>
|
|
837
836
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph< DCHNode, DCHEdge >::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00369">GenericGraph.h:369</a></div></div>
|
|
838
837
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a9d2be5aec5216cbc1d1709b41f79c44b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">SVF::DCHGraph::isAgg</a></div><div class="ttdeci">static bool isAgg(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00342">DCHG.cpp:342</a></div></div>
|
|
839
|
-
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a98bb9afb9385eac16d7c78da796fd601"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
840
|
-
<div class="ttc" id="
|
|
838
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a98bb9afb9385eac16d7c78da796fd601"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00104">BasicTypes.h:104</a></div></div>
|
|
839
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
|
|
840
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
|
|
841
841
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a079feacdcc3783f4a9108a3b2d2aed2c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">SVF::DCHGraph::getCanonicalType</a></div><div class="ttdeci">const DIType * getCanonicalType(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00713">DCHG.cpp:713</a></div></div>
|
|
842
842
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
843
|
-
<div class="ttc" id="
|
|
843
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
|
|
844
844
|
</div><!-- fragment -->
|
|
845
845
|
</div>
|
|
846
846
|
</div>
|
|
@@ -854,9 +854,9 @@ Additional Inherited Members</h2></td></tr>
|
|
|
854
854
|
<td class="mlabels-left">
|
|
855
855
|
<table class="memname">
|
|
856
856
|
<tr>
|
|
857
|
-
<td class="memname">const <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a><const <a class="el" href="
|
|
857
|
+
<td class="memname">const <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a><const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *>& SVF::DCHGraph::getAggs </td>
|
|
858
858
|
<td>(</td>
|
|
859
|
-
<td class="paramtype">const <a class="el" href="
|
|
859
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
860
860
|
<td class="paramname"><em>base</em></td><td>)</td>
|
|
861
861
|
<td></td>
|
|
862
862
|
</tr>
|
|
@@ -884,9 +884,9 @@ Additional Inherited Members</h2></td></tr>
|
|
|
884
884
|
<div class="memproto">
|
|
885
885
|
<table class="memname">
|
|
886
886
|
<tr>
|
|
887
|
-
<td class="memname">const <a class="el" href="
|
|
887
|
+
<td class="memname">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * DCHGraph::getCanonicalType </td>
|
|
888
888
|
<td>(</td>
|
|
889
|
-
<td class="paramtype">const <a class="el" href="
|
|
889
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
890
890
|
<td class="paramname"><em>t</em></td><td>)</td>
|
|
891
891
|
<td></td>
|
|
892
892
|
</tr>
|
|
@@ -895,10 +895,10 @@ Additional Inherited Members</h2></td></tr>
|
|
|
895
895
|
<p>Returns the type representing all qualifier-variations of t. This should only matter in the case of DerivedTypes where qualifiers and have qualified base types cause a mess. </p>
|
|
896
896
|
|
|
897
897
|
<p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00713">713</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
|
|
898
|
-
<div class="fragment"><div class="line"><a name="l00714"></a><span class="lineno"> 714</span> {</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  <span class="comment">// We want stripped types to be canonical.</span></div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="keyword">const</span> <a class="code" href="
|
|
898
|
+
<div class="fragment"><div class="line"><a name="l00714"></a><span class="lineno"> 714</span> {</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  <span class="comment">// We want stripped types to be canonical.</span></div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *unstrippedT = t;</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  t = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t);</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span> </div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <span class="comment">// Is there a mapping for the unstripped type? Yes - return it.</span></div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.find(unstrippedT) != <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.end())</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  {</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[unstrippedT];</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  }</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span> </div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  <span class="comment">// There is no mapping for unstripped type (^), is there one for the stripped</span></div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="comment">// type? Yes - map the unstripped type to the same thing.</span></div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="keywordflow">if</span> (unstrippedT != t)</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  {</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.find(t) != <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.end())</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  {</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[unstrippedT] = <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[t];</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[unstrippedT];</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  }</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  }</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="comment">// Canonical type for t is not cached, find one for it.</span></div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *canonType : <a class="code" href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">canonicalTypes</a>)</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  {</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">teq</a>(t, canonType))</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  {</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <span class="comment">// Found a canonical type.</span></div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[t] = canonType;</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[t];</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  }</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  }</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span> </div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="comment">// No canonical type found, so t will be a canonical type.</span></div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  canonicalTypes.insert(t);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.insert({t, t});</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span> </div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[t];</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span> }</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a498a18fe8702251b6f2a4e6379e5cbb1"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">SVF::DCHGraph::canonicalTypeMap</a></div><div class="ttdeci">Map< const DIType *, const DIType * > canonicalTypeMap</div><div class="ttdoc">Maps types to their canonical type (many-to-one). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00370">DCHG.h:370</a></div></div>
|
|
899
899
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a175ed6ad0c9b23d5617f755ab96c76c4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">SVF::DCHGraph::stripQualifiers</a></div><div class="ttdeci">static const DIType * stripQualifiers(const DIType *)</div><div class="ttdoc">Returns the DIType beneath the qualifiers. Does not strip away "DW_TAG_members". </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00754">DCHG.cpp:754</a></div></div>
|
|
900
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
|
|
900
901
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_acb76ab20da1bfbec00f63d08e48cbddd"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">SVF::DCHGraph::teq</a></div><div class="ttdeci">static bool teq(const DIType *t1, const DIType *t2)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00819">DCHG.cpp:819</a></div></div>
|
|
901
|
-
<div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdoc">LLVM debug information. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00126">BasicTypes.h:126</a></div></div>
|
|
902
902
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a10225f56b21eb7f0870fdc433de3c393"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">SVF::DCHGraph::canonicalTypes</a></div><div class="ttdeci">Set< const DIType * > canonicalTypes</div><div class="ttdoc">Set of all possible canonical types (i.e. values of canonicalTypeMap). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00372">DCHG.h:372</a></div></div>
|
|
903
903
|
</div><!-- fragment -->
|
|
904
904
|
</div>
|
|
@@ -913,7 +913,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
913
913
|
<td class="mlabels-left">
|
|
914
914
|
<table class="memname">
|
|
915
915
|
<tr>
|
|
916
|
-
<td class="memname">const <a class="el" href="
|
|
916
|
+
<td class="memname">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a>* SVF::DCHGraph::getCSStaticType </td>
|
|
917
917
|
<td>(</td>
|
|
918
918
|
<td class="paramtype"><a class="el" href="classSVF_1_1CallSite.html">CallSite</a> </td>
|
|
919
919
|
<td class="paramname"><em>cs</em></td><td>)</td>
|
|
@@ -930,11 +930,11 @@ Additional Inherited Members</h2></td></tr>
|
|
|
930
930
|
<p>Retrieves the metadata associated with a <em>virtual</em> callsite. </p>
|
|
931
931
|
|
|
932
932
|
<p class="definition">Definition at line <a class="el" href="DCHG_8h_source.html#l00407">407</a> of file <a class="el" href="DCHG_8h_source.html">DCHG.h</a>.</p>
|
|
933
|
-
<div class="fragment"><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  {</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *md = cs.getInstruction()->getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#a0cd5347bc8043d4306e66a4a96005ace">cppUtil::ctir::derefMDName</a>);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(md != <span class="keyword">nullptr</span> && <span class="stringliteral">"Missing type metadata at virtual callsite"</span>);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <a class="code" href="
|
|
933
|
+
<div class="fragment"><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  {</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *md = cs.getInstruction()->getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#a0cd5347bc8043d4306e66a4a96005ace">cppUtil::ctir::derefMDName</a>);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(md != <span class="keyword">nullptr</span> && <span class="stringliteral">"Missing type metadata at virtual callsite"</span>);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *diType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a>>(md);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(diType != <span class="keyword">nullptr</span> && <span class="stringliteral">"Incorrect metadata type at virtual callsite"</span>);</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keywordflow">return</span> diType;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  }</div><div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
934
934
|
<div class="ttc" id="namespaceSVF_1_1cppUtil_1_1ctir_html_a0cd5347bc8043d4306e66a4a96005ace"><div class="ttname"><a href="namespaceSVF_1_1cppUtil_1_1ctir.html#a0cd5347bc8043d4306e66a4a96005ace">SVF::cppUtil::ctir::derefMDName</a></div><div class="ttdeci">const std::string derefMDName</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00113">CPPUtil.h:113</a></div></div>
|
|
935
|
-
<div class="ttc" id="
|
|
935
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
|
|
936
|
+
<div class="ttc" id="namespaceSVF_html_ad3d3cec1813411f039211c86236f7adb"><div class="ttname"><a href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">SVF::MDNode</a></div><div class="ttdeci">llvm::MDNode MDNode</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
|
|
936
937
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
937
|
-
<div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdoc">LLVM debug information. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00126">BasicTypes.h:126</a></div></div>
|
|
938
938
|
</div><!-- fragment -->
|
|
939
939
|
</div>
|
|
940
940
|
</div>
|
|
@@ -1000,10 +1000,11 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1000
1000
|
<p>Implements <a class="el" href="classSVF_1_1CommonCHGraph.html#ae90f9a2152ab07aa0df16badd733f1fd">SVF::CommonCHGraph</a>.</p>
|
|
1001
1001
|
|
|
1002
1002
|
<p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00555">555</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
|
|
1003
|
-
<div class="fragment"><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> {</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="keyword">const</span> <a class="code" href="
|
|
1003
|
+
<div class="fragment"><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> {</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *type = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">getCSStaticType</a>(cs));</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="comment">// Check if we've already computed.</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>.find(type) != <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>.end())</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  {</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>[type];</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  }</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span> </div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <a class="code" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a> vtblSet;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &children = <a class="code" href="classSVF_1_1DCHGraph.html#a0a3dfe1f2757eabd75082e2c4caec47a">cha</a>(type, <span class="keyword">false</span>);</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> childId : children)</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  {</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *child = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(childId);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl = child-><a class="code" href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988">getVTable</a>();</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="comment">// TODO: what if it is null?</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keywordflow">if</span> (vtbl != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  vtblSet.insert(vtbl);</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  }</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  }</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span> </div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="comment">// Cache.</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>.insert({type, vtblSet});</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="comment">// Return cached version - not the stack object.</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>[type];</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> }</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00019">MTAResultValidator.h:19</a></div></div>
|
|
1004
1004
|
<div class="ttc" id="classSVF_1_1DCHNode_html_a1a75ca91148992166d42d245d6c51988"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988">SVF::DCHNode::getVTable</a></div><div class="ttdeci">const GlobalValue * getVTable() const</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00169">DCHG.h:169</a></div></div>
|
|
1005
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
|
|
1005
1006
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a236d785d728189c2026357ce837fcdc6"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">SVF::DCHGraph::getCSStaticType</a></div><div class="ttdeci">const DIType * getCSStaticType(CallSite cs) const</div><div class="ttdoc">Retrieves the metadata associated with a virtual callsite. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00407">DCHG.h:407</a></div></div>
|
|
1006
|
-
<div class="ttc" id="namespaceSVF_html_a67f3f86344f028cacfbeb08caaf7bb0f"><div class="ttname"><a href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">SVF::GlobalValue</a></div><div class="ttdeci">llvm::GlobalValue GlobalValue</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
1007
|
+
<div class="ttc" id="namespaceSVF_html_a67f3f86344f028cacfbeb08caaf7bb0f"><div class="ttname"><a href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">SVF::GlobalValue</a></div><div class="ttdeci">llvm::GlobalValue GlobalValue</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
|
|
1007
1008
|
<div class="ttc" id="classSVF_1_1DCHNode_html"><div class="ttname"><a href="classSVF_1_1DCHNode.html">SVF::DCHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00063">DCHG.h:63</a></div></div>
|
|
1008
1009
|
<div class="ttc" id="namespaceSVF_html_a53511f619c06836ee85acf12153810e2"><div class="ttname"><a href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">SVF::VTableSet</a></div><div class="ttdeci">Set< const GlobalValue * > VTableSet</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00044">CHG.h:44</a></div></div>
|
|
1009
1010
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a079feacdcc3783f4a9108a3b2d2aed2c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">SVF::DCHGraph::getCanonicalType</a></div><div class="ttdeci">const DIType * getCanonicalType(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00713">DCHG.cpp:713</a></div></div>
|
|
@@ -1011,7 +1012,6 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1011
1012
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a294e7a04aff9cef87c1008e91a620155"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">SVF::DCHGraph::vtblCHAMap</a></div><div class="ttdeci">Map< const DIType *, VTableSet > vtblCHAMap</div><div class="ttdoc">Maps types to a set with their vtable and all their children&#39;s. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00366">DCHG.h:366</a></div></div>
|
|
1012
1013
|
<div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00095">SVFBasicTypes.h:95</a></div></div>
|
|
1013
1014
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph< DCHNode, DCHEdge >::getGNode</a></div><div class="ttdeci">NodeType * getGNode(NodeID id) const</div><div class="ttdoc">Get a node. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00391">GenericGraph.h:391</a></div></div>
|
|
1014
|
-
<div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdoc">LLVM debug information. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00126">BasicTypes.h:126</a></div></div>
|
|
1015
1015
|
</div><!-- fragment -->
|
|
1016
1016
|
</div>
|
|
1017
1017
|
</div>
|
|
@@ -1025,9 +1025,9 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1025
1025
|
<td class="mlabels-left">
|
|
1026
1026
|
<table class="memname">
|
|
1027
1027
|
<tr>
|
|
1028
|
-
<td class="memname">const <a class="el" href="
|
|
1028
|
+
<td class="memname">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a>* SVF::DCHGraph::getFieldType </td>
|
|
1029
1029
|
<td>(</td>
|
|
1030
|
-
<td class="paramtype">const <a class="el" href="
|
|
1030
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1031
1031
|
<td class="paramname"><em>base</em>, </td>
|
|
1032
1032
|
</tr>
|
|
1033
1033
|
<tr>
|
|
@@ -1052,9 +1052,9 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1052
1052
|
<p>Returns the type of field number idx (flattened) in base. </p>
|
|
1053
1053
|
|
|
1054
1054
|
<p class="definition">Definition at line <a class="el" href="DCHG_8h_source.html#l00291">291</a> of file <a class="el" href="DCHG_8h_source.html">DCHG.h</a>.</p>
|
|
1055
|
-
<div class="fragment"><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  base = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(base);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">if</span> (base == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="comment">// Conservative; the base object is untyped, sadly.</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="comment">// For TBHC this is conservative because the union type is lower in the DCHG</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="comment">// than its fields. TODO: make more precise.</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">if</span> (base->getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">return</span> base;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">if</span> (base->getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  {</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keyword">const</span> <a class="code" href="
|
|
1056
|
-
<div class="ttc" id="namespaceSVF_html_aded9b991c77acc5284ccead0739e84f1"><div class="ttname"><a href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">SVF::DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00127">BasicTypes.h:127</a></div></div>
|
|
1055
|
+
<div class="fragment"><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  base = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(base);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">if</span> (base == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="comment">// Conservative; the base object is untyped, sadly.</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="comment">// For TBHC this is conservative because the union type is lower in the DCHG</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="comment">// than its fields. TODO: make more precise.</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">if</span> (base->getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">return</span> base;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">if</span> (base->getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  {</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *cbase = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>>(base);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(cbase && <span class="stringliteral">"DCHG: bad DIComposite case"</span>);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">return</span> cbase->getBaseType();</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordflow">if</span> (!(base->getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  || base->getTag() == dwarf::DW_TAG_structure_type))</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  {</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  }</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.find(base) != <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.end() && <span class="stringliteral">"DCHG: base not flattened!"</span>);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  std::vector<const DIType *> &fields = <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[base];</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(fields.size() > idx && <span class="stringliteral">"DCHG: idx into struct larger than # fields!"</span>);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(fields[idx]);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  }</div><div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
1057
1056
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a574ec14099f1112b394b00a79f3fdf1a"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">SVF::DCHGraph::fieldTypes</a></div><div class="ttdeci">Map< const DIType *, std::vector< const DIType * > > fieldTypes</div><div class="ttdoc">Maps types to their flattened fields&#39; types. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00374">DCHG.h:374</a></div></div>
|
|
1057
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
|
|
1058
1058
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a079feacdcc3783f4a9108a3b2d2aed2c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">SVF::DCHGraph::getCanonicalType</a></div><div class="ttdeci">const DIType * getCanonicalType(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00713">DCHG.cpp:713</a></div></div>
|
|
1059
1059
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
1060
1060
|
</div><!-- fragment -->
|
|
@@ -1070,9 +1070,9 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1070
1070
|
<td class="mlabels-left">
|
|
1071
1071
|
<table class="memname">
|
|
1072
1072
|
<tr>
|
|
1073
|
-
<td class="memname">const std::vector<const <a class="el" href="
|
|
1073
|
+
<td class="memname">const std::vector<const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *>& SVF::DCHGraph::getFieldTypes </td>
|
|
1074
1074
|
<td>(</td>
|
|
1075
|
-
<td class="paramtype">const <a class="el" href="
|
|
1075
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1076
1076
|
<td class="paramname"><em>base</em></td><td>)</td>
|
|
1077
1077
|
<td></td>
|
|
1078
1078
|
</tr>
|
|
@@ -1105,7 +1105,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1105
1105
|
<tr>
|
|
1106
1106
|
<td class="memname"><a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a>* SVF::DCHGraph::getNode </td>
|
|
1107
1107
|
<td>(</td>
|
|
1108
|
-
<td class="paramtype">const <a class="el" href="
|
|
1108
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1109
1109
|
<td class="paramname"><em>type</em></td><td>)</td>
|
|
1110
1110
|
<td></td>
|
|
1111
1111
|
</tr>
|
|
@@ -1138,7 +1138,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1138
1138
|
<tr>
|
|
1139
1139
|
<td class="memname">unsigned SVF::DCHGraph::getNumFields </td>
|
|
1140
1140
|
<td>(</td>
|
|
1141
|
-
<td class="paramtype">const <a class="el" href="
|
|
1141
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1142
1142
|
<td class="paramname"><em>base</em></td><td>)</td>
|
|
1143
1143
|
<td></td>
|
|
1144
1144
|
</tr>
|
|
@@ -1169,7 +1169,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1169
1169
|
<tr>
|
|
1170
1170
|
<td class="memname"><a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a> * DCHGraph::getOrCreateNode </td>
|
|
1171
1171
|
<td>(</td>
|
|
1172
|
-
<td class="paramtype">const <a class="el" href="
|
|
1172
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1173
1173
|
<td class="paramname"><em>type</em></td><td>)</td>
|
|
1174
1174
|
<td></td>
|
|
1175
1175
|
</tr>
|
|
@@ -1236,23 +1236,23 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1236
1236
|
<p>Implements <a class="el" href="classSVF_1_1CommonCHGraph.html#aae511b2ee7c2c7ea7be70c7884e92021">SVF::CommonCHGraph</a>.</p>
|
|
1237
1237
|
|
|
1238
1238
|
<p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00583">583</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
|
|
1239
|
-
<div class="fragment"><div class="line"><a name="l00584"></a><span class="lineno"> 584</span> {</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keywordtype">size_t</span> idx = <a class="code" href="namespaceSVF_1_1cppUtil.html#ad2a35c1d2e357690e634bb250a68795d">cppUtil::getVCallIdx</a>(cs);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  std::string funName = <a class="code" href="namespaceSVF_1_1cppUtil.html#a0a67c31dcc44784b09dca54b4b7c624a">cppUtil::getFunNameOfVCallSite</a>(cs);</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl : vtbls)</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>.find(vtbl) != <a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>.end() && <span class="stringliteral">"floating vtbl"</span>);</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *type = <a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>[vtbl];</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">hasNode</a>(type) && <span class="stringliteral">"trying to get vtbl for type not in graph"</span>);</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *node = <a class="code" href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">getNode</a>(type);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  std::vector<std::vector<const Function *>> allVfns = node-><a class="code" href="classSVF_1_1DCHNode.html#a0669b995c4fe72f206154f5cf6889fe8">getVfnVectors</a>();</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="keywordflow">for</span> (std::vector<const Function *> vfnV : allVfns)</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  {</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="comment">// We only care about any virtual function corresponding to idx.</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="keywordflow">if</span> (idx >= vfnV.size())</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  {</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  }</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span> </div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *callee = vfnV[idx];</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="comment">// Practically a copy of that in lib/MemoryModel/CHA.cpp</span></div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="keywordflow">if</span> (cs.<a class="code" href="classSVF_1_1CallSite.html#a145676880fce313b4634d14118476c27">arg_size</a>() == callee->arg_size() || (cs.<a class="code" href="classSVF_1_1CallSite.html#ad0040f4b7953b509059223d1d52c203f">getFunctionType</a>()->isVarArg() && callee->isVarArg()))</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">cppUtil::demangle</a>(callee->getName().str());</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  std::string calleeName = dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span> </div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="comment">/*</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="comment"> * The compiler will add some special suffix (e.g.,</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="comment"> * "[abi:cxx11]") to the end of some virtual function:</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="comment"> * In dealII</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="comment"> * function: FE_Q<3>::get_name</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="comment"> * will be mangled as: _ZNK4FE_QILi3EE8get_nameB5cxx11Ev</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="comment"> * after demangling: FE_Q<3>::get_name[abi:cxx11]</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="comment"> * The special suffix ("[abi:cxx11]") needs to be removed</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="comment"> */</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="keyword">const</span> std::string suffix(<span class="stringliteral">"[abi:cxx11]"</span>);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keywordtype">size_t</span> suffixPos = calleeName.rfind(suffix);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keywordflow">if</span> (suffixPos != std::string::npos)</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  {</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  calleeName.erase(suffixPos, suffix.size());</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  }</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span> </div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="comment">/*</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="comment"> * if we can't get the function name of a virtual callsite, all virtual</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="comment"> * functions corresponding to idx will be valid</span></div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="comment"> */</span></div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="keywordflow">if</span> (funName.size() == 0)</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  {</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  virtualFunctions.insert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aa09c2b313ff1c1abcc1e5cb3f9ef46a5">SVFUtil::getFunction</a>(callee->getName().str()));</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  }</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (funName[0] == <span class="charliteral">'~'</span>)</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  {</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="comment">/*</span></div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="comment"> * if the virtual callsite is calling a destructor, then all</span></div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="comment"> * destructors in the ch will be valid</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="comment"> * class A { virtual ~A(){} };</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="comment"> * class B: public A { virtual ~B(){} };</span></div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="comment"> * int main() {</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="comment"> * A *a = new B;</span></div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="comment"> * delete a; /// the function name of this virtual callsite is ~A()</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="comment"> * }</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="comment"> */</span></div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keywordflow">if</span> (calleeName[0] == <span class="charliteral">'~'</span>)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  virtualFunctions.insert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aa09c2b313ff1c1abcc1e5cb3f9ef46a5">SVFUtil::getFunction</a>(callee->getName().str()));</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  }</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  }</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  {</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="comment">/*</span></div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="comment"> * For other virtual function calls, the function name of the callsite</span></div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="comment"> * and the function name of the target callee should match exactly</span></div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="comment"> */</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keywordflow">if</span> (funName.compare(calleeName) == 0)</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  {</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  virtualFunctions.insert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aa09c2b313ff1c1abcc1e5cb3f9ef46a5">SVFUtil::getFunction</a>(callee->getName().str()));</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  }</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  }</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  }</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span> }</div><div class="ttc" id="namespaceSVF_1_1cppUtil_html_ad2a35c1d2e357690e634bb250a68795d"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#ad2a35c1d2e357690e634bb250a68795d">SVF::cppUtil::getVCallIdx</a></div><div class="ttdeci">u64_t getVCallIdx(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00397">CPPUtil.cpp:397</a></div></div>
|
|
1239
|
+
<div class="fragment"><div class="line"><a name="l00584"></a><span class="lineno"> 584</span> {</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keywordtype">size_t</span> idx = <a class="code" href="namespaceSVF_1_1cppUtil.html#ad2a35c1d2e357690e634bb250a68795d">cppUtil::getVCallIdx</a>(cs);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  std::string funName = <a class="code" href="namespaceSVF_1_1cppUtil.html#a0a67c31dcc44784b09dca54b4b7c624a">cppUtil::getFunNameOfVCallSite</a>(cs);</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl : vtbls)</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>.find(vtbl) != <a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>.end() && <span class="stringliteral">"floating vtbl"</span>);</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *type = <a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>[vtbl];</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">hasNode</a>(type) && <span class="stringliteral">"trying to get vtbl for type not in graph"</span>);</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *node = <a class="code" href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">getNode</a>(type);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  std::vector<std::vector<const Function *>> allVfns = node-><a class="code" href="classSVF_1_1DCHNode.html#a0669b995c4fe72f206154f5cf6889fe8">getVfnVectors</a>();</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="keywordflow">for</span> (std::vector<const Function *> vfnV : allVfns)</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  {</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="comment">// We only care about any virtual function corresponding to idx.</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="keywordflow">if</span> (idx >= vfnV.size())</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  {</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  }</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span> </div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *callee = vfnV[idx];</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="comment">// Practically a copy of that in lib/MemoryModel/CHA.cpp</span></div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="keywordflow">if</span> (cs.<a class="code" href="classSVF_1_1CallSite.html#a145676880fce313b4634d14118476c27">arg_size</a>() == callee->arg_size() || (cs.<a class="code" href="classSVF_1_1CallSite.html#ad0040f4b7953b509059223d1d52c203f">getFunctionType</a>()->isVarArg() && callee->isVarArg()))</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">cppUtil::demangle</a>(callee->getName().str());</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  std::string calleeName = dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span> </div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="comment">/*</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="comment"> * The compiler will add some special suffix (e.g.,</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="comment"> * "[abi:cxx11]") to the end of some virtual function:</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="comment"> * In dealII</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="comment"> * function: FE_Q<3>::get_name</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="comment"> * will be mangled as: _ZNK4FE_QILi3EE8get_nameB5cxx11Ev</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="comment"> * after demangling: FE_Q<3>::get_name[abi:cxx11]</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="comment"> * The special suffix ("[abi:cxx11]") needs to be removed</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="comment"> */</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="keyword">const</span> std::string suffix(<span class="stringliteral">"[abi:cxx11]"</span>);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keywordtype">size_t</span> suffixPos = calleeName.rfind(suffix);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keywordflow">if</span> (suffixPos != std::string::npos)</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  {</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  calleeName.erase(suffixPos, suffix.size());</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  }</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span> </div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="comment">/*</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="comment"> * if we can't get the function name of a virtual callsite, all virtual</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="comment"> * functions corresponding to idx will be valid</span></div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="comment"> */</span></div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="keywordflow">if</span> (funName.size() == 0)</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  {</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  virtualFunctions.insert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aa09c2b313ff1c1abcc1e5cb3f9ef46a5">SVFUtil::getFunction</a>(callee->getName().str()));</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  }</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (funName[0] == <span class="charliteral">'~'</span>)</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  {</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="comment">/*</span></div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="comment"> * if the virtual callsite is calling a destructor, then all</span></div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="comment"> * destructors in the ch will be valid</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="comment"> * class A { virtual ~A(){} };</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="comment"> * class B: public A { virtual ~B(){} };</span></div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="comment"> * int main() {</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="comment"> * A *a = new B;</span></div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="comment"> * delete a; /// the function name of this virtual callsite is ~A()</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="comment"> * }</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="comment"> */</span></div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keywordflow">if</span> (calleeName[0] == <span class="charliteral">'~'</span>)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  virtualFunctions.insert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aa09c2b313ff1c1abcc1e5cb3f9ef46a5">SVFUtil::getFunction</a>(callee->getName().str()));</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  }</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  }</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  {</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="comment">/*</span></div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="comment"> * For other virtual function calls, the function name of the callsite</span></div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="comment"> * and the function name of the target callee should match exactly</span></div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="comment"> */</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keywordflow">if</span> (funName.compare(calleeName) == 0)</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  {</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  virtualFunctions.insert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aa09c2b313ff1c1abcc1e5cb3f9ef46a5">SVFUtil::getFunction</a>(callee->getName().str()));</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  }</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  }</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  }</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span> }</div><div class="ttc" id="namespaceSVF_1_1cppUtil_html_ad2a35c1d2e357690e634bb250a68795d"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#ad2a35c1d2e357690e634bb250a68795d">SVF::cppUtil::getVCallIdx</a></div><div class="ttdeci">u64_t getVCallIdx(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00397">CPPUtil.cpp:397</a></div></div>
|
|
1240
1240
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
1241
1241
|
<div class="ttc" id="structSVF_1_1cppUtil_1_1DemangledName_html"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html">SVF::cppUtil::DemangledName</a></div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00046">CPPUtil.h:46</a></div></div>
|
|
1242
1242
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_aaa63715e67ade7711a0366eb7559b708"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">SVF::DCHGraph::vtblToTypeMap</a></div><div class="ttdeci">Map< const GlobalValue *, const DIType * > vtblToTypeMap</div><div class="ttdoc">Maps VTables to the DIType associated with them. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00360">DCHG.h:360</a></div></div>
|
|
1243
1243
|
<div class="ttc" id="classSVF_1_1DCHNode_html_a0669b995c4fe72f206154f5cf6889fe8"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a0669b995c4fe72f206154f5cf6889fe8">SVF::DCHNode::getVfnVectors</a></div><div class="ttdeci">const std::vector< std::vector< const Function * > > & getVfnVectors(void) const</div><div class="ttdoc">Returns the vector of virtual function vectors. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00175">DCHG.h:175</a></div></div>
|
|
1244
1244
|
<div class="ttc" id="namespaceSVF_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="Util_2BasicTypes_8h_source.html#l00066">BasicTypes.h:66</a></div></div>
|
|
1245
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
|
|
1245
1246
|
<div class="ttc" id="structSVF_1_1cppUtil_1_1DemangledName_html_a1dd17b240663bc9412adefde82385e02"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">SVF::cppUtil::DemangledName::funcName</a></div><div class="ttdeci">std::string funcName</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00049">CPPUtil.h:49</a></div></div>
|
|
1246
1247
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a96c68bbb5ee5e939158ce0b67da2c61d"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">SVF::DCHGraph::getNode</a></div><div class="ttdeci">DCHNode * getNode(const DIType *type)</div><div class="ttdoc">Returns the node for type (nullptr if it doesn&#39;t exist). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00424">DCHG.h:424</a></div></div>
|
|
1247
1248
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aa09c2b313ff1c1abcc1e5cb3f9ef46a5"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aa09c2b313ff1c1abcc1e5cb3f9ef46a5">SVF::SVFUtil::getFunction</a></div><div class="ttdeci">const SVFFunction * getFunction(std::string name)</div><div class="ttdoc">Get the corresponding Function based on its name. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00225">SVFUtil.h:225</a></div></div>
|
|
1248
|
-
<div class="ttc" id="namespaceSVF_html_a67f3f86344f028cacfbeb08caaf7bb0f"><div class="ttname"><a href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">SVF::GlobalValue</a></div><div class="ttdeci">llvm::GlobalValue GlobalValue</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
1249
|
+
<div class="ttc" id="namespaceSVF_html_a67f3f86344f028cacfbeb08caaf7bb0f"><div class="ttname"><a href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">SVF::GlobalValue</a></div><div class="ttdeci">llvm::GlobalValue GlobalValue</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
|
|
1249
1250
|
<div class="ttc" id="classSVF_1_1DCHNode_html"><div class="ttname"><a href="classSVF_1_1DCHNode.html">SVF::DCHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00063">DCHG.h:63</a></div></div>
|
|
1250
|
-
<div class="ttc" id="classSVF_1_1CallSite_html_a145676880fce313b4634d14118476c27"><div class="ttname"><a href="classSVF_1_1CallSite.html#a145676880fce313b4634d14118476c27">SVF::CallSite::arg_size</a></div><div class="ttdeci">unsigned arg_size() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
1251
|
+
<div class="ttc" id="classSVF_1_1CallSite_html_a145676880fce313b4634d14118476c27"><div class="ttname"><a href="classSVF_1_1CallSite.html#a145676880fce313b4634d14118476c27">SVF::CallSite::arg_size</a></div><div class="ttdeci">unsigned arg_size() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00228">BasicTypes.h:228</a></div></div>
|
|
1251
1252
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a58341e23c1dc2b3e7fce190ed16a8a25"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">SVF::DCHGraph::hasNode</a></div><div class="ttdeci">bool hasNode(const DIType *type)</div><div class="ttdoc">Checks if a node exists for type. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00417">DCHG.h:417</a></div></div>
|
|
1252
1253
|
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_a1007c092efaeae41002efd91b803a7f6"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">SVF::cppUtil::demangle</a></div><div class="ttdeci">struct DemangledName demangle(const std::string &name)</div></div>
|
|
1253
1254
|
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_a0a67c31dcc44784b09dca54b4b7c624a"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a0a67c31dcc44784b09dca54b4b7c624a">SVF::cppUtil::getFunNameOfVCallSite</a></div><div class="ttdeci">std::string getFunNameOfVCallSite(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00553">CPPUtil.cpp:553</a></div></div>
|
|
1254
|
-
<div class="ttc" id="classSVF_1_1CallSite_html_ad0040f4b7953b509059223d1d52c203f"><div class="ttname"><a href="classSVF_1_1CallSite.html#ad0040f4b7953b509059223d1d52c203f">SVF::CallSite::getFunctionType</a></div><div class="ttdeci">FunctionType * getFunctionType() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
1255
|
-
<div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdoc">LLVM debug information. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00126">BasicTypes.h:126</a></div></div>
|
|
1255
|
+
<div class="ttc" id="classSVF_1_1CallSite_html_ad0040f4b7953b509059223d1d52c203f"><div class="ttname"><a href="classSVF_1_1CallSite.html#ad0040f4b7953b509059223d1d52c203f">SVF::CallSite::getFunctionType</a></div><div class="ttdeci">FunctionType * getFunctionType() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00256">BasicTypes.h:256</a></div></div>
|
|
1256
1256
|
</div><!-- fragment -->
|
|
1257
1257
|
</div>
|
|
1258
1258
|
</div>
|
|
@@ -1299,7 +1299,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1299
1299
|
<tr>
|
|
1300
1300
|
<td class="memname">void DCHGraph::handleDICompositeType </td>
|
|
1301
1301
|
<td>(</td>
|
|
1302
|
-
<td class="paramtype">const <a class="el" href="
|
|
1302
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> * </td>
|
|
1303
1303
|
<td class="paramname"><em>compositeType</em></td><td>)</td>
|
|
1304
1304
|
<td></td>
|
|
1305
1305
|
</tr>
|
|
@@ -1314,16 +1314,16 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1314
1314
|
<p>Construction helper to process DICompositeTypes. </p>
|
|
1315
1315
|
|
|
1316
1316
|
<p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00027">27</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
|
|
1317
|
-
<div class="fragment"><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">switch</span> (compositeType->getTag())</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">case</span> dwarf::DW_TAG_array_type:</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a>) <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(compositeType);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(compositeType);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">case</span> dwarf::DW_TAG_class_type:</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">case</span> dwarf::DW_TAG_structure_type:</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(compositeType);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="comment">// If we're extending, we need to add the first-field relation.</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a>)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fields = compositeType->getElements();</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">if</span> (!fields.empty())</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="comment">// We want the first non-static, non-function member; it may not exist.</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *firstMember = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">for</span> (<a class="code" href="SVF-FE_2BasicTypes_8h.html#a358cd7e78ebc504972b73cd5ee80fac2">DINode</a> *n : fields)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *fm = SVFUtil::dyn_cast<DIDerivedType>(n))</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">if</span> (fm->getTag() == dwarf::DW_TAG_member && !fm->isStaticMember())</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  firstMember = fm;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">if</span> (firstMember != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="comment">// firstMember is a DW_TAG_member, we want the base type beneath it.</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a>(compositeType, firstMember->getBaseType(), <a class="code" href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a3b49b95b713f585b717810dce5ac6564">DCHEdge::FIRST_FIELD</a>);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a>(compositeType);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(compositeType);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">case</span> dwarf::DW_TAG_union_type:</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(compositeType);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="comment">// All fields are first fields.</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a>)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fields = compositeType->getElements();</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">for</span> (<a class="code" href="SVF-FE_2BasicTypes_8h.html#a358cd7e78ebc504972b73cd5ee80fac2">DINode</a> *field : fields)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="comment">// fields[0] gives a type which is DW_TAG_member, we want the member's type (getBaseType).</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *firstMember = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a>>(field);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(firstMember != <span class="keyword">nullptr</span> && <span class="stringliteral">"DCHG: expected member type"</span>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a>(compositeType, firstMember->getBaseType(), <a class="code" href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a3b49b95b713f585b717810dce5ac6564">DCHEdge::FIRST_FIELD</a>);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="comment">// flatten(compositeType);</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(compositeType);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">case</span> dwarf::DW_TAG_enumeration_type:</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(compositeType);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"DCHGraph::buildCHG: unexpected CompositeType tag."</span>);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> }</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a9ed6b91fad334605f514049a2072b538"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">SVF::DCHGraph::getOrCreateNode</a></div><div class="ttdeci">DCHNode * getOrCreateNode(const DIType *type)</div><div class="ttdoc">Creates a node from type, or returns it if it exists. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00403">DCHG.cpp:403</a></div></div>
|
|
1317
|
+
<div class="fragment"><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">switch</span> (compositeType->getTag())</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">case</span> dwarf::DW_TAG_array_type:</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a>) <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(compositeType);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(compositeType);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">case</span> dwarf::DW_TAG_class_type:</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">case</span> dwarf::DW_TAG_structure_type:</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(compositeType);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="comment">// If we're extending, we need to add the first-field relation.</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a>)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fields = compositeType->getElements();</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">if</span> (!fields.empty())</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="comment">// We want the first non-static, non-function member; it may not exist.</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *firstMember = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">for</span> (<a class="code" href="SVF-FE_2BasicTypes_8h.html#a358cd7e78ebc504972b73cd5ee80fac2">DINode</a> *n : fields)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">if</span> (<a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *fm = SVFUtil::dyn_cast<DIDerivedType>(n))</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">if</span> (fm->getTag() == dwarf::DW_TAG_member && !fm->isStaticMember())</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  firstMember = fm;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">if</span> (firstMember != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="comment">// firstMember is a DW_TAG_member, we want the base type beneath it.</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a>(compositeType, firstMember->getBaseType(), <a class="code" href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a3b49b95b713f585b717810dce5ac6564">DCHEdge::FIRST_FIELD</a>);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a>(compositeType);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(compositeType);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">case</span> dwarf::DW_TAG_union_type:</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(compositeType);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="comment">// All fields are first fields.</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a>)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fields = compositeType->getElements();</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">for</span> (<a class="code" href="SVF-FE_2BasicTypes_8h.html#a358cd7e78ebc504972b73cd5ee80fac2">DINode</a> *field : fields)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="comment">// fields[0] gives a type which is DW_TAG_member, we want the member's type (getBaseType).</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *firstMember = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a>>(field);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(firstMember != <span class="keyword">nullptr</span> && <span class="stringliteral">"DCHG: expected member type"</span>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a>(compositeType, firstMember->getBaseType(), <a class="code" href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a3b49b95b713f585b717810dce5ac6564">DCHEdge::FIRST_FIELD</a>);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="comment">// flatten(compositeType);</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(compositeType);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">case</span> dwarf::DW_TAG_enumeration_type:</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(compositeType);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"DCHGraph::buildCHG: unexpected CompositeType tag."</span>);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> }</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a9ed6b91fad334605f514049a2072b538"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">SVF::DCHGraph::getOrCreateNode</a></div><div class="ttdeci">DCHNode * getOrCreateNode(const DIType *type)</div><div class="ttdoc">Creates a node from type, or returns it if it exists. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00403">DCHG.cpp:403</a></div></div>
|
|
1318
1318
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a8fcbea9435a77beb27ad64d5a3175b0b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">SVF::DCHGraph::gatherAggs</a></div><div class="ttdeci">void gatherAggs(const DICompositeType *type)</div><div class="ttdoc">Populates containingAggs for type and all its elements. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00350">DCHG.cpp:350</a></div></div>
|
|
1319
1319
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_ab96874bc8f6461fe0c3eb53b7f5cedce"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">SVF::DCHGraph::flatten</a></div><div class="ttdeci">void flatten(const DICompositeType *type)</div><div class="ttdoc">Populates fieldTypes for type and all its elements. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00265">DCHG.cpp:265</a></div></div>
|
|
1320
1320
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
1321
|
-
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a358cd7e78ebc504972b73cd5ee80fac2"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a358cd7e78ebc504972b73cd5ee80fac2">DINode</a></div><div class="ttdeci">llvm::DINode DINode</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
1321
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a358cd7e78ebc504972b73cd5ee80fac2"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a358cd7e78ebc504972b73cd5ee80fac2">DINode</a></div><div class="ttdeci">llvm::DINode DINode</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
|
|
1322
1322
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a294a2075c97e1db8003393fb472c1def"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">SVF::DCHGraph::addEdge</a></div><div class="ttdeci">DCHEdge * addEdge(const DIType *t1, const DIType *t2, DCHEdge::GEdgeKind et)</div><div class="ttdoc">Creates an edge between from t1 to t2. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00421">DCHG.cpp:421</a></div></div>
|
|
1323
|
-
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a98bb9afb9385eac16d7c78da796fd601"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
1324
|
-
<div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00128">BasicTypes.h:128</a></div></div>
|
|
1323
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a98bb9afb9385eac16d7c78da796fd601"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00104">BasicTypes.h:104</a></div></div>
|
|
1325
1324
|
<div class="ttc" id="classSVF_1_1DCHEdge_html_a9ab4cd83d9ee475d3d8445cd91839726a3b49b95b713f585b717810dce5ac6564"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a3b49b95b713f585b717810dce5ac6564">SVF::DCHEdge::FIRST_FIELD</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00037">DCHG.h:37</a></div></div>
|
|
1326
1325
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
1326
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
|
|
1327
1327
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_aa6f49dfc9e3580d3f2d8c257395eb11e"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">SVF::DCHGraph::extended</a></div><div class="ttdeci">bool extended</div><div class="ttdoc">Whether this CHG is an extended CHG (first-field). Set by buildCHG. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00356">DCHG.h:356</a></div></div>
|
|
1328
1328
|
</div><!-- fragment -->
|
|
1329
1329
|
</div>
|
|
@@ -1340,7 +1340,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1340
1340
|
<tr>
|
|
1341
1341
|
<td class="memname">void DCHGraph::handleDIDerivedType </td>
|
|
1342
1342
|
<td>(</td>
|
|
1343
|
-
<td class="paramtype">const <a class="el" href="
|
|
1343
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> * </td>
|
|
1344
1344
|
<td class="paramname"><em>derivedType</em></td><td>)</td>
|
|
1345
1345
|
<td></td>
|
|
1346
1346
|
</tr>
|
|
@@ -1409,7 +1409,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1409
1409
|
<tr>
|
|
1410
1410
|
<td class="memname">void DCHGraph::handleTypedef </td>
|
|
1411
1411
|
<td>(</td>
|
|
1412
|
-
<td class="paramtype">const <a class="el" href="
|
|
1412
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1413
1413
|
<td class="paramname"><em>typedefType</em></td><td>)</td>
|
|
1414
1414
|
<td></td>
|
|
1415
1415
|
</tr>
|
|
@@ -1424,13 +1424,13 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1424
1424
|
<p>Attaches the typedef(s) to the base node. </p>
|
|
1425
1425
|
|
|
1426
1426
|
<p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00138">138</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
|
|
1427
|
-
<div class="fragment"><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(typedefType && typedefType->getTag() == dwarf::DW_TAG_typedef);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">// Need to gather them in a set first because we don't know the base type till</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="comment">// we get to the bottom of the (potentially many) typedefs.</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  std::vector<const DIDerivedType *> typedefs;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="comment">// Check for nullptr because you can typedef void.</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">while</span> (typedefType != <span class="keyword">nullptr</span> && typedefType->getTag() == dwarf::DW_TAG_typedef)</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keyword">const</span> <a class="code" href="
|
|
1427
|
+
<div class="fragment"><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(typedefType && typedefType->getTag() == dwarf::DW_TAG_typedef);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">// Need to gather them in a set first because we don't know the base type till</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="comment">// we get to the bottom of the (potentially many) typedefs.</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  std::vector<const DIDerivedType *> typedefs;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="comment">// Check for nullptr because you can typedef void.</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">while</span> (typedefType != <span class="keyword">nullptr</span> && typedefType->getTag() == dwarf::DW_TAG_typedef)</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *typedefDerivedType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a>>(typedefType);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="comment">// The typedef itself.</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  typedefs.push_back(typedefDerivedType);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="comment">// Next in the typedef line.</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  typedefType = typedefDerivedType->getBaseType();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  }</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *baseType = typedefType;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *baseTypeNode = <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(baseType);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *tdef : typedefs)</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="comment">// Base type needs to hold its typedefs.</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  baseTypeNode-><a class="code" href="classSVF_1_1DCHNode.html#a9d1016e3da3462664198b1125dfc8f6e">addTypedef</a>(tdef);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a9ed6b91fad334605f514049a2072b538"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">SVF::DCHGraph::getOrCreateNode</a></div><div class="ttdeci">DCHNode * getOrCreateNode(const DIType *type)</div><div class="ttdoc">Creates a node from type, or returns it if it exists. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00403">DCHG.cpp:403</a></div></div>
|
|
1428
1428
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
1429
1429
|
<div class="ttc" id="classSVF_1_1DCHNode_html_a9d1016e3da3462664198b1125dfc8f6e"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a9d1016e3da3462664198b1125dfc8f6e">SVF::DCHNode::addTypedef</a></div><div class="ttdeci">void addTypedef(const DIDerivedType *diTypedef)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00154">DCHG.h:154</a></div></div>
|
|
1430
|
-
<div class="ttc" id="
|
|
1430
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
|
|
1431
1431
|
<div class="ttc" id="classSVF_1_1DCHNode_html"><div class="ttname"><a href="classSVF_1_1DCHNode.html">SVF::DCHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00063">DCHG.h:63</a></div></div>
|
|
1432
1432
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
1433
|
-
<div class="ttc" id="
|
|
1433
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
|
|
1434
1434
|
</div><!-- fragment -->
|
|
1435
1435
|
</div>
|
|
1436
1436
|
</div>
|
|
@@ -1446,13 +1446,13 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1446
1446
|
<tr>
|
|
1447
1447
|
<td class="memname"><a class="el" href="classSVF_1_1DCHEdge.html">DCHEdge</a> * DCHGraph::hasEdge </td>
|
|
1448
1448
|
<td>(</td>
|
|
1449
|
-
<td class="paramtype">const <a class="el" href="
|
|
1449
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1450
1450
|
<td class="paramname"><em>t1</em>, </td>
|
|
1451
1451
|
</tr>
|
|
1452
1452
|
<tr>
|
|
1453
1453
|
<td class="paramkey"></td>
|
|
1454
1454
|
<td></td>
|
|
1455
|
-
<td class="paramtype">const <a class="el" href="
|
|
1455
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1456
1456
|
<td class="paramname"><em>t2</em>, </td>
|
|
1457
1457
|
</tr>
|
|
1458
1458
|
<tr>
|
|
@@ -1498,7 +1498,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1498
1498
|
<tr>
|
|
1499
1499
|
<td class="memname">bool SVF::DCHGraph::hasNode </td>
|
|
1500
1500
|
<td>(</td>
|
|
1501
|
-
<td class="paramtype">const <a class="el" href="
|
|
1501
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1502
1502
|
<td class="paramname"><em>type</em></td><td>)</td>
|
|
1503
1503
|
<td></td>
|
|
1504
1504
|
</tr>
|
|
@@ -1530,7 +1530,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1530
1530
|
<tr>
|
|
1531
1531
|
<td class="memname">bool DCHGraph::isAgg </td>
|
|
1532
1532
|
<td>(</td>
|
|
1533
|
-
<td class="paramtype">const <a class="el" href="
|
|
1533
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1534
1534
|
<td class="paramname"><em>t</em></td><td>)</td>
|
|
1535
1535
|
<td></td>
|
|
1536
1536
|
</tr>
|
|
@@ -1558,13 +1558,13 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1558
1558
|
<tr>
|
|
1559
1559
|
<td class="memname">bool DCHGraph::isBase </td>
|
|
1560
1560
|
<td>(</td>
|
|
1561
|
-
<td class="paramtype">const <a class="el" href="
|
|
1561
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1562
1562
|
<td class="paramname"><em>a</em>, </td>
|
|
1563
1563
|
</tr>
|
|
1564
1564
|
<tr>
|
|
1565
1565
|
<td class="paramkey"></td>
|
|
1566
1566
|
<td></td>
|
|
1567
|
-
<td class="paramtype">const <a class="el" href="
|
|
1567
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1568
1568
|
<td class="paramname"><em>b</em>, </td>
|
|
1569
1569
|
</tr>
|
|
1570
1570
|
<tr>
|
|
@@ -1611,13 +1611,13 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1611
1611
|
<tr>
|
|
1612
1612
|
<td class="memname">bool DCHGraph::isFieldOf </td>
|
|
1613
1613
|
<td>(</td>
|
|
1614
|
-
<td class="paramtype">const <a class="el" href="
|
|
1614
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1615
1615
|
<td class="paramname"><em>f</em>, </td>
|
|
1616
1616
|
</tr>
|
|
1617
1617
|
<tr>
|
|
1618
1618
|
<td class="paramkey"></td>
|
|
1619
1619
|
<td></td>
|
|
1620
|
-
<td class="paramtype">const <a class="el" href="
|
|
1620
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1621
1621
|
<td class="paramname"><em>b</em> </td>
|
|
1622
1622
|
</tr>
|
|
1623
1623
|
<tr>
|
|
@@ -1636,13 +1636,13 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1636
1636
|
<p>Returns true if f is a field of b (fields from getFieldTypes). </p>
|
|
1637
1637
|
|
|
1638
1638
|
<p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00677">677</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
|
|
1639
|
-
<div class="fragment"><div class="line"><a name="l00678"></a><span class="lineno"> 678</span> {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(f && b && <span class="stringliteral">"DCHG::isFieldOf: given nullptr!"</span>);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span> </div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  f = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(f);</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  b = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(b);</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordflow">if</span> (f == b) <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span> </div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="keywordflow">if</span> (b->getTag() == dwarf::DW_TAG_array_type || b->getTag() == dwarf::DW_TAG_pointer_type)</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  {</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keyword">const</span> <a class="code" href="
|
|
1639
|
+
<div class="fragment"><div class="line"><a name="l00678"></a><span class="lineno"> 678</span> {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(f && b && <span class="stringliteral">"DCHG::isFieldOf: given nullptr!"</span>);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span> </div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  f = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(f);</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  b = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(b);</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordflow">if</span> (f == b) <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span> </div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="keywordflow">if</span> (b->getTag() == dwarf::DW_TAG_array_type || b->getTag() == dwarf::DW_TAG_pointer_type)</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  {</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *baseType = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *arrayType = SVFUtil::dyn_cast<DICompositeType>(b))</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  {</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  baseType = arrayType->getBaseType();</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  }</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *ptrType = SVFUtil::dyn_cast<DIDerivedType>(b))</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  {</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  baseType = ptrType->getBaseType();</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(baseType && <span class="stringliteral">"DCHG::isFieldOf: baseType is neither DIComposite nor DIDerived!"</span>);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span> </div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  baseType = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(baseType);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="keywordflow">return</span> f == baseType || (baseType != <span class="keyword">nullptr</span> && <a class="code" href="classSVF_1_1DCHGraph.html#af0534356b4a8c68507e1237f1d7a8c11">isFieldOf</a>(f, baseType));</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  }</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (b->getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  || b->getTag() == dwarf::DW_TAG_structure_type)</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  {</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keyword">const</span> std::vector<const DIType *> &fields = <a class="code" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">getFieldTypes</a>(b);</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordflow">return</span> std::find(fields.begin(), fields.end(), f) != fields.end();</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  {</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  }</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span> }</div><div class="ttc" id="classSVF_1_1DCHGraph_html_ae9a0007299178912e2568dc7158d6824"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">SVF::DCHGraph::getFieldTypes</a></div><div class="ttdeci">const std::vector< const DIType * > & getFieldTypes(const DIType *base)</div><div class="ttdoc">Returns a vector of the types of all fields in base. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00327">DCHG.h:327</a></div></div>
|
|
1640
1640
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
1641
|
-
<div class="ttc" id="
|
|
1642
|
-
<div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00128">BasicTypes.h:128</a></div></div>
|
|
1641
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
|
|
1643
1642
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_af0534356b4a8c68507e1237f1d7a8c11"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#af0534356b4a8c68507e1237f1d7a8c11">SVF::DCHGraph::isFieldOf</a></div><div class="ttdeci">virtual bool isFieldOf(const DIType *f, const DIType *b)</div><div class="ttdoc">Returns true if f is a field of b (fields from getFieldTypes). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00677">DCHG.cpp:677</a></div></div>
|
|
1643
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
|
|
1644
1644
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a079feacdcc3783f4a9108a3b2d2aed2c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">SVF::DCHGraph::getCanonicalType</a></div><div class="ttdeci">const DIType * getCanonicalType(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00713">DCHG.cpp:713</a></div></div>
|
|
1645
|
-
<div class="ttc" id="
|
|
1645
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
|
|
1646
1646
|
</div><!-- fragment -->
|
|
1647
1647
|
</div>
|
|
1648
1648
|
</div>
|
|
@@ -1655,13 +1655,13 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1655
1655
|
<tr>
|
|
1656
1656
|
<td class="memname">bool DCHGraph::isFirstField </td>
|
|
1657
1657
|
<td>(</td>
|
|
1658
|
-
<td class="paramtype">const <a class="el" href="
|
|
1658
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1659
1659
|
<td class="paramname"><em>f</em>, </td>
|
|
1660
1660
|
</tr>
|
|
1661
1661
|
<tr>
|
|
1662
1662
|
<td class="paramkey"></td>
|
|
1663
1663
|
<td></td>
|
|
1664
|
-
<td class="paramtype">const <a class="el" href="
|
|
1664
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1665
1665
|
<td class="paramname"><em>b</em> </td>
|
|
1666
1666
|
</tr>
|
|
1667
1667
|
<tr>
|
|
@@ -1701,7 +1701,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1701
1701
|
</div><div class="memdoc">
|
|
1702
1702
|
|
|
1703
1703
|
<p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l01131">1131</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
|
|
1704
|
-
<div class="fragment"><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> {</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  <span class="keyword">static</span> <span class="keyword">const</span> std::string line = <span class="stringliteral">"-------------------------------------\n"</span>;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  <span class="keyword">static</span> <span class="keyword">const</span> std::string thickLine = <span class="stringliteral">"=====================================\n"</span>;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> singleIndent = 2;</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> </div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  <span class="keywordtype">size_t</span> currIndent = 0;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << thickLine;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  <span class="keywordtype">unsigned</span> numStructs = 0;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  <span class="keywordtype">unsigned</span> largestStruct = 0;</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> nodes;</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">DCHGraph::const_iterator</a> it = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  {</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  nodes.insert(it->first);</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  }</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> </div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> : nodes)</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  {</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  <span class="keywordflow">if</span> (*nodes.begin() != id)</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  {</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << line;</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  }</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> </div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> </div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="keywordtype">id</span> << <span class="stringliteral">": "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(node-><a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()) << <span class="stringliteral">" ["</span> << node-><a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>() << <span class="stringliteral">"]"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  <span class="keywordflow">if</span> (node-><a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>() != <span class="keyword">nullptr</span></div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  && (node-><a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()->getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  || node-><a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()->getTag() == dwarf::DW_TAG_structure_type))</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  {</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  ++numStructs;</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <span class="keywordtype">unsigned</span> numFields = <a class="code" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">getFieldTypes</a>(node-><a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()).size();</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  largestStruct = numFields > largestStruct ? numFields : largestStruct;</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  }</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> </div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  currIndent += singleIndent;</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"Virtual functions\n"</span>;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>  currIndent += singleIndent;</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  <span class="keyword">const</span> std::vector<std::vector<const Function *>> &vfnVectors = node-><a class="code" href="classSVF_1_1DCHNode.html#a0669b995c4fe72f206154f5cf6889fe8">getVfnVectors</a>();</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < vfnVectors.size(); ++i)</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>  {</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"[ vtable #"</span> << i << <span class="stringliteral">" ]\n"</span>;</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  currIndent += singleIndent;</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> j = 0; j < vfnVectors[i].size(); ++j)</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  {</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <span class="keyword">struct </span><a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">cppUtil::demangle</a>(vfnVectors[i][j]->getName().str());</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"["</span> << j << <span class="stringliteral">"] "</span></div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  << dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> << <span class="stringliteral">"::"</span> << dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  }</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> </div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  currIndent -= singleIndent;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  }</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> </div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  <span class="comment">// Nothing was printed.</span></div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  <span class="keywordflow">if</span> (vfnVectors.size() == 0)</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  {</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"(none)\n"</span>;</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  }</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> </div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>  currIndent -= singleIndent;</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> </div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"Bases\n"</span>;</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  currIndent += singleIndent;</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1DCHEdge.html">DCHEdge</a> *edge : node-><a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>())</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  {</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  std::string arrow;</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  <span class="keywordflow">if</span> (edge->getEdgeKind() == <a class="code" href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a9c05805c60fe04033bd9815968059e90">DCHEdge::INHERITANCE</a>)</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  {</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  arrow = <span class="stringliteral">"--inheritance-->"</span>;</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  }</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge->getEdgeKind() == <a class="code" href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a3b49b95b713f585b717810dce5ac6564">DCHEdge::FIRST_FIELD</a>)</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>  {</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  arrow = <span class="stringliteral">"--first-field-->"</span>;</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  }</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge->getEdgeKind() == <a class="code" href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a3e807b4caeb170c5cd1e855ac1a92d77">DCHEdge::INSTANCE</a>)</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>  {</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>  arrow = <span class="stringliteral">"---instance---->"</span>;</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>  }</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge->getEdgeKind() == <a class="code" href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a8b07351616a1798fa34ec3828f485ebb">DCHEdge::STD_DEF</a>)</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>  {</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>  arrow = <span class="stringliteral">"---standard---->"</span>;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>  }</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>  {</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  arrow = <span class="stringliteral">"----unknown---->"</span>;</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  }</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> </div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"[ "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(node-><a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()) << <span class="stringliteral">" ] "</span></div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  << arrow << <span class="stringliteral">" [ "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(edge->getDstNode()->getType()) << <span class="stringliteral">" ]\n"</span>;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  }</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> </div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>  <span class="keywordflow">if</span> (node-><a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().size() == 0)</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>  {</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"(none)\n"</span>;</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>  }</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> </div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  currIndent -= singleIndent;</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> </div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"Typedefs\n"</span>;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> </div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>  currIndent += singleIndent;</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> </div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const DIDerivedType *></a> &typedefs = node-><a class="code" href="classSVF_1_1DCHNode.html#ac77edc44c3c5acc185c27c018837d066">getTypedefs</a>();</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *tdef : typedefs)</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>  {</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  std::string typedefName = <span class="stringliteral">"void"</span>;</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>  <span class="keywordflow">if</span> (tdef != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  {</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  typedefName = tdef->getName().str();</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>  }</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> </div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << typedefName << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  }</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> </div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  <span class="keywordflow">if</span> (typedefs.size() == 0)</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  {</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"(none)\n"</span>;</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  }</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> </div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  currIndent -= singleIndent;</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> </div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>  currIndent -= singleIndent;</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>  }</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> </div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << thickLine;</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> </div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"Other stats\n"</span>;</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << line;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"# Canonical types : "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">canonicalTypes</a>.size() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"# structs : "</span> << numStructs << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"Largest struct : "</span> << largestStruct << <span class="stringliteral">" fields\n"</span>;</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << thickLine;</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> </div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flush();</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> }</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph< DCHNode, DCHEdge >::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
|
|
1704
|
+
<div class="fragment"><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> {</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  <span class="keyword">static</span> <span class="keyword">const</span> std::string line = <span class="stringliteral">"-------------------------------------\n"</span>;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  <span class="keyword">static</span> <span class="keyword">const</span> std::string thickLine = <span class="stringliteral">"=====================================\n"</span>;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> singleIndent = 2;</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> </div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  <span class="keywordtype">size_t</span> currIndent = 0;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << thickLine;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  <span class="keywordtype">unsigned</span> numStructs = 0;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  <span class="keywordtype">unsigned</span> largestStruct = 0;</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> nodes;</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">DCHGraph::const_iterator</a> it = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  {</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  nodes.insert(it->first);</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  }</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> </div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> : nodes)</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  {</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  <span class="keywordflow">if</span> (*nodes.begin() != id)</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  {</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << line;</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  }</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> </div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> </div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="keywordtype">id</span> << <span class="stringliteral">": "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(node-><a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()) << <span class="stringliteral">" ["</span> << node-><a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>() << <span class="stringliteral">"]"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  <span class="keywordflow">if</span> (node-><a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>() != <span class="keyword">nullptr</span></div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  && (node-><a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()->getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  || node-><a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()->getTag() == dwarf::DW_TAG_structure_type))</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  {</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  ++numStructs;</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <span class="keywordtype">unsigned</span> numFields = <a class="code" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">getFieldTypes</a>(node-><a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()).size();</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  largestStruct = numFields > largestStruct ? numFields : largestStruct;</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  }</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> </div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  currIndent += singleIndent;</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"Virtual functions\n"</span>;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>  currIndent += singleIndent;</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  <span class="keyword">const</span> std::vector<std::vector<const Function *>> &vfnVectors = node-><a class="code" href="classSVF_1_1DCHNode.html#a0669b995c4fe72f206154f5cf6889fe8">getVfnVectors</a>();</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < vfnVectors.size(); ++i)</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>  {</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"[ vtable #"</span> << i << <span class="stringliteral">" ]\n"</span>;</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  currIndent += singleIndent;</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> j = 0; j < vfnVectors[i].size(); ++j)</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  {</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <span class="keyword">struct </span><a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">cppUtil::demangle</a>(vfnVectors[i][j]->getName().str());</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"["</span> << j << <span class="stringliteral">"] "</span></div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  << dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> << <span class="stringliteral">"::"</span> << dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  }</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> </div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  currIndent -= singleIndent;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  }</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> </div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  <span class="comment">// Nothing was printed.</span></div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  <span class="keywordflow">if</span> (vfnVectors.size() == 0)</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  {</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"(none)\n"</span>;</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  }</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> </div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>  currIndent -= singleIndent;</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> </div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"Bases\n"</span>;</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  currIndent += singleIndent;</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1DCHEdge.html">DCHEdge</a> *edge : node-><a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>())</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  {</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  std::string arrow;</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  <span class="keywordflow">if</span> (edge->getEdgeKind() == <a class="code" href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a9c05805c60fe04033bd9815968059e90">DCHEdge::INHERITANCE</a>)</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  {</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  arrow = <span class="stringliteral">"--inheritance-->"</span>;</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  }</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge->getEdgeKind() == <a class="code" href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a3b49b95b713f585b717810dce5ac6564">DCHEdge::FIRST_FIELD</a>)</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>  {</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  arrow = <span class="stringliteral">"--first-field-->"</span>;</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  }</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge->getEdgeKind() == <a class="code" href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a3e807b4caeb170c5cd1e855ac1a92d77">DCHEdge::INSTANCE</a>)</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>  {</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>  arrow = <span class="stringliteral">"---instance---->"</span>;</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>  }</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge->getEdgeKind() == <a class="code" href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a8b07351616a1798fa34ec3828f485ebb">DCHEdge::STD_DEF</a>)</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>  {</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>  arrow = <span class="stringliteral">"---standard---->"</span>;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>  }</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>  {</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  arrow = <span class="stringliteral">"----unknown---->"</span>;</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  }</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> </div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"[ "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(node-><a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()) << <span class="stringliteral">" ] "</span></div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  << arrow << <span class="stringliteral">" [ "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(edge->getDstNode()->getType()) << <span class="stringliteral">" ]\n"</span>;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  }</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> </div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>  <span class="keywordflow">if</span> (node-><a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().size() == 0)</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>  {</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"(none)\n"</span>;</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>  }</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> </div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  currIndent -= singleIndent;</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> </div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"Typedefs\n"</span>;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> </div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>  currIndent += singleIndent;</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> </div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const DIDerivedType *></a> &typedefs = node-><a class="code" href="classSVF_1_1DCHNode.html#ac77edc44c3c5acc185c27c018837d066">getTypedefs</a>();</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *tdef : typedefs)</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>  {</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  std::string typedefName = <span class="stringliteral">"void"</span>;</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>  <span class="keywordflow">if</span> (tdef != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  {</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  typedefName = tdef->getName().str();</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>  }</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> </div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << typedefName << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  }</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> </div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  <span class="keywordflow">if</span> (typedefs.size() == 0)</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  {</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) << <span class="stringliteral">"(none)\n"</span>;</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  }</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> </div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  currIndent -= singleIndent;</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> </div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>  currIndent -= singleIndent;</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>  }</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> </div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << thickLine;</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> </div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"Other stats\n"</span>;</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << line;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"# Canonical types : "</span> << <a class="code" href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">canonicalTypes</a>.size() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"# structs : "</span> << numStructs << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"Largest struct : "</span> << largestStruct << <span class="stringliteral">" fields\n"</span>;</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << thickLine;</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> </div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flush();</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> }</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph< DCHNode, DCHEdge >::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
|
|
1705
1705
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a2dc488345cc3a5f37079952f638d8c2b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">SVF::DCHGraph::diTypeToStr</a></div><div class="ttdeci">static std::string diTypeToStr(const DIType *)</div><div class="ttdoc">Returns a human-readable version of the DIType. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00958">DCHG.cpp:958</a></div></div>
|
|
1706
1706
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_ae9a0007299178912e2568dc7158d6824"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">SVF::DCHGraph::getFieldTypes</a></div><div class="ttdeci">const std::vector< const DIType * > & getFieldTypes(const DIType *base)</div><div class="ttdoc">Returns a vector of the types of all fields in base. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00327">DCHG.h:327</a></div></div>
|
|
1707
1707
|
<div class="ttc" id="classSVF_1_1DCHEdge_html"><div class="ttname"><a href="classSVF_1_1DCHEdge.html">SVF::DCHEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00030">DCHG.h:30</a></div></div>
|
|
@@ -1717,7 +1717,6 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1717
1717
|
<div class="ttc" id="classSVF_1_1DCHEdge_html_a9ab4cd83d9ee475d3d8445cd91839726a9c05805c60fe04033bd9815968059e90"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a9c05805c60fe04033bd9815968059e90">SVF::DCHEdge::INHERITANCE</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00035">DCHG.h:35</a></div></div>
|
|
1718
1718
|
<div class="ttc" id="namespaceSVF_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="SVFBasicTypes_8h_source.html#l00104">SVFBasicTypes.h:104</a></div></div>
|
|
1719
1719
|
<div class="ttc" id="structSVF_1_1cppUtil_1_1DemangledName_html_a1dd17b240663bc9412adefde82385e02"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">SVF::cppUtil::DemangledName::funcName</a></div><div class="ttdeci">std::string funcName</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00049">CPPUtil.h:49</a></div></div>
|
|
1720
|
-
<div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00128">BasicTypes.h:128</a></div></div>
|
|
1721
1720
|
<div class="ttc" id="classSVF_1_1GenericNode_html_a2d9cd758d6f8c5189d9b90b74f43e009"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">SVF::GenericNode::getOutEdges</a></div><div class="ttdeci">const GEdgeSetTy & getOutEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00182">GenericGraph.h:182</a></div></div>
|
|
1722
1721
|
<div class="ttc" id="structSVF_1_1cppUtil_1_1DemangledName_html_a5cd207bce618521166e6fa235014b297"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">SVF::cppUtil::DemangledName::className</a></div><div class="ttdeci">std::string className</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00048">CPPUtil.h:48</a></div></div>
|
|
1723
1722
|
<div class="ttc" id="classSVF_1_1DCHEdge_html_a9ab4cd83d9ee475d3d8445cd91839726a8b07351616a1798fa34ec3828f485ebb"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a8b07351616a1798fa34ec3828f485ebb">SVF::DCHEdge::STD_DEF</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00038">DCHG.h:38</a></div></div>
|
|
@@ -1725,6 +1724,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1725
1724
|
<div class="ttc" id="classSVF_1_1DCHNode_html"><div class="ttname"><a href="classSVF_1_1DCHNode.html">SVF::DCHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00063">DCHG.h:63</a></div></div>
|
|
1726
1725
|
<div class="ttc" id="classSVF_1_1DCHEdge_html_a9ab4cd83d9ee475d3d8445cd91839726a3b49b95b713f585b717810dce5ac6564"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a9ab4cd83d9ee475d3d8445cd91839726a3b49b95b713f585b717810dce5ac6564">SVF::DCHEdge::FIRST_FIELD</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00037">DCHG.h:37</a></div></div>
|
|
1727
1726
|
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_a1007c092efaeae41002efd91b803a7f6"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">SVF::cppUtil::demangle</a></div><div class="ttdeci">struct DemangledName demangle(const std::string &name)</div></div>
|
|
1727
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
|
|
1728
1728
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph< DCHNode, DCHEdge >::getGNode</a></div><div class="ttdeci">NodeType * getGNode(NodeID id) const</div><div class="ttdoc">Get a node. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00391">GenericGraph.h:391</a></div></div>
|
|
1729
1729
|
<div class="ttc" id="classSVF_1_1DCHNode_html_ac77edc44c3c5acc185c27c018837d066"><div class="ttname"><a href="classSVF_1_1DCHNode.html#ac77edc44c3c5acc185c27c018837d066">SVF::DCHNode::getTypedefs</a></div><div class="ttdeci">const Set< const DIDerivedType * > & getTypedefs(void) const</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00159">DCHG.h:159</a></div></div>
|
|
1730
1730
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a10225f56b21eb7f0870fdc433de3c393"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">SVF::DCHGraph::canonicalTypes</a></div><div class="ttdeci">Set< const DIType * > canonicalTypes</div><div class="ttdoc">Set of all possible canonical types (i.e. values of canonicalTypeMap). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00372">DCHG.h:372</a></div></div>
|
|
@@ -1741,9 +1741,9 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1741
1741
|
<td class="mlabels-left">
|
|
1742
1742
|
<table class="memname">
|
|
1743
1743
|
<tr>
|
|
1744
|
-
<td class="memname">const <a class="el" href="
|
|
1744
|
+
<td class="memname">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * DCHGraph::stripArray </td>
|
|
1745
1745
|
<td>(</td>
|
|
1746
|
-
<td class="paramtype">const <a class="el" href="
|
|
1746
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1747
1747
|
<td class="paramname"><em>t</em></td><td>)</td>
|
|
1748
1748
|
<td></td>
|
|
1749
1749
|
</tr>
|
|
@@ -1758,8 +1758,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1758
1758
|
<p>Returns the DIType beneath all qualifiers and arrays. </p>
|
|
1759
1759
|
|
|
1760
1760
|
<p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00807">807</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
|
|
1761
|
-
<div class="fragment"><div class="line"><a name="l00808"></a><span class="lineno"> 808</span> {</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  t = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t);</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordflow">if</span> (t->getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  {</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keyword">const</span> <a class="code" href="
|
|
1762
|
-
<div class="ttc" id="
|
|
1761
|
+
<div class="fragment"><div class="line"><a name="l00808"></a><span class="lineno"> 808</span> {</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  t = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t);</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordflow">if</span> (t->getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  {</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *at = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>>(t);</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a6c276e661e5e63c1c84387f84c8a62e4">stripArray</a>(at->getBaseType());</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  }</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span> </div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="keywordflow">return</span> t;</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span> }</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a175ed6ad0c9b23d5617f755ab96c76c4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">SVF::DCHGraph::stripQualifiers</a></div><div class="ttdeci">static const DIType * stripQualifiers(const DIType *)</div><div class="ttdoc">Returns the DIType beneath the qualifiers. Does not strip away "DW_TAG_members". </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00754">DCHG.cpp:754</a></div></div>
|
|
1762
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
|
|
1763
1763
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a6c276e661e5e63c1c84387f84c8a62e4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a6c276e661e5e63c1c84387f84c8a62e4">SVF::DCHGraph::stripArray</a></div><div class="ttdeci">static const DIType * stripArray(const DIType *)</div><div class="ttdoc">Returns the DIType beneath all qualifiers and arrays. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00807">DCHG.cpp:807</a></div></div>
|
|
1764
1764
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
1765
1765
|
</div><!-- fragment -->
|
|
@@ -1775,9 +1775,9 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1775
1775
|
<td class="mlabels-left">
|
|
1776
1776
|
<table class="memname">
|
|
1777
1777
|
<tr>
|
|
1778
|
-
<td class="memname">const <a class="el" href="
|
|
1778
|
+
<td class="memname">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * DCHGraph::stripQualifiers </td>
|
|
1779
1779
|
<td>(</td>
|
|
1780
|
-
<td class="paramtype">const <a class="el" href="
|
|
1780
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1781
1781
|
<td class="paramname"><em>t</em></td><td>)</td>
|
|
1782
1782
|
<td></td>
|
|
1783
1783
|
</tr>
|
|
@@ -1792,9 +1792,9 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1792
1792
|
<p>Returns the DIType beneath the qualifiers. Does not strip away "DW_TAG_members". </p>
|
|
1793
1793
|
|
|
1794
1794
|
<p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00754">754</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
|
|
1795
|
-
<div class="fragment"><div class="line"><a name="l00755"></a><span class="lineno"> 755</span> {</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  {</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  <span class="comment">// nullptr means void.</span></div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <span class="keywordflow">if</span> (t == <span class="keyword">nullptr</span></div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  || SVFUtil::isa<DIBasicType>(t)</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  || SVFUtil::isa<DISubroutineType>(t))</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  {</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  }</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span> </div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  <span class="keywordtype">unsigned</span> tag = t->getTag();</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <span class="comment">// Verbose for clarity.</span></div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="keywordflow">if</span> ( tag == dwarf::DW_TAG_const_type</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  || tag == dwarf::DW_TAG_atomic_type</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  || tag == dwarf::DW_TAG_volatile_type</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  || tag == dwarf::DW_TAG_restrict_type</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  || tag == dwarf::DW_TAG_typedef)</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  {</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  <span class="comment">// Qualifier - get underlying type.</span></div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keyword">const</span> <a class="code" href="
|
|
1796
|
-
<div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00128">BasicTypes.h:128</a></div></div>
|
|
1795
|
+
<div class="fragment"><div class="line"><a name="l00755"></a><span class="lineno"> 755</span> {</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  {</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  <span class="comment">// nullptr means void.</span></div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <span class="keywordflow">if</span> (t == <span class="keyword">nullptr</span></div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  || SVFUtil::isa<DIBasicType>(t)</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  || SVFUtil::isa<DISubroutineType>(t))</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  {</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  }</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span> </div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  <span class="keywordtype">unsigned</span> tag = t->getTag();</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <span class="comment">// Verbose for clarity.</span></div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="keywordflow">if</span> ( tag == dwarf::DW_TAG_const_type</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  || tag == dwarf::DW_TAG_atomic_type</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  || tag == dwarf::DW_TAG_volatile_type</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  || tag == dwarf::DW_TAG_restrict_type</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  || tag == dwarf::DW_TAG_typedef)</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  {</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  <span class="comment">// Qualifier - get underlying type.</span></div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *dt = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a>>(t);</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(t && <span class="stringliteral">"DCHG: expected DerivedType"</span>);</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  t = dt->getBaseType();</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  }</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( tag == dwarf::DW_TAG_array_type</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  || tag == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  || tag == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  || tag == dwarf::DW_TAG_union_type</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  || tag == dwarf::DW_TAG_enumeration_type</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  || tag == dwarf::DW_TAG_member</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  || tag == dwarf::DW_TAG_pointer_type</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  || tag == dwarf::DW_TAG_ptr_to_member_type</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  || tag == dwarf::DW_TAG_reference_type</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  || tag == dwarf::DW_TAG_rvalue_reference_type)</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  {</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  <span class="comment">// Hit a non-qualifier.</span></div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  }</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( tag == dwarf::DW_TAG_inheritance</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  || tag == dwarf::DW_TAG_friend)</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  {</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"DCHG: unexpected tag when stripping qualifiers"</span>);</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  }</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  {</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"DCHG: unhandled tag when stripping qualifiers"</span>);</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  }</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  }</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span> </div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="keywordflow">return</span> t;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span> }</div><div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
1797
1796
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
1797
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
|
|
1798
1798
|
</div><!-- fragment -->
|
|
1799
1799
|
</div>
|
|
1800
1800
|
</div>
|
|
@@ -1810,13 +1810,13 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1810
1810
|
<tr>
|
|
1811
1811
|
<td class="memname">bool DCHGraph::teq </td>
|
|
1812
1812
|
<td>(</td>
|
|
1813
|
-
<td class="paramtype">const <a class="el" href="
|
|
1813
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1814
1814
|
<td class="paramname"><em>t1</em>, </td>
|
|
1815
1815
|
</tr>
|
|
1816
1816
|
<tr>
|
|
1817
1817
|
<td class="paramkey"></td>
|
|
1818
1818
|
<td></td>
|
|
1819
|
-
<td class="paramtype">const <a class="el" href="
|
|
1819
|
+
<td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * </td>
|
|
1820
1820
|
<td class="paramname"><em>t2</em> </td>
|
|
1821
1821
|
</tr>
|
|
1822
1822
|
<tr>
|
|
@@ -1834,14 +1834,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1834
1834
|
<p>Returns true if t1 and t2 are equivalent, ignoring qualifiers. For equality... Tags always need to be equal. DIBasicType: shallow pointer equality. DIDerivedType: base types (teq). DICompositeType: shallow pointer equality. DISubroutineType: shallow pointer equality. </p>
|
|
1835
1835
|
|
|
1836
1836
|
<p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00819">819</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
|
|
1837
|
-
<div class="fragment"><div class="line"><a name="l00820"></a><span class="lineno"> 820</span> {</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  t1 = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t1);</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  t2 = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t2);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span> </div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="keywordflow">if</span> (t1 == t2)</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  {</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="comment">// Trivial case. Handles SubRoutineTypes too.</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  }</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span> </div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <span class="keywordflow">if</span> (t1 == <span class="keyword">nullptr</span> || t2 == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  {</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="comment">// Since t1 != t2 and one of them is null, it is</span></div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <span class="comment">// impossible for them to be equal.</span></div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  }</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span> </div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <span class="comment">// Check if we need base type comparisons.</span></div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">if</span> (SVFUtil::isa<DIBasicType>(t1) && SVFUtil::isa<DIBasicType>(t2))</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  {</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *b1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a>>(t1);</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *b2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a>>(t2);</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span> </div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordtype">unsigned</span> enc1 = b1->getEncoding();</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <span class="keywordtype">unsigned</span> enc2 = b2->getEncoding();</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <span class="keywordtype">bool</span> okayEnc = ((enc1 == dwarf::DW_ATE_signed || enc1 == dwarf::DW_ATE_unsigned || enc1 == dwarf::DW_ATE_boolean)</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  && (enc2 == dwarf::DW_ATE_signed || enc2 == dwarf::DW_ATE_unsigned || enc2 == dwarf::DW_ATE_boolean))</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  ||</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  (enc1 == dwarf::DW_ATE_float && enc2 == dwarf::DW_ATE_float)</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  ||</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  ((enc1 == dwarf::DW_ATE_signed_char || enc1 == dwarf::DW_ATE_unsigned_char)</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  &&</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  (enc2 == dwarf::DW_ATE_signed_char || enc2 == dwarf::DW_ATE_unsigned_char));</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span> </div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  <span class="keywordflow">if</span> (!okayEnc) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="comment">// Now we have split integers, floats, and chars, ignoring signedness.</span></div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span> </div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="keywordflow">return</span> t1->getSizeInBits() == t2->getSizeInBits()</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  && t1->getAlignInBits() == t2->getAlignInBits();</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  }</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span> </div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <span class="comment">// Check, do we need to compare base types?</span></div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  <span class="comment">// This makes pointers, references, and arrays equivalent.</span></div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <span class="comment">// Will handle member types.</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="keywordflow">if</span> ((SVFUtil::isa<DIDerivedType>(t1) || t1->getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  && (SVFUtil::isa<DIDerivedType>(t2) || t2->getTag() == dwarf::DW_TAG_array_type))</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  {</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *base1, *base2;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span> </div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="comment">// Set base1.</span></div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *d1 = SVFUtil::dyn_cast<DIDerivedType>(t1))</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  {</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  base1 = d1->getBaseType();</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  }</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  {</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *c1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>>(t1);</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(c1 && <span class="stringliteral">"teq: bad cast for array type"</span>);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  base1 = c1->getBaseType();</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  }</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span> </div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <span class="comment">// Set base2.</span></div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *d2 = SVFUtil::dyn_cast<DIDerivedType>(t2))</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  {</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  base2 = d2->getBaseType();</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  }</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  {</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *c2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>>(t2);</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(c2 && <span class="stringliteral">"teq: bad cast for array type"</span>);</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  base2 = c2->getBaseType();</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  }</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span> </div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  <span class="comment">// For ptr-to-member, there is some imprecision (but soundness) in</span></div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  <span class="comment">// that we don't check the class type.</span></div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">teq</a>(base1, base2);</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  }</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span> </div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  <span class="keywordflow">if</span> (SVFUtil::isa<DICompositeType>(t1) && SVFUtil::isa<DICompositeType>(t2))</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  {</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *ct1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>>(t1);</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *ct2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>>(t2);</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span> </div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <span class="keywordflow">if</span> (ct1->getTag() != ct2->getTag()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span> </div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  <span class="comment">// Treat all enums the same.</span></div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="keywordflow">if</span> (ct1->getTag() == dwarf::DW_TAG_enumeration_type)</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  {</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  }</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span> </div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  <span class="comment">// C++ classes? Check mangled name.</span></div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="keywordflow">if</span> (ct1->getTag() == dwarf::DW_TAG_class_type)</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  {</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  <span class="keywordflow">return</span> ct1->getIdentifier() == ct2->getIdentifier();</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  }</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span> </div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <span class="comment">// Either union or struct, simply test all fields are equal.</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <span class="comment">// Seems like it is enough to check it was defined in the same place.</span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <span class="comment">// The elements sometimes differ but are referring to the same fields.</span></div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  <span class="keywordflow">return</span> ct1->getName() == ct2->getName()</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  && ct1->getFile() == ct2->getFile()</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  && ct1->getLine() == ct2->getLine();</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  }</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span> </div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  <span class="comment">// They were not equal base types (discounting signedness), nor were they</span></div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  <span class="comment">// "equal" pointers/references/arrays, nor were they the structurally equivalent,</span></div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  <span class="comment">// nor were they completely equal.</span></div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span> }</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a175ed6ad0c9b23d5617f755ab96c76c4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">SVF::DCHGraph::stripQualifiers</a></div><div class="ttdeci">static const DIType * stripQualifiers(const DIType *)</div><div class="ttdoc">Returns the DIType beneath the qualifiers. Does not strip away "DW_TAG_members". </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00754">DCHG.cpp:754</a></div></div>
|
|
1837
|
+
<div class="fragment"><div class="line"><a name="l00820"></a><span class="lineno"> 820</span> {</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  t1 = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t1);</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  t2 = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t2);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span> </div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="keywordflow">if</span> (t1 == t2)</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  {</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="comment">// Trivial case. Handles SubRoutineTypes too.</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  }</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span> </div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <span class="keywordflow">if</span> (t1 == <span class="keyword">nullptr</span> || t2 == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  {</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="comment">// Since t1 != t2 and one of them is null, it is</span></div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <span class="comment">// impossible for them to be equal.</span></div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  }</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span> </div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <span class="comment">// Check if we need base type comparisons.</span></div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">if</span> (SVFUtil::isa<DIBasicType>(t1) && SVFUtil::isa<DIBasicType>(t2))</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  {</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *b1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a>>(t1);</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *b2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a>>(t2);</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span> </div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordtype">unsigned</span> enc1 = b1->getEncoding();</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <span class="keywordtype">unsigned</span> enc2 = b2->getEncoding();</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <span class="keywordtype">bool</span> okayEnc = ((enc1 == dwarf::DW_ATE_signed || enc1 == dwarf::DW_ATE_unsigned || enc1 == dwarf::DW_ATE_boolean)</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  && (enc2 == dwarf::DW_ATE_signed || enc2 == dwarf::DW_ATE_unsigned || enc2 == dwarf::DW_ATE_boolean))</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  ||</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  (enc1 == dwarf::DW_ATE_float && enc2 == dwarf::DW_ATE_float)</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  ||</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  ((enc1 == dwarf::DW_ATE_signed_char || enc1 == dwarf::DW_ATE_unsigned_char)</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  &&</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  (enc2 == dwarf::DW_ATE_signed_char || enc2 == dwarf::DW_ATE_unsigned_char));</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span> </div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  <span class="keywordflow">if</span> (!okayEnc) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="comment">// Now we have split integers, floats, and chars, ignoring signedness.</span></div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span> </div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="keywordflow">return</span> t1->getSizeInBits() == t2->getSizeInBits()</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  && t1->getAlignInBits() == t2->getAlignInBits();</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  }</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span> </div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <span class="comment">// Check, do we need to compare base types?</span></div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  <span class="comment">// This makes pointers, references, and arrays equivalent.</span></div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <span class="comment">// Will handle member types.</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="keywordflow">if</span> ((SVFUtil::isa<DIDerivedType>(t1) || t1->getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  && (SVFUtil::isa<DIDerivedType>(t2) || t2->getTag() == dwarf::DW_TAG_array_type))</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  {</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *base1, *base2;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span> </div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="comment">// Set base1.</span></div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *d1 = SVFUtil::dyn_cast<DIDerivedType>(t1))</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  {</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  base1 = d1->getBaseType();</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  }</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  {</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *c1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>>(t1);</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(c1 && <span class="stringliteral">"teq: bad cast for array type"</span>);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  base1 = c1->getBaseType();</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  }</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span> </div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <span class="comment">// Set base2.</span></div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *d2 = SVFUtil::dyn_cast<DIDerivedType>(t2))</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  {</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  base2 = d2->getBaseType();</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  }</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  {</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *c2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>>(t2);</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(c2 && <span class="stringliteral">"teq: bad cast for array type"</span>);</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  base2 = c2->getBaseType();</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  }</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span> </div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  <span class="comment">// For ptr-to-member, there is some imprecision (but soundness) in</span></div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  <span class="comment">// that we don't check the class type.</span></div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">teq</a>(base1, base2);</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  }</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span> </div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  <span class="keywordflow">if</span> (SVFUtil::isa<DICompositeType>(t1) && SVFUtil::isa<DICompositeType>(t2))</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  {</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *ct1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>>(t1);</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *ct2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>>(t2);</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span> </div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <span class="keywordflow">if</span> (ct1->getTag() != ct2->getTag()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span> </div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  <span class="comment">// Treat all enums the same.</span></div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="keywordflow">if</span> (ct1->getTag() == dwarf::DW_TAG_enumeration_type)</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  {</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  }</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span> </div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  <span class="comment">// C++ classes? Check mangled name.</span></div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="keywordflow">if</span> (ct1->getTag() == dwarf::DW_TAG_class_type)</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  {</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  <span class="keywordflow">return</span> ct1->getIdentifier() == ct2->getIdentifier();</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  }</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span> </div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <span class="comment">// Either union or struct, simply test all fields are equal.</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <span class="comment">// Seems like it is enough to check it was defined in the same place.</span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <span class="comment">// The elements sometimes differ but are referring to the same fields.</span></div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  <span class="keywordflow">return</span> ct1->getName() == ct2->getName()</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  && ct1->getFile() == ct2->getFile()</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  && ct1->getLine() == ct2->getLine();</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  }</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span> </div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  <span class="comment">// They were not equal base types (discounting signedness), nor were they</span></div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  <span class="comment">// "equal" pointers/references/arrays, nor were they the structurally equivalent,</span></div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  <span class="comment">// nor were they completely equal.</span></div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span> }</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a175ed6ad0c9b23d5617f755ab96c76c4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">SVF::DCHGraph::stripQualifiers</a></div><div class="ttdeci">static const DIType * stripQualifiers(const DIType *)</div><div class="ttdoc">Returns the DIType beneath the qualifiers. Does not strip away "DW_TAG_members". </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00754">DCHG.cpp:754</a></div></div>
|
|
1838
1838
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
1839
|
-
<div class="ttc" id="
|
|
1840
|
-
<div class="ttc" id="
|
|
1839
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
|
|
1840
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
|
|
1841
1841
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_acb76ab20da1bfbec00f63d08e48cbddd"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">SVF::DCHGraph::teq</a></div><div class="ttdeci">static bool teq(const DIType *t1, const DIType *t2)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00819">DCHG.cpp:819</a></div></div>
|
|
1842
|
-
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a5f7968b31d2b29b589360067cf48e625"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a></div><div class="ttdeci">llvm::DIBasicType DIBasicType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
1842
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a5f7968b31d2b29b589360067cf48e625"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a></div><div class="ttdeci">llvm::DIBasicType DIBasicType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
|
|
1843
1843
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
1844
|
-
<div class="ttc" id="
|
|
1844
|
+
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
|
|
1845
1845
|
</div><!-- fragment -->
|
|
1846
1846
|
</div>
|
|
1847
1847
|
</div>
|
|
@@ -1856,7 +1856,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1856
1856
|
<td class="mlabels-left">
|
|
1857
1857
|
<table class="memname">
|
|
1858
1858
|
<tr>
|
|
1859
|
-
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><const <a class="el" href="
|
|
1859
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *> SVF::DCHGraph::canonicalTypeMap</td>
|
|
1860
1860
|
</tr>
|
|
1861
1861
|
</table>
|
|
1862
1862
|
</td>
|
|
@@ -1882,7 +1882,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1882
1882
|
<td class="mlabels-left">
|
|
1883
1883
|
<table class="memname">
|
|
1884
1884
|
<tr>
|
|
1885
|
-
<td class="memname"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a><const <a class="el" href="
|
|
1885
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a><const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *> SVF::DCHGraph::canonicalTypes</td>
|
|
1886
1886
|
</tr>
|
|
1887
1887
|
</table>
|
|
1888
1888
|
</td>
|
|
@@ -1908,7 +1908,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1908
1908
|
<td class="mlabels-left">
|
|
1909
1909
|
<table class="memname">
|
|
1910
1910
|
<tr>
|
|
1911
|
-
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><const <a class="el" href="
|
|
1911
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>> SVF::DCHGraph::chaFFMap</td>
|
|
1912
1912
|
</tr>
|
|
1913
1913
|
</table>
|
|
1914
1914
|
</td>
|
|
@@ -1934,7 +1934,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1934
1934
|
<td class="mlabels-left">
|
|
1935
1935
|
<table class="memname">
|
|
1936
1936
|
<tr>
|
|
1937
|
-
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><const <a class="el" href="
|
|
1937
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>> SVF::DCHGraph::chaMap</td>
|
|
1938
1938
|
</tr>
|
|
1939
1939
|
</table>
|
|
1940
1940
|
</td>
|
|
@@ -1960,7 +1960,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1960
1960
|
<td class="mlabels-left">
|
|
1961
1961
|
<table class="memname">
|
|
1962
1962
|
<tr>
|
|
1963
|
-
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><const <a class="el" href="
|
|
1963
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a><const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *> > SVF::DCHGraph::containingAggs</td>
|
|
1964
1964
|
</tr>
|
|
1965
1965
|
</table>
|
|
1966
1966
|
</td>
|
|
@@ -2012,7 +2012,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2012
2012
|
<td class="mlabels-left">
|
|
2013
2013
|
<table class="memname">
|
|
2014
2014
|
<tr>
|
|
2015
|
-
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><const <a class="el" href="
|
|
2015
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a> *> SVF::DCHGraph::diTypeToNodeMap</td>
|
|
2016
2016
|
</tr>
|
|
2017
2017
|
</table>
|
|
2018
2018
|
</td>
|
|
@@ -2064,7 +2064,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2064
2064
|
<td class="mlabels-left">
|
|
2065
2065
|
<table class="memname">
|
|
2066
2066
|
<tr>
|
|
2067
|
-
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><const <a class="el" href="
|
|
2067
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, std::vector<const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *> > SVF::DCHGraph::fieldTypes</td>
|
|
2068
2068
|
</tr>
|
|
2069
2069
|
</table>
|
|
2070
2070
|
</td>
|
|
@@ -2142,7 +2142,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2142
2142
|
<td class="mlabels-left">
|
|
2143
2143
|
<table class="memname">
|
|
2144
2144
|
<tr>
|
|
2145
|
-
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><const <a class="el" href="
|
|
2145
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a>> SVF::DCHGraph::vtblCHAMap</td>
|
|
2146
2146
|
</tr>
|
|
2147
2147
|
</table>
|
|
2148
2148
|
</td>
|
|
@@ -2168,7 +2168,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2168
2168
|
<td class="mlabels-left">
|
|
2169
2169
|
<table class="memname">
|
|
2170
2170
|
<tr>
|
|
2171
|
-
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><const <a class="el" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *, const <a class="el" href="
|
|
2171
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><const <a class="el" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *> SVF::DCHGraph::vtblToTypeMap</td>
|
|
2172
2172
|
</tr>
|
|
2173
2173
|
</table>
|
|
2174
2174
|
</td>
|