svf-tools 1.0.317 → 1.0.321
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/AndersenStat_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/Andersen_8cpp.html +1 -1
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/Andersen_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp.html +138 -0
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +178 -0
- package/SVF-doxygen/html/html/CHGBuilder_8h.html +95 -0
- package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +109 -0
- package/SVF-doxygen/html/html/CHG_8cpp.html +10 -64
- package/SVF-doxygen/html/html/CHG_8cpp_source.html +31 -108
- package/SVF-doxygen/html/html/CHG_8h.html +9 -3
- package/SVF-doxygen/html/html/CHG_8h_source.html +82 -76
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +37 -33
- package/SVF-doxygen/html/html/ConsG_8h_source.html +32 -32
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/DCHG_8h.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8h_source.html +8 -8
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +12 -12
- package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ExternalPAG_8cpp.html +1 -1
- package/SVF-doxygen/html/html/ExternalPAG_8cpp_source.html +22 -22
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +4 -4
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +3 -3
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +16 -16
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +6 -6
- package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/GenericGraph_8h_source.html +3 -3
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/GraphPrinter_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +20 -21
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +37 -40
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +18 -18
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/OfflineConsG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +5 -5
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp.html +1 -2
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +30 -33
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +31 -31
- package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +48 -48
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +36 -36
- package/SVF-doxygen/html/html/SVFG_8h_source.html +25 -25
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp.html +0 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +5 -6
- package/SVF-doxygen/html/html/SVFIRBuilder_8h.html +1 -7
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +90 -85
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +70 -62
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +168 -182
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +39 -23
- package/SVF-doxygen/html/html/SVFStatements_8h.html +6 -0
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +146 -94
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +1 -1
- 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/TCT_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TCT_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp.html +1 -1
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/VFGEdge_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VFGNode_8h.html +2 -0
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +143 -126
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +136 -129
- package/SVF-doxygen/html/html/VFG_8h_source.html +144 -133
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/annotated.html +265 -261
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode-members.html +75 -74
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode-members.html +75 -74
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode-members.html +73 -72
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +31 -30
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode-members.html +75 -74
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +35 -34
- package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1AddrPE-members.html +42 -39
- package/SVF-doxygen/html/html/classSVF_1_1AddrPE.html +27 -22
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode-members.html +77 -76
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +23 -22
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode-members.html +69 -68
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +30 -29
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE-members.html +49 -28
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +295 -34
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode-members.html +76 -75
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +12 -11
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +70 -22
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +633 -89
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode-members.html +164 -0
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +694 -0
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CHEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHEdge.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder-members.html +100 -0
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +777 -0
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph-members.html +31 -46
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +103 -651
- package/SVF-doxygen/html/html/classSVF_1_1CHNode.html +54 -54
- package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +48 -45
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +33 -28
- package/SVF-doxygen/html/html/classSVF_1_1CmpPE-members.html +49 -28
- package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +295 -34
- package/SVF-doxygen/html/html/classSVF_1_1CmpPE.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode-members.html +79 -78
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +13 -12
- package/SVF-doxygen/html/html/classSVF_1_1CommonCHGraph.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +90 -86
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1CopyCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CopyCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CopyPE-members.html +45 -42
- package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +27 -22
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode-members.html +80 -79
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +11 -10
- package/SVF-doxygen/html/html/classSVF_1_1DCHEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode-members.html +72 -71
- package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1ExternalPAG.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode-members.html +76 -75
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode-members.html +76 -75
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode-members.html +76 -75
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +38 -37
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode-members.html +79 -78
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +38 -37
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1GenericEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +8 -7
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1GepPE-members.html +45 -42
- package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +22 -17
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode-members.html +80 -79
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +23 -22
- package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph-members.html +36 -37
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +149 -163
- package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode-members.html +88 -87
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode-members.html +86 -85
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +46 -45
- package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode-members.html +85 -84
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode-members.html +84 -83
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +33 -32
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1LoadCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LoadCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LoadPE-members.html +45 -42
- package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +27 -22
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode-members.html +80 -79
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +11 -10
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode-members.html +70 -69
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode-members.html +81 -80
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt-members.html +143 -0
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +669 -0
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepPE-members.html +47 -44
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepPE.html +34 -29
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode-members.html +66 -65
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +37 -36
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +17 -16
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode-members.html +77 -76
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +44 -43
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1PhiPE-members.html +153 -0
- package/SVF-doxygen/html/html/classSVF_1_1PhiPE.html +717 -0
- package/SVF-doxygen/html/html/classSVF_1_1PhiPE.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +77 -79
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +48 -45
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +33 -28
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +90 -86
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +81 -71
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +105 -101
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +149 -138
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +106 -119
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +621 -1090
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +14 -12
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +401 -288
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt-members.html +41 -35
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +174 -37
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode-members.html +76 -75
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +14 -13
- package/SVF-doxygen/html/html/classSVF_1_1StoreCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1StorePE-members.html +45 -42
- package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +27 -22
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode-members.html +80 -79
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +11 -10
- package/SVF-doxygen/html/html/classSVF_1_1TCTEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TCTEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +49 -46
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +22 -17
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +49 -46
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +22 -17
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE-members.html +56 -43
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +329 -30
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode-members.html +34 -32
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +63 -30
- package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +52 -48
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +515 -441
- package/SVF-doxygen/html/html/classSVF_1_1VFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode-members.html +65 -64
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +22 -18
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepPE-members.html +47 -44
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepPE.html +28 -23
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +8 -8
- package/SVF-doxygen/html/html/classes.html +95 -94
- package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/dir_1870ebf480d659cc38d2dd7ac3aa8993.html +2 -2
- package/SVF-doxygen/html/html/dir_5840dc76920ee0f379cd88b55fa041fd.html +1 -1
- package/SVF-doxygen/html/html/dir_770a542efe75a1b68c109cb4e4290224.html +1 -3
- package/SVF-doxygen/html/html/dir_fa02919a30fec2d2c2d591b4d920d648.html +2 -2
- package/SVF-doxygen/html/html/files.html +18 -19
- package/SVF-doxygen/html/html/functions_0x7e.html +0 -3
- package/SVF-doxygen/html/html/functions_a.html +35 -36
- package/SVF-doxygen/html/html/functions_b.html +24 -17
- package/SVF-doxygen/html/html/functions_c.html +44 -43
- package/SVF-doxygen/html/html/functions_d.html +0 -3
- package/SVF-doxygen/html/html/functions_e.html +7 -9
- package/SVF-doxygen/html/html/functions_eval_b.html +4 -0
- package/SVF-doxygen/html/html/functions_eval_p.html +3 -0
- package/SVF-doxygen/html/html/functions_f.html +6 -15
- package/SVF-doxygen/html/html/functions_func.html +40 -38
- package/SVF-doxygen/html/html/functions_func_0x7e.html +0 -3
- package/SVF-doxygen/html/html/functions_func_b.html +14 -8
- package/SVF-doxygen/html/html/functions_func_c.html +32 -28
- package/SVF-doxygen/html/html/functions_func_d.html +0 -3
- package/SVF-doxygen/html/html/functions_func_e.html +0 -3
- package/SVF-doxygen/html/html/functions_func_g.html +92 -60
- package/SVF-doxygen/html/html/functions_func_h.html +3 -9
- package/SVF-doxygen/html/html/functions_func_i.html +12 -16
- package/SVF-doxygen/html/html/functions_func_m.html +6 -0
- package/SVF-doxygen/html/html/functions_func_o.html +11 -4
- package/SVF-doxygen/html/html/functions_func_p.html +6 -6
- package/SVF-doxygen/html/html/functions_func_r.html +3 -4
- package/SVF-doxygen/html/html/functions_func_s.html +6 -9
- package/SVF-doxygen/html/html/functions_func_t.html +14 -11
- package/SVF-doxygen/html/html/functions_g.html +91 -59
- package/SVF-doxygen/html/html/functions_h.html +2 -11
- package/SVF-doxygen/html/html/functions_i.html +12 -16
- package/SVF-doxygen/html/html/functions_l.html +6 -6
- package/SVF-doxygen/html/html/functions_m.html +9 -0
- package/SVF-doxygen/html/html/functions_n.html +6 -6
- package/SVF-doxygen/html/html/functions_o.html +31 -16
- package/SVF-doxygen/html/html/functions_p.html +23 -18
- package/SVF-doxygen/html/html/functions_r.html +4 -8
- package/SVF-doxygen/html/html/functions_rela.html +3 -0
- package/SVF-doxygen/html/html/functions_s.html +14 -16
- package/SVF-doxygen/html/html/functions_t.html +18 -15
- package/SVF-doxygen/html/html/functions_type_b.html +0 -6
- package/SVF-doxygen/html/html/functions_type_c.html +2 -7
- package/SVF-doxygen/html/html/functions_type_o.html +3 -0
- package/SVF-doxygen/html/html/functions_type_p.html +4 -1
- package/SVF-doxygen/html/html/functions_type_u.html +0 -6
- package/SVF-doxygen/html/html/functions_type_v.html +3 -0
- package/SVF-doxygen/html/html/functions_type_w.html +1 -0
- package/SVF-doxygen/html/html/functions_u.html +4 -13
- package/SVF-doxygen/html/html/functions_v.html +8 -5
- package/SVF-doxygen/html/html/functions_vars_a.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_b.html +6 -3
- package/SVF-doxygen/html/html/functions_vars_c.html +5 -4
- package/SVF-doxygen/html/html/functions_vars_e.html +1 -2
- package/SVF-doxygen/html/html/functions_vars_f.html +0 -9
- package/SVF-doxygen/html/html/functions_vars_h.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_m.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_o.html +8 -3
- package/SVF-doxygen/html/html/functions_vars_p.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_r.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_s.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_u.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_v.html +3 -3
- package/SVF-doxygen/html/html/functions_w.html +9 -4
- package/SVF-doxygen/html/html/globals_d.html +0 -4
- package/SVF-doxygen/html/html/globals_e.html +6 -9
- package/SVF-doxygen/html/html/globals_func_d.html +0 -3
- package/SVF-doxygen/html/html/globals_func_e.html +6 -9
- package/SVF-doxygen/html/html/globals_func_g.html +2 -5
- package/SVF-doxygen/html/html/globals_g.html +0 -3
- package/SVF-doxygen/html/html/globals_o.html +0 -9
- package/SVF-doxygen/html/html/globals_p.html +1 -1
- package/SVF-doxygen/html/html/globals_r.html +3 -3
- package/SVF-doxygen/html/html/globals_s.html +3 -3
- package/SVF-doxygen/html/html/globals_vars.html +2 -5
- package/SVF-doxygen/html/html/globals_z.html +1 -1
- package/SVF-doxygen/html/html/hierarchy.html +105 -101
- package/SVF-doxygen/html/html/menudata.js +0 -1
- package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/namespaceSVF.html +27 -37
- package/SVF-doxygen/html/html/namespacemembers_p.html +0 -3
- package/SVF-doxygen/html/html/namespacemembers_type_p.html +0 -3
- package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/search/all_1.js +20 -21
- package/SVF-doxygen/html/html/search/all_10.js +11 -10
- package/SVF-doxygen/html/html/search/all_12.js +6 -7
- package/SVF-doxygen/html/html/search/all_13.js +13 -13
- package/SVF-doxygen/html/html/search/all_14.js +3 -3
- package/SVF-doxygen/html/html/search/all_15.js +2 -4
- package/SVF-doxygen/html/html/search/all_16.js +2 -2
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_1a.js +1 -1
- package/SVF-doxygen/html/html/search/all_1b.js +0 -1
- package/SVF-doxygen/html/html/search/all_2.js +13 -10
- package/SVF-doxygen/html/html/search/all_3.js +15 -15
- package/SVF-doxygen/html/html/search/all_4.js +2 -4
- package/SVF-doxygen/html/html/search/all_5.js +3 -6
- package/SVF-doxygen/html/html/search/all_6.js +1 -4
- package/SVF-doxygen/html/html/search/all_7.js +34 -34
- package/SVF-doxygen/html/html/search/all_8.js +2 -5
- package/SVF-doxygen/html/html/search/all_9.js +4 -5
- package/SVF-doxygen/html/html/search/all_b.js +1 -1
- package/SVF-doxygen/html/html/search/all_c.js +3 -3
- package/SVF-doxygen/html/html/search/all_d.js +6 -3
- package/SVF-doxygen/html/html/search/all_e.js +6 -6
- package/SVF-doxygen/html/html/search/all_f.js +7 -8
- package/SVF-doxygen/html/html/search/classes_1.js +2 -0
- package/SVF-doxygen/html/html/search/classes_2.js +1 -0
- package/SVF-doxygen/html/html/search/classes_4.js +1 -2
- package/SVF-doxygen/html/html/search/classes_a.js +1 -0
- package/SVF-doxygen/html/html/search/classes_d.js +1 -0
- package/SVF-doxygen/html/html/search/enumvalues_1.js +1 -0
- package/SVF-doxygen/html/html/search/enumvalues_d.js +1 -0
- package/SVF-doxygen/html/html/search/files_2.js +2 -1
- package/SVF-doxygen/html/html/search/files_4.js +1 -3
- package/SVF-doxygen/html/html/search/functions_0.js +20 -20
- package/SVF-doxygen/html/html/search/functions_1.js +10 -8
- package/SVF-doxygen/html/html/search/functions_10.js +2 -3
- package/SVF-doxygen/html/html/search/functions_11.js +1 -1
- package/SVF-doxygen/html/html/search/functions_12.js +1 -1
- package/SVF-doxygen/html/html/search/functions_13.js +1 -1
- package/SVF-doxygen/html/html/search/functions_16.js +0 -1
- package/SVF-doxygen/html/html/search/functions_2.js +8 -8
- package/SVF-doxygen/html/html/search/functions_3.js +2 -4
- package/SVF-doxygen/html/html/search/functions_4.js +0 -2
- package/SVF-doxygen/html/html/search/functions_6.js +34 -34
- package/SVF-doxygen/html/html/search/functions_7.js +2 -4
- package/SVF-doxygen/html/html/search/functions_8.js +3 -4
- package/SVF-doxygen/html/html/search/functions_b.js +2 -0
- package/SVF-doxygen/html/html/search/functions_d.js +4 -6
- package/SVF-doxygen/html/html/search/functions_e.js +1 -1
- package/SVF-doxygen/html/html/search/functions_f.js +2 -2
- package/SVF-doxygen/html/html/search/related_0.js +1 -2
- package/SVF-doxygen/html/html/search/related_1.js +2 -1
- package/SVF-doxygen/html/html/search/related_2.js +1 -1
- package/SVF-doxygen/html/html/search/related_3.js +1 -2
- package/SVF-doxygen/html/html/search/related_4.js +2 -1
- package/SVF-doxygen/html/html/search/related_5.js +1 -4
- package/SVF-doxygen/html/html/search/related_6.js +4 -1
- package/SVF-doxygen/html/html/search/related_7.js +1 -5
- package/SVF-doxygen/html/html/search/related_8.js +5 -2
- package/SVF-doxygen/html/html/search/related_9.js +2 -1
- package/SVF-doxygen/html/html/search/related_a.html +26 -0
- package/SVF-doxygen/html/html/search/related_a.js +4 -0
- package/SVF-doxygen/html/html/search/searchdata.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_1.js +0 -2
- package/SVF-doxygen/html/html/search/typedefs_13.js +0 -2
- package/SVF-doxygen/html/html/search/typedefs_14.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_15.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_2.js +1 -3
- package/SVF-doxygen/html/html/search/typedefs_d.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_e.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_f.js +2 -2
- package/SVF-doxygen/html/html/search/variables_1.js +0 -1
- package/SVF-doxygen/html/html/search/variables_10.js +2 -1
- package/SVF-doxygen/html/html/search/variables_12.js +0 -1
- package/SVF-doxygen/html/html/search/variables_13.js +2 -1
- package/SVF-doxygen/html/html/search/variables_14.js +1 -1
- package/SVF-doxygen/html/html/search/variables_15.js +1 -2
- package/SVF-doxygen/html/html/search/variables_16.js +1 -1
- package/SVF-doxygen/html/html/search/variables_1a.js +1 -1
- package/SVF-doxygen/html/html/search/variables_2.js +2 -1
- package/SVF-doxygen/html/html/search/variables_3.js +2 -2
- package/SVF-doxygen/html/html/search/variables_4.js +0 -1
- package/SVF-doxygen/html/html/search/variables_5.js +1 -1
- package/SVF-doxygen/html/html/search/variables_6.js +1 -4
- package/SVF-doxygen/html/html/search/variables_8.js +0 -1
- package/SVF-doxygen/html/html/search/variables_b.js +1 -1
- package/SVF-doxygen/html/html/search/variables_d.js +2 -1
- package/SVF-doxygen/html/html/search/variables_e.js +1 -1
- package/SVF-doxygen/html/html/search/variables_f.js +2 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CHGraph_01_5_01_4.html +14 -14
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +16 -16
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +18 -18
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +11 -11
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +29 -29
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CHNode_01_5_01_4_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1SVFVar_01_5_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1VFGNode_01_5_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html +3 -3
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CHNode_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1IRGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1SVFVar_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1VFGNode_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1VFG_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +5 -6
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
- package/include/{SVF-FE → Graphs}/CHG.h +37 -20
- package/include/Graphs/GenericGraph.h +1 -1
- package/include/Graphs/IRGraph.h +6 -15
- package/include/Graphs/SVFGOPT.h +3 -2
- package/include/Graphs/VFG.h +42 -41
- package/include/Graphs/VFGNode.h +60 -7
- package/include/MemoryModel/SVFIR.h +93 -159
- package/include/MemoryModel/SVFStatements.h +253 -21
- package/include/SVF-FE/CHGBuilder.h +69 -0
- package/include/SVF-FE/DCHG.h +1 -1
- package/include/SVF-FE/SVFIRBuilder.h +21 -8
- package/lib/Graphs/CHG.cpp +280 -0
- package/lib/Graphs/ConsG.cpp +9 -0
- package/lib/Graphs/IRGraph.cpp +23 -8
- package/lib/Graphs/VFG.cpp +45 -19
- package/lib/MSSA/SVFGBuilder.cpp +3 -2
- package/lib/MemoryModel/PAGBuilderFromFile.cpp +9 -3
- package/lib/MemoryModel/PointerAnalysis.cpp +3 -5
- package/lib/MemoryModel/SVFIR.cpp +68 -12
- package/lib/MemoryModel/SVFStatements.cpp +65 -4
- package/lib/SVF-FE/{CHG.cpp → CHGBuilder.cpp} +82 -324
- package/lib/SVF-FE/SVFIRBuilder.cpp +58 -57
- package/lib/WPA/Andersen.cpp +1 -1
- package/lib/WPA/TypeAnalysis.cpp +1 -1
- package/package.json +1 -1
- package/tools/Example/svf-ex.cpp +1 -1
- package/include/Graphs/ExternalPAG.h +0 -147
- package/include/SVF-FE/CommonCHG.h +0 -49
- package/lib/Graphs/ExternalPAG.cpp +0 -623
|
@@ -0,0 +1,777 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
3
|
+
<head>
|
|
4
|
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
6
|
+
<meta name="generator" content="Doxygen 1.8.13"/>
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
8
|
+
<title>Static Value-Flow Analysis: SVF::CHGBuilder Class Reference</title>
|
|
9
|
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
10
|
+
<script type="text/javascript" src="jquery.js"></script>
|
|
11
|
+
<script type="text/javascript" src="dynsections.js"></script>
|
|
12
|
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
13
|
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
14
|
+
<script type="text/javascript" src="search/search.js"></script>
|
|
15
|
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
19
|
+
<div id="titlearea">
|
|
20
|
+
<table cellspacing="0" cellpadding="0">
|
|
21
|
+
<tbody>
|
|
22
|
+
<tr style="height: 56px;">
|
|
23
|
+
<td id="projectalign" style="padding-left: 0.5em;">
|
|
24
|
+
<div id="projectname">Static Value-Flow Analysis
|
|
25
|
+
</div>
|
|
26
|
+
</td>
|
|
27
|
+
</tr>
|
|
28
|
+
</tbody>
|
|
29
|
+
</table>
|
|
30
|
+
</div>
|
|
31
|
+
<!-- end header part -->
|
|
32
|
+
<!-- Generated by Doxygen 1.8.13 -->
|
|
33
|
+
<script type="text/javascript">
|
|
34
|
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
35
|
+
</script>
|
|
36
|
+
<script type="text/javascript" src="menudata.js"></script>
|
|
37
|
+
<script type="text/javascript" src="menu.js"></script>
|
|
38
|
+
<script type="text/javascript">
|
|
39
|
+
$(function() {
|
|
40
|
+
initMenu('',true,false,'search.php','Search');
|
|
41
|
+
$(document).ready(function() { init_search(); });
|
|
42
|
+
});
|
|
43
|
+
</script>
|
|
44
|
+
<div id="main-nav"></div>
|
|
45
|
+
<!-- window showing the filter options -->
|
|
46
|
+
<div id="MSearchSelectWindow"
|
|
47
|
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
48
|
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
49
|
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<!-- iframe showing the search results (closed by default) -->
|
|
53
|
+
<div id="MSearchResultsWindow">
|
|
54
|
+
<iframe src="javascript:void(0)" frameborder="0"
|
|
55
|
+
name="MSearchResults" id="MSearchResults">
|
|
56
|
+
</iframe>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<div id="nav-path" class="navpath">
|
|
60
|
+
<ul>
|
|
61
|
+
<li class="navelem"><a class="el" href="namespaceSVF.html">SVF</a></li><li class="navelem"><a class="el" href="classSVF_1_1CHGBuilder.html">CHGBuilder</a></li> </ul>
|
|
62
|
+
</div>
|
|
63
|
+
</div><!-- top -->
|
|
64
|
+
<div class="header">
|
|
65
|
+
<div class="summary">
|
|
66
|
+
<a href="#pub-types">Public Types</a> |
|
|
67
|
+
<a href="#pub-methods">Public Member Functions</a> |
|
|
68
|
+
<a href="#pri-attribs">Private Attributes</a> |
|
|
69
|
+
<a href="classSVF_1_1CHGBuilder-members.html">List of all members</a> </div>
|
|
70
|
+
<div class="headertitle">
|
|
71
|
+
<div class="title">SVF::CHGBuilder Class Reference</div> </div>
|
|
72
|
+
</div><!--header-->
|
|
73
|
+
<div class="contents">
|
|
74
|
+
|
|
75
|
+
<p><code>#include <<a class="el" href="CHGBuilder_8h_source.html">CHGBuilder.h</a>></code></p>
|
|
76
|
+
<table class="memberdecls">
|
|
77
|
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
|
|
78
|
+
Public Types</h2></td></tr>
|
|
79
|
+
<tr class="memitem:adbff217477a779de9024d9a5777413a7"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHGraph::CHNodeSetTy</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#adbff217477a779de9024d9a5777413a7">CHNodeSetTy</a></td></tr>
|
|
80
|
+
<tr class="separator:adbff217477a779de9024d9a5777413a7"><td class="memSeparator" colspan="2"> </td></tr>
|
|
81
|
+
<tr class="memitem:a727a1737e7290536b29b05e03d8b85ac"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classSVF_1_1CHGraph.html#af1b638faf888898cdf168c25e008ab12">CHGraph::WorkList</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a727a1737e7290536b29b05e03d8b85ac">WorkList</a></td></tr>
|
|
82
|
+
<tr class="separator:a727a1737e7290536b29b05e03d8b85ac"><td class="memSeparator" colspan="2"> </td></tr>
|
|
83
|
+
</table><table class="memberdecls">
|
|
84
|
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
|
|
85
|
+
Public Member Functions</h2></td></tr>
|
|
86
|
+
<tr class="memitem:a436e4f8b1e1cad85f0c7df938afe8c78"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a436e4f8b1e1cad85f0c7df938afe8c78">CHGBuilder</a> (<a class="el" href="classSVF_1_1CHGraph.html">CHGraph</a> *c)</td></tr>
|
|
87
|
+
<tr class="separator:a436e4f8b1e1cad85f0c7df938afe8c78"><td class="memSeparator" colspan="2"> </td></tr>
|
|
88
|
+
<tr class="memitem:aa5c672ac426ad4085d64d97f8cb14ace"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#aa5c672ac426ad4085d64d97f8cb14ace">buildCHG</a> ()</td></tr>
|
|
89
|
+
<tr class="separator:aa5c672ac426ad4085d64d97f8cb14ace"><td class="memSeparator" colspan="2"> </td></tr>
|
|
90
|
+
<tr class="memitem:a648e97899c16a5634fc8369aef8a031f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a648e97899c16a5634fc8369aef8a031f">buildCHGNodes</a> (const <a class="el" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *V)</td></tr>
|
|
91
|
+
<tr class="separator:a648e97899c16a5634fc8369aef8a031f"><td class="memSeparator" colspan="2"> </td></tr>
|
|
92
|
+
<tr class="memitem:a51a07b2bd7cccf7c9ab24eb87db17216"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a51a07b2bd7cccf7c9ab24eb87db17216">buildCHGNodes</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *F)</td></tr>
|
|
93
|
+
<tr class="separator:a51a07b2bd7cccf7c9ab24eb87db17216"><td class="memSeparator" colspan="2"> </td></tr>
|
|
94
|
+
<tr class="memitem:a7420a3a4858ebe861aaa47d76f49ab1f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a7420a3a4858ebe861aaa47d76f49ab1f">buildCHGEdges</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *F)</td></tr>
|
|
95
|
+
<tr class="separator:a7420a3a4858ebe861aaa47d76f49ab1f"><td class="memSeparator" colspan="2"> </td></tr>
|
|
96
|
+
<tr class="memitem:ad9f1c51ba6dc279f22aa671f29257a50"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#ad9f1c51ba6dc279f22aa671f29257a50">buildInternalMaps</a> ()</td></tr>
|
|
97
|
+
<tr class="separator:ad9f1c51ba6dc279f22aa671f29257a50"><td class="memSeparator" colspan="2"> </td></tr>
|
|
98
|
+
<tr class="memitem:a443b021eb2b08b92164515750385b058"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a443b021eb2b08b92164515750385b058">readInheritanceMetadataFromModule</a> (const <a class="el" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &M)</td></tr>
|
|
99
|
+
<tr class="separator:a443b021eb2b08b92164515750385b058"><td class="memSeparator" colspan="2"> </td></tr>
|
|
100
|
+
<tr class="memitem:a8e915f257224b1d8e40d0e4c9b5e1df0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1CHNode.html">CHNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a8e915f257224b1d8e40d0e4c9b5e1df0">createNode</a> (const std::string name)</td></tr>
|
|
101
|
+
<tr class="separator:a8e915f257224b1d8e40d0e4c9b5e1df0"><td class="memSeparator" colspan="2"> </td></tr>
|
|
102
|
+
<tr class="memitem:a06db89019c094ad35bea97be1d3b452a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a06db89019c094ad35bea97be1d3b452a">connectInheritEdgeViaCall</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *caller, <a class="el" href="classSVF_1_1CallSite.html">CallSite</a> cs)</td></tr>
|
|
103
|
+
<tr class="separator:a06db89019c094ad35bea97be1d3b452a"><td class="memSeparator" colspan="2"> </td></tr>
|
|
104
|
+
<tr class="memitem:acbdf97de6a24cec8d0ae020e3bfb79e6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#acbdf97de6a24cec8d0ae020e3bfb79e6">connectInheritEdgeViaStore</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *caller, const <a class="el" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> *store)</td></tr>
|
|
105
|
+
<tr class="separator:acbdf97de6a24cec8d0ae020e3bfb79e6"><td class="memSeparator" colspan="2"> </td></tr>
|
|
106
|
+
<tr class="memitem:ae7832c277f0ff86f3ae750aac6063adb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#ae7832c277f0ff86f3ae750aac6063adb">buildClassNameToAncestorsDescendantsMap</a> ()</td></tr>
|
|
107
|
+
<tr class="separator:ae7832c277f0ff86f3ae750aac6063adb"><td class="memSeparator" colspan="2"> </td></tr>
|
|
108
|
+
<tr class="memitem:a444dba7f18bee07a6cad51f88bb63e30"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHGraph::CHNodeSetTy</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a444dba7f18bee07a6cad51f88bb63e30">getInstancesAndDescendants</a> (const std::string className)</td></tr>
|
|
109
|
+
<tr class="separator:a444dba7f18bee07a6cad51f88bb63e30"><td class="memSeparator" colspan="2"> </td></tr>
|
|
110
|
+
<tr class="memitem:a2828eb6b2bd86d6f279967c34da8e7e4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a2828eb6b2bd86d6f279967c34da8e7e4">analyzeVTables</a> (const <a class="el" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &M)</td></tr>
|
|
111
|
+
<tr class="separator:a2828eb6b2bd86d6f279967c34da8e7e4"><td class="memSeparator" colspan="2"> </td></tr>
|
|
112
|
+
<tr class="memitem:aa677ac2c640ee7fc0dab1d4fe508ead8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#aa677ac2c640ee7fc0dab1d4fe508ead8">buildVirtualFunctionToIDMap</a> ()</td></tr>
|
|
113
|
+
<tr class="separator:aa677ac2c640ee7fc0dab1d4fe508ead8"><td class="memSeparator" colspan="2"> </td></tr>
|
|
114
|
+
<tr class="memitem:abab6d95945a43fbe4c73ac12550f5d8c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#abab6d95945a43fbe4c73ac12550f5d8c">buildCSToCHAVtblsAndVfnsMap</a> ()</td></tr>
|
|
115
|
+
<tr class="separator:abab6d95945a43fbe4c73ac12550f5d8c"><td class="memSeparator" colspan="2"> </td></tr>
|
|
116
|
+
<tr class="memitem:adc3e52b70db841cb1566a1fb855256b6"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classSVF_1_1CHGBuilder.html#adbff217477a779de9024d9a5777413a7">CHNodeSetTy</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#adc3e52b70db841cb1566a1fb855256b6">getCSClasses</a> (<a class="el" href="classSVF_1_1CallSite.html">CallSite</a> cs)</td></tr>
|
|
117
|
+
<tr class="separator:adc3e52b70db841cb1566a1fb855256b6"><td class="memSeparator" colspan="2"> </td></tr>
|
|
118
|
+
<tr class="memitem:a77753749b34b00c18d419057b4757a26"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a77753749b34b00c18d419057b4757a26">addFuncToFuncVector</a> (<a class="el" href="classSVF_1_1CHNode.html#aa4af6538c9994ec54a7b82691f846a31">CHNode::FuncVector</a> &v, const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *f)</td></tr>
|
|
119
|
+
<tr class="separator:a77753749b34b00c18d419057b4757a26"><td class="memSeparator" colspan="2"> </td></tr>
|
|
120
|
+
</table><table class="memberdecls">
|
|
121
|
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
|
|
122
|
+
Private Attributes</h2></td></tr>
|
|
123
|
+
<tr class="memitem:ab3471cc9afba5976c7e5fbd07dfb22dc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1CHGraph.html">CHGraph</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a></td></tr>
|
|
124
|
+
<tr class="separator:ab3471cc9afba5976c7e5fbd07dfb22dc"><td class="memSeparator" colspan="2"> </td></tr>
|
|
125
|
+
</table>
|
|
126
|
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
|
127
|
+
<div class="textblock">
|
|
128
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8h_source.html#l00034">34</a> of file <a class="el" href="CHGBuilder_8h_source.html">CHGBuilder.h</a>.</p>
|
|
129
|
+
</div><h2 class="groupheader">Member Typedef Documentation</h2>
|
|
130
|
+
<a id="adbff217477a779de9024d9a5777413a7"></a>
|
|
131
|
+
<h2 class="memtitle"><span class="permalink"><a href="#adbff217477a779de9024d9a5777413a7">◆ </a></span>CHNodeSetTy</h2>
|
|
132
|
+
|
|
133
|
+
<div class="memitem">
|
|
134
|
+
<div class="memproto">
|
|
135
|
+
<table class="memname">
|
|
136
|
+
<tr>
|
|
137
|
+
<td class="memname">typedef <a class="el" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHGraph::CHNodeSetTy</a> <a class="el" href="classSVF_1_1CHGBuilder.html#adbff217477a779de9024d9a5777413a7">SVF::CHGBuilder::CHNodeSetTy</a></td>
|
|
138
|
+
</tr>
|
|
139
|
+
</table>
|
|
140
|
+
</div><div class="memdoc">
|
|
141
|
+
|
|
142
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8h_source.html#l00040">40</a> of file <a class="el" href="CHGBuilder_8h_source.html">CHGBuilder.h</a>.</p>
|
|
143
|
+
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
<a id="a727a1737e7290536b29b05e03d8b85ac"></a>
|
|
147
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a727a1737e7290536b29b05e03d8b85ac">◆ </a></span>WorkList</h2>
|
|
148
|
+
|
|
149
|
+
<div class="memitem">
|
|
150
|
+
<div class="memproto">
|
|
151
|
+
<table class="memname">
|
|
152
|
+
<tr>
|
|
153
|
+
<td class="memname">typedef <a class="el" href="classSVF_1_1CHGraph.html#af1b638faf888898cdf168c25e008ab12">CHGraph::WorkList</a> <a class="el" href="classSVF_1_1CHGBuilder.html#a727a1737e7290536b29b05e03d8b85ac">SVF::CHGBuilder::WorkList</a></td>
|
|
154
|
+
</tr>
|
|
155
|
+
</table>
|
|
156
|
+
</div><div class="memdoc">
|
|
157
|
+
|
|
158
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8h_source.html#l00041">41</a> of file <a class="el" href="CHGBuilder_8h_source.html">CHGBuilder.h</a>.</p>
|
|
159
|
+
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
<h2 class="groupheader">Constructor & Destructor Documentation</h2>
|
|
163
|
+
<a id="a436e4f8b1e1cad85f0c7df938afe8c78"></a>
|
|
164
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a436e4f8b1e1cad85f0c7df938afe8c78">◆ </a></span>CHGBuilder()</h2>
|
|
165
|
+
|
|
166
|
+
<div class="memitem">
|
|
167
|
+
<div class="memproto">
|
|
168
|
+
<table class="mlabels">
|
|
169
|
+
<tr>
|
|
170
|
+
<td class="mlabels-left">
|
|
171
|
+
<table class="memname">
|
|
172
|
+
<tr>
|
|
173
|
+
<td class="memname">SVF::CHGBuilder::CHGBuilder </td>
|
|
174
|
+
<td>(</td>
|
|
175
|
+
<td class="paramtype"><a class="el" href="classSVF_1_1CHGraph.html">CHGraph</a> * </td>
|
|
176
|
+
<td class="paramname"><em>c</em></td><td>)</td>
|
|
177
|
+
<td></td>
|
|
178
|
+
</tr>
|
|
179
|
+
</table>
|
|
180
|
+
</td>
|
|
181
|
+
<td class="mlabels-right">
|
|
182
|
+
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
|
183
|
+
</tr>
|
|
184
|
+
</table>
|
|
185
|
+
</div><div class="memdoc">
|
|
186
|
+
|
|
187
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8h_source.html#l00043">43</a> of file <a class="el" href="CHGBuilder_8h_source.html">CHGBuilder.h</a>.</p>
|
|
188
|
+
<div class="fragment"><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  : <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>(c)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  }</div><div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00037">CHGBuilder.h:37</a></div></div>
|
|
189
|
+
</div><!-- fragment -->
|
|
190
|
+
</div>
|
|
191
|
+
</div>
|
|
192
|
+
<h2 class="groupheader">Member Function Documentation</h2>
|
|
193
|
+
<a id="a77753749b34b00c18d419057b4757a26"></a>
|
|
194
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a77753749b34b00c18d419057b4757a26">◆ </a></span>addFuncToFuncVector()</h2>
|
|
195
|
+
|
|
196
|
+
<div class="memitem">
|
|
197
|
+
<div class="memproto">
|
|
198
|
+
<table class="memname">
|
|
199
|
+
<tr>
|
|
200
|
+
<td class="memname">void CHGBuilder::addFuncToFuncVector </td>
|
|
201
|
+
<td>(</td>
|
|
202
|
+
<td class="paramtype"><a class="el" href="classSVF_1_1CHNode.html#aa4af6538c9994ec54a7b82691f846a31">CHNode::FuncVector</a> & </td>
|
|
203
|
+
<td class="paramname"><em>v</em>, </td>
|
|
204
|
+
</tr>
|
|
205
|
+
<tr>
|
|
206
|
+
<td class="paramkey"></td>
|
|
207
|
+
<td></td>
|
|
208
|
+
<td class="paramtype">const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> * </td>
|
|
209
|
+
<td class="paramname"><em>f</em> </td>
|
|
210
|
+
</tr>
|
|
211
|
+
<tr>
|
|
212
|
+
<td></td>
|
|
213
|
+
<td>)</td>
|
|
214
|
+
<td></td><td></td>
|
|
215
|
+
</tr>
|
|
216
|
+
</table>
|
|
217
|
+
</div><div class="memdoc">
|
|
218
|
+
|
|
219
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00695">695</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
|
|
220
|
+
<div class="fragment"><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>  <span class="keyword">const</span> <span class="keyword">auto</span> *lf = f-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>();</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#a917c4bd2d5fd1354b5069bf0a68533d9">isCPPThunkFunction</a>(lf)) {</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <span class="keyword">auto</span> *tf = <a class="code" href="namespaceSVF_1_1cppUtil.html#ac9c6d4315e7a1a826add7ed9cf924553">getThunkTarget</a>(lf))</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  v.push_back(<a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a62a3ccdbc55381d5f8d96dc23141f2e5">svfMod</a>-><a class="code" href="classSVF_1_1SVFModule.html#af969d7739f27c8242985656bafbabaeb">getSVFFunction</a>(tf));</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  v.push_back(f);</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  }</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span> }</div><div class="ttc" id="classSVF_1_1CHGraph_html_a62a3ccdbc55381d5f8d96dc23141f2e5"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a62a3ccdbc55381d5f8d96dc23141f2e5">SVF::CHGraph::svfMod</a></div><div class="ttdeci">SVFModule * svfMod</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00310">CHG.h:310</a></div></div>
|
|
221
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_a917c4bd2d5fd1354b5069bf0a68533d9"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a917c4bd2d5fd1354b5069bf0a68533d9">SVF::cppUtil::isCPPThunkFunction</a></div><div class="ttdeci">bool isCPPThunkFunction(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00289">CPPUtil.cpp:289</a></div></div>
|
|
222
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_ac9c6d4315e7a1a826add7ed9cf924553"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#ac9c6d4315e7a1a826add7ed9cf924553">SVF::cppUtil::getThunkTarget</a></div><div class="ttdeci">const Function * getThunkTarget(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00294">CPPUtil.cpp:294</a></div></div>
|
|
223
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00037">CHGBuilder.h:37</a></div></div>
|
|
224
|
+
<div class="ttc" id="classSVF_1_1SVFFunction_html_ac4ae917ae35ac6fca652fe2dd90a8ac2"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">SVF::SVFFunction::getLLVMFun</a></div><div class="ttdeci">Function * getLLVMFun() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00249">BasicTypes.h:249</a></div></div>
|
|
225
|
+
<div class="ttc" id="classSVF_1_1SVFModule_html_af969d7739f27c8242985656bafbabaeb"><div class="ttname"><a href="classSVF_1_1SVFModule.html#af969d7739f27c8242985656bafbabaeb">SVF::SVFModule::getSVFFunction</a></div><div class="ttdeci">const SVFFunction * getSVFFunction(const Function *fun) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00126">SVFModule.h:126</a></div></div>
|
|
226
|
+
</div><!-- fragment -->
|
|
227
|
+
</div>
|
|
228
|
+
</div>
|
|
229
|
+
<a id="a2828eb6b2bd86d6f279967c34da8e7e4"></a>
|
|
230
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a2828eb6b2bd86d6f279967c34da8e7e4">◆ </a></span>analyzeVTables()</h2>
|
|
231
|
+
|
|
232
|
+
<div class="memitem">
|
|
233
|
+
<div class="memproto">
|
|
234
|
+
<table class="memname">
|
|
235
|
+
<tr>
|
|
236
|
+
<td class="memname">void CHGBuilder::analyzeVTables </td>
|
|
237
|
+
<td>(</td>
|
|
238
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> & </td>
|
|
239
|
+
<td class="paramname"><em>M</em></td><td>)</td>
|
|
240
|
+
<td></td>
|
|
241
|
+
</tr>
|
|
242
|
+
</table>
|
|
243
|
+
</div><div class="memdoc">
|
|
244
|
+
|
|
245
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00367">367</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
|
|
246
|
+
<div class="fragment"><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordflow">for</span> (Module::const_global_iterator I = M.global_begin(),</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  E = M.global_end(); I != E; ++I)</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  {</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *globalvalue = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a>>(&(*I));</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">isValVtbl</a>(globalvalue) && globalvalue->getNumOperands() > 0)</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  {</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *vtblStruct =</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a>>(globalvalue->getOperand(0));</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vtblStruct && <span class="stringliteral">"Initializer of a vtable not a struct?"</span>);</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordtype">string</span> vtblClassName = <a class="code" href="namespaceSVF_1_1cppUtil.html#ad83c097f1c77cdf52fc219ef07ee0b1a">getClassNameFromVtblObj</a>(globalvalue);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *node = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">getNode</a>(vtblClassName);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(node && <span class="stringliteral">"node not found?"</span>);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  node-><a class="code" href="classSVF_1_1CHNode.html#a2c31580f1cf43fbdd01a07b6f9f6b04e">setVTable</a>(globalvalue);</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="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ei = 0; ei < vtblStruct->getNumOperands(); ++ei)</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *vtbl =</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a>>(vtblStruct->getOperand(ei));</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vtbl && <span class="stringliteral">"Element of initializer not an array?"</span>);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="comment">/*</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment"> * items in vtables can be classified into 3 categories:</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="comment"> * 1. i8* null</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="comment"> * 2. i8* inttoptr xxx</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="comment"> * 3. i8* bitcast xxx</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="comment"> */</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordtype">bool</span> pure_abstract = <span class="keyword">true</span>;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordflow">while</span> (i < vtbl->getNumOperands())</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>  <a class="code" href="classSVF_1_1CHNode.html#aa4af6538c9994ec54a7b82691f846a31">CHNode::FuncVector</a> virtualFunctions;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keywordtype">bool</span> is_virtual = <span class="keyword">false</span>; <span class="comment">// virtual inheritance</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keywordtype">int</span> null_ptr_num = 0;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keywordflow">for</span> (; i < vtbl->getNumOperands(); ++i)</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">if</span> (SVFUtil::isa<ConstantPointerNull>(vtbl->getOperand(i)))</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  {</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keywordflow">if</span> (i > 0 && !SVFUtil::isa<ConstantPointerNull>(vtbl->getOperand(i-1)))</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  {</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *ce =</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>>(vtbl->getOperand(i-1));</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keywordflow">if</span> (ce->getOpcode() == Instruction::BitCast)</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  {</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *bitcastValue = ce->getOperand(0);</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordtype">string</span> bitcastValueName = bitcastValue->getName().str();</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordflow">if</span> (bitcastValueName.compare(0, <a class="code" href="CHGBuilder_8cpp.html#a4ecb39b2fb5510fb20341373b7ad5450">ztiLabel</a>.size(), <a class="code" href="CHGBuilder_8cpp.html#a4ecb39b2fb5510fb20341373b7ad5450">ztiLabel</a>) == 0)</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  {</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  is_virtual = <span class="keyword">true</span>;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  null_ptr_num = 1;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">while</span> (i+null_ptr_num < vtbl->getNumOperands())</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  {</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keywordflow">if</span> (SVFUtil::isa<ConstantPointerNull>(vtbl->getOperand(i+null_ptr_num)))</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  null_ptr_num++;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  }</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  }</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  }</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *ce =</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>>(vtbl->getOperand(i));</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(ce != <span class="keyword">nullptr</span> && <span class="stringliteral">"item in vtable not constantexp or null"</span>);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = ce->getOpcode();</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(opcode == Instruction::IntToPtr ||</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  opcode == Instruction::BitCast);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(ce->getNumOperands() == 1 &&</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="stringliteral">"inttptr or bitcast operand num not 1"</span>);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordflow">if</span> (opcode == Instruction::IntToPtr)</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  {</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  node-><a class="code" href="classSVF_1_1CHNode.html#a5d751a3a0d88c0de374bfeb526051440">setMultiInheritance</a>();</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  ++i;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="keywordflow">if</span> (opcode == Instruction::BitCast)</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  {</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *bitcastValue = ce->getOperand(0);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordtype">string</span> bitcastValueName = bitcastValue->getName().str();</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="comment">/*</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="comment"> * value in bitcast:</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="comment"> * _ZTIXXX</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="comment"> * Function</span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="comment"> * GlobalAlias (alias to other function)</span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="comment"> */</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa<Function>(bitcastValue) ||</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  SVFUtil::isa<GlobalValue>(bitcastValue));</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* f = SVFUtil::dyn_cast<Function>(bitcastValue))</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  {</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(f);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#a77753749b34b00c18d419057b4757a26">addFuncToFuncVector</a>(virtualFunctions, func);</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keywordflow">if</span> (func-><a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>().str().compare(<a class="code" href="CHGBuilder_8cpp.html#a5b49460faf973332d3cbfc561c994c6c">pureVirtualFunName</a>) == 0)</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  {</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  pure_abstract &= <span class="keyword">true</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="keywordflow">else</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  {</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  pure_abstract &= <span class="keyword">false</span>;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="keyword">struct </span>DemangledName dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">demangle</a>(func-><a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>().str());</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keywordflow">if</span> (dname.className.size() > 0 &&</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  vtblClassName.compare(dname.className) != 0)</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  {</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a3867db3e76f068bd8c4399b103dcd0b7">addEdge</a>(vtblClassName, dname.className, <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">CHEdge::INHERITANCE</a>);</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  }</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  }</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordflow">else</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>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0fd33072b099f61eaa642e94ed0c03fc">GlobalAlias</a> *alias =</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  SVFUtil::dyn_cast<GlobalAlias>(bitcastValue))</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="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *aliasValue = alias->getAliasee();</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* aliasFunc =</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  SVFUtil::dyn_cast<Function>(aliasValue))</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  {</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(aliasFunc);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#a77753749b34b00c18d419057b4757a26">addFuncToFuncVector</a>(virtualFunctions, func);</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *aliasconst =</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  SVFUtil::dyn_cast<ConstantExpr>(aliasValue))</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>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> aliasopcode = aliasconst->getOpcode();</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(aliasopcode == Instruction::BitCast &&</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <span class="stringliteral">"aliased constantexpr in vtable not a bitcast"</span>);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* aliasbitcastfunc =</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>>(aliasconst->getOperand(0));</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(aliasbitcastfunc &&</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <span class="stringliteral">"aliased bitcast in vtable not a function"</span>);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(aliasbitcastfunc);</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#a77753749b34b00c18d419057b4757a26">addFuncToFuncVector</a>(virtualFunctions, func);</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>  <span class="keywordflow">else</span></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>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"alias not function or bitcast"</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> </div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  pure_abstract &= <span class="keyword">false</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (bitcastValueName.compare(0, <a class="code" href="CHGBuilder_8cpp.html#a4ecb39b2fb5510fb20341373b7ad5450">ztiLabel</a>.size(),</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <a class="code" href="CHGBuilder_8cpp.html#a4ecb39b2fb5510fb20341373b7ad5450">ztiLabel</a>) == 0)</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  }</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keywordflow">else</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>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="stringliteral">"what else can be in bitcast of a vtable?"</span>);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</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>  }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <span class="keywordflow">if</span> (is_virtual && virtualFunctions.size() > 0)</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  {</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < null_ptr_num; ++i)</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  {</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = virtualFunctions[i];</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  virtualFunctions.insert(virtualFunctions.begin(), fun);</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>  }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keywordflow">if</span> (virtualFunctions.size() > 0)</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  node-><a class="code" href="classSVF_1_1CHNode.html#a8c51571df92b5e152cc42e9aaf712dc9">addVirtualFunctionVector</a>(virtualFunctions);</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>  <span class="keywordflow">if</span> (pure_abstract == <span class="keyword">true</span>)</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  {</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  node-><a class="code" href="classSVF_1_1CHNode.html#abac89987927dadd53dd646eae540a024">setPureAbstract</a>();</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  }</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="line"><a name="l00537"></a><span class="lineno"> 537</span>  }</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</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="BasicTypes_8h_source.html#l00133">BasicTypes.h:133</a></div></div>
|
|
247
|
+
<div class="ttc" id="classSVF_1_1CHNode_html"><div class="ttname"><a href="classSVF_1_1CHNode.html">SVF::CHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00104">CHG.h:104</a></div></div>
|
|
248
|
+
<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>
|
|
249
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a7beec68a60036c93a741a7152e8198b6"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">SVF::CHGraph::getNode</a></div><div class="ttdeci">CHNode * getNode(const std::string name) const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00084">CHG.cpp:84</a></div></div>
|
|
250
|
+
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00233">BasicTypes.h:233</a></div></div>
|
|
251
|
+
<div class="ttc" id="classSVF_1_1CHNode_html_aa4af6538c9994ec54a7b82691f846a31"><div class="ttname"><a href="classSVF_1_1CHNode.html#aa4af6538c9994ec54a7b82691f846a31">SVF::CHNode::FuncVector</a></div><div class="ttdeci">std::vector< const SVFFunction * > FuncVector</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00114">CHG.h:114</a></div></div>
|
|
252
|
+
<div class="ttc" id="classSVF_1_1CHNode_html_a2c31580f1cf43fbdd01a07b6f9f6b04e"><div class="ttname"><a href="classSVF_1_1CHNode.html#a2c31580f1cf43fbdd01a07b6f9f6b04e">SVF::CHNode::setVTable</a></div><div class="ttdeci">void setVTable(const GlobalValue *vtbl)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00182">CHG.h:182</a></div></div>
|
|
253
|
+
<div class="ttc" id="classSVF_1_1SVFValue_html_adc15c1f7a77158142156fba7524e89c9"><div class="ttname"><a href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">SVF::SVFValue::getName</a></div><div class="ttdeci">const llvm::StringRef getName() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00231">SVFBasicTypes.h:231</a></div></div>
|
|
254
|
+
<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#l00075">SVFBasicTypes.h:75</a></div></div>
|
|
255
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_a77753749b34b00c18d419057b4757a26"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#a77753749b34b00c18d419057b4757a26">SVF::CHGBuilder::addFuncToFuncVector</a></div><div class="ttdeci">void addFuncToFuncVector(CHNode::FuncVector &v, const SVFFunction *f)</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00695">CHGBuilder.cpp:695</a></div></div>
|
|
256
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_ad83c097f1c77cdf52fc219ef07ee0b1a"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#ad83c097f1c77cdf52fc219ef07ee0b1a">SVF::cppUtil::getClassNameFromVtblObj</a></div><div class="ttdeci">std::string getClassNameFromVtblObj(const Value *value)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00433">CPPUtil.cpp:433</a></div></div>
|
|
257
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00037">CHGBuilder.h:37</a></div></div>
|
|
258
|
+
<div class="ttc" id="classSVF_1_1CHNode_html_a5d751a3a0d88c0de374bfeb526051440"><div class="ttname"><a href="classSVF_1_1CHNode.html#a5d751a3a0d88c0de374bfeb526051440">SVF::CHNode::setMultiInheritance</a></div><div class="ttdeci">void setMultiInheritance()</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00145">CHG.h:145</a></div></div>
|
|
259
|
+
<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="BasicTypes_8h_source.html#l00076">BasicTypes.h:76</a></div></div>
|
|
260
|
+
<div class="ttc" id="classSVF_1_1CHNode_html_a8c51571df92b5e152cc42e9aaf712dc9"><div class="ttname"><a href="classSVF_1_1CHNode.html#a8c51571df92b5e152cc42e9aaf712dc9">SVF::CHNode::addVirtualFunctionVector</a></div><div class="ttdeci">void addVirtualFunctionVector(FuncVector vfuncvec)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00167">CHG.h:167</a></div></div>
|
|
261
|
+
<div class="ttc" id="classSVF_1_1CHEdge_html_a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c"><div class="ttname"><a href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">SVF::CHEdge::INHERITANCE</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00082">CHG.h:82</a></div></div>
|
|
262
|
+
<div class="ttc" id="namespaceSVF_html_a0fd33072b099f61eaa642e94ed0c03fc"><div class="ttname"><a href="namespaceSVF.html#a0fd33072b099f61eaa642e94ed0c03fc">SVF::GlobalAlias</a></div><div class="ttdeci">llvm::GlobalAlias GlobalAlias</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00134">BasicTypes.h:134</a></div></div>
|
|
263
|
+
<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="BasicTypes_8h_source.html#l00082">BasicTypes.h:82</a></div></div>
|
|
264
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_aeef0f5c6486379043a7d47b0635f2667"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">SVF::cppUtil::isValVtbl</a></div><div class="ttdeci">bool isValVtbl(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00123">CPPUtil.cpp:123</a></div></div>
|
|
265
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a3867db3e76f068bd8c4399b103dcd0b7"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a3867db3e76f068bd8c4399b103dcd0b7">SVF::CHGraph::addEdge</a></div><div class="ttdeci">void addEdge(const std::string className, const std::string baseClassName, CHEdge::CHEDGETYPE edgeType)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00069">CHG.cpp:69</a></div></div>
|
|
266
|
+
<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="BasicTypes_8h_source.html#l00123">BasicTypes.h:123</a></div></div>
|
|
267
|
+
<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#l00069">LLVMModule.h:69</a></div></div>
|
|
268
|
+
<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>
|
|
269
|
+
<div class="ttc" id="CHGBuilder_8cpp_html_a4ecb39b2fb5510fb20341373b7ad5450"><div class="ttname"><a href="CHGBuilder_8cpp.html#a4ecb39b2fb5510fb20341373b7ad5450">ztiLabel</a></div><div class="ttdeci">const string ztiLabel</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00054">CHGBuilder.cpp:54</a></div></div>
|
|
270
|
+
<div class="ttc" id="classSVF_1_1CHNode_html_abac89987927dadd53dd646eae540a024"><div class="ttname"><a href="classSVF_1_1CHNode.html#abac89987927dadd53dd646eae540a024">SVF::CHNode::setPureAbstract</a></div><div class="ttdeci">void setPureAbstract()</div><div class="ttdoc">Attribute. </div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00141">CHG.h:141</a></div></div>
|
|
271
|
+
<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>
|
|
272
|
+
<div class="ttc" id="namespaceSVF_html_a2b28f48dde0a9a91d251e654ce1f9477"><div class="ttname"><a href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">SVF::ConstantStruct</a></div><div class="ttdeci">llvm::ConstantStruct ConstantStruct</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00118">BasicTypes.h:118</a></div></div>
|
|
273
|
+
<div class="ttc" id="namespaceSVF_html_a911dbaab38cb42deb9c195c7f687853d"><div class="ttname"><a href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">SVF::ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00131">BasicTypes.h:131</a></div></div>
|
|
274
|
+
<div class="ttc" id="CHGBuilder_8cpp_html_a5b49460faf973332d3cbfc561c994c6c"><div class="ttname"><a href="CHGBuilder_8cpp.html#a5b49460faf973332d3cbfc561c994c6c">pureVirtualFunName</a></div><div class="ttdeci">const string pureVirtualFunName</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00052">CHGBuilder.cpp:52</a></div></div>
|
|
275
|
+
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
|
|
276
|
+
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_a547b3bc62de65b9dbfc6dee55c063dd7"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">SVF::LLVMModuleSet::getSVFFunction</a></div><div class="ttdeci">const SVFFunction * getSVFFunction(const Function *fun) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00112">LLVMModule.h:112</a></div></div>
|
|
277
|
+
</div><!-- fragment -->
|
|
278
|
+
</div>
|
|
279
|
+
</div>
|
|
280
|
+
<a id="aa5c672ac426ad4085d64d97f8cb14ace"></a>
|
|
281
|
+
<h2 class="memtitle"><span class="permalink"><a href="#aa5c672ac426ad4085d64d97f8cb14ace">◆ </a></span>buildCHG()</h2>
|
|
282
|
+
|
|
283
|
+
<div class="memitem">
|
|
284
|
+
<div class="memproto">
|
|
285
|
+
<table class="memname">
|
|
286
|
+
<tr>
|
|
287
|
+
<td class="memname">void CHGBuilder::buildCHG </td>
|
|
288
|
+
<td>(</td>
|
|
289
|
+
<td class="paramname"></td><td>)</td>
|
|
290
|
+
<td></td>
|
|
291
|
+
</tr>
|
|
292
|
+
</table>
|
|
293
|
+
</div><div class="memdoc">
|
|
294
|
+
|
|
295
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00057">57</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
|
|
296
|
+
<div class="fragment"><div class="line"><a name="l00058"></a><span class="lineno"> 58</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="keywordtype">double</span> timeStart, timeEnd;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  timeStart = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</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="l00063"></a><span class="lineno"> 63</span>  {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> *M = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a8afb7ab3ee4632e78d546e549110e74c">getModule</a>(i);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(M && <span class="stringliteral">"module not found?"</span>);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">"construct CHGraph From module "</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  + M->getName().str() + <span class="stringliteral">"...\n"</span>));</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#a443b021eb2b08b92164515750385b058">readInheritanceMetadataFromModule</a>(*M);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">for</span> (Module::const_global_iterator I = M->global_begin(), E = M->global_end(); I != E; ++I)</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#a648e97899c16a5634fc8369aef8a031f">buildCHGNodes</a>(&(*I));</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">for</span> (Module::const_iterator F = M->begin(), E = M->end(); F != E; ++F)</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#a648e97899c16a5634fc8369aef8a031f">buildCHGNodes</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a142e650415cb81011eb59dadd3cb0637">getDefFunForMultipleModule</a>(&(*F)));</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">for</span> (Module::const_iterator F = M->begin(), E = M->end(); F != E; ++F)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#a7420a3a4858ebe861aaa47d76f49ab1f">buildCHGEdges</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a142e650415cb81011eb59dadd3cb0637">getDefFunForMultipleModule</a>(&(*F)));</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#a2828eb6b2bd86d6f279967c34da8e7e4">analyzeVTables</a>(*M);</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> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">"build Internal Maps ...\n"</span>));</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ad9f1c51ba6dc279f22aa671f29257a50">buildInternalMaps</a>();</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  timeEnd = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#ab5bd2348e4418fcb2f3b18227fccd836">buildingCHGTime</a> = (timeEnd - timeStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</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="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ab13a47f6dd4eedfaa607d36448a1d456">Options::DumpCHA</a>)</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a29351163649618332394fc72cc35212f">dump</a>(<span class="stringliteral">"cha"</span>);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</div><div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00084">BasicTypes.h:84</a></div></div>
|
|
297
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a609eea630a8f88fe9eaba15ce7e48738"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVF::SVFUtil::pasMsg</a></div><div class="ttdeci">std::string pasMsg(std::string msg)</div><div class="ttdoc">Print each pass/phase message by converting a string into blue string output. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00101">SVFUtil.cpp:101</a></div></div>
|
|
298
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a142e650415cb81011eb59dadd3cb0637"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a142e650415cb81011eb59dadd3cb0637">SVF::SVFUtil::getDefFunForMultipleModule</a></div><div class="ttdeci">const SVFFunction * getDefFunForMultipleModule(const Function *fun)</div><div class="ttdoc">Get the definition of a function across multiple modules. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00256">SVFUtil.h:256</a></div></div>
|
|
299
|
+
<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>
|
|
300
|
+
<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#l00093">LLVMModule.h:93</a></div></div>
|
|
301
|
+
<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#l00075">SVFBasicTypes.h:75</a></div></div>
|
|
302
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a29351163649618332394fc72cc35212f"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a29351163649618332394fc72cc35212f">SVF::CHGraph::dump</a></div><div class="ttdeci">void dump(const std::string &filename)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00216">CHG.cpp:216</a></div></div>
|
|
303
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_ad9f1c51ba6dc279f22aa671f29257a50"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ad9f1c51ba6dc279f22aa671f29257a50">SVF::CHGBuilder::buildInternalMaps</a></div><div class="ttdeci">void buildInternalMaps()</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00157">CHGBuilder.cpp:157</a></div></div>
|
|
304
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_a443b021eb2b08b92164515750385b058"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#a443b021eb2b08b92164515750385b058">SVF::CHGBuilder::readInheritanceMetadataFromModule</a></div><div class="ttdeci">void readInheritanceMetadataFromModule(const Module &M)</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00220">CHGBuilder.cpp:220</a></div></div>
|
|
305
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00037">CHGBuilder.h:37</a></div></div>
|
|
306
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_a2828eb6b2bd86d6f279967c34da8e7e4"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#a2828eb6b2bd86d6f279967c34da8e7e4">SVF::CHGBuilder::analyzeVTables</a></div><div class="ttdeci">void analyzeVTables(const Module &M)</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00367">CHGBuilder.cpp:367</a></div></div>
|
|
307
|
+
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_a8afb7ab3ee4632e78d546e549110e74c"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a8afb7ab3ee4632e78d546e549110e74c">SVF::LLVMModuleSet::getModule</a></div><div class="ttdeci">Module * getModule(u32_t idx) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00098">LLVMModule.h:98</a></div></div>
|
|
308
|
+
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00176">SVFBasicTypes.h:176</a></div></div>
|
|
309
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
310
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_a7420a3a4858ebe861aaa47d76f49ab1f"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#a7420a3a4858ebe861aaa47d76f49ab1f">SVF::CHGBuilder::buildCHGEdges</a></div><div class="ttdeci">void buildCHGEdges(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00132">CHGBuilder.cpp:132</a></div></div>
|
|
311
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_ab5bd2348e4418fcb2f3b18227fccd836"><div class="ttname"><a href="classSVF_1_1CHGraph.html#ab5bd2348e4418fcb2f3b18227fccd836">SVF::CHGraph::buildingCHGTime</a></div><div class="ttdeci">double buildingCHGTime</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00313">CHG.h:313</a></div></div>
|
|
312
|
+
<div class="ttc" id="SVFBasicTypes_8h_html_a2c64190a065f342897573a3ef4973adb"><div class="ttname"><a href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a></div><div class="ttdeci">#define DGENERAL</div><div class="ttdoc">General debug flag is for each phase of a pass, it is often in a colorful output format. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00154">SVFBasicTypes.h:154</a></div></div>
|
|
313
|
+
<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#l00069">LLVMModule.h:69</a></div></div>
|
|
314
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_a648e97899c16a5634fc8369aef8a031f"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#a648e97899c16a5634fc8369aef8a031f">SVF::CHGBuilder::buildCHGNodes</a></div><div class="ttdeci">void buildCHGNodes(const GlobalValue *V)</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00089">CHGBuilder.cpp:89</a></div></div>
|
|
315
|
+
<div class="ttc" id="classSVF_1_1Options_html_ab13a47f6dd4eedfaa607d36448a1d456"><div class="ttname"><a href="classSVF_1_1Options.html#ab13a47f6dd4eedfaa607d36448a1d456">SVF::Options::DumpCHA</a></div><div class="ttdeci">static const llvm::cl::opt< bool > DumpCHA</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00202">Options.h:202</a></div></div>
|
|
316
|
+
<div class="ttc" id="SVFBasicTypes_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DEBUG model of each pass. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00149">SVFBasicTypes.h:149</a></div></div>
|
|
317
|
+
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00114">PTAStat.cpp:114</a></div></div>
|
|
318
|
+
</div><!-- fragment -->
|
|
319
|
+
</div>
|
|
320
|
+
</div>
|
|
321
|
+
<a id="a7420a3a4858ebe861aaa47d76f49ab1f"></a>
|
|
322
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a7420a3a4858ebe861aaa47d76f49ab1f">◆ </a></span>buildCHGEdges()</h2>
|
|
323
|
+
|
|
324
|
+
<div class="memitem">
|
|
325
|
+
<div class="memproto">
|
|
326
|
+
<table class="memname">
|
|
327
|
+
<tr>
|
|
328
|
+
<td class="memname">void CHGBuilder::buildCHGEdges </td>
|
|
329
|
+
<td>(</td>
|
|
330
|
+
<td class="paramtype">const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> * </td>
|
|
331
|
+
<td class="paramname"><em>F</em></td><td>)</td>
|
|
332
|
+
<td></td>
|
|
333
|
+
</tr>
|
|
334
|
+
</table>
|
|
335
|
+
</div><div class="memdoc">
|
|
336
|
+
|
|
337
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00132">132</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
|
|
338
|
+
<div class="fragment"><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* F = fun-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>();</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#ad6f9578cdce518141772a11617160da8">isConstructor</a>(F) || <a class="code" href="namespaceSVF_1_1cppUtil.html#af19bec54621f4605bac4feaf9f73803c">isDestructor</a>(F))</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">for</span> (Function::const_iterator B = F->begin(), E = F->end(); B != E; ++B)</div><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>  <span class="keywordflow">for</span> (BasicBlock::const_iterator I = B->begin(), E = B->end(); I != E; ++I)</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="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a2e08ce822223842fa6a73fd659b1a526">SVFUtil::isCallSite</a>(&(*I)))</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(&(*I));</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#a06db89019c094ad35bea97be1d3b452a">connectInheritEdgeViaCall</a>(fun, cs);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> *store = SVFUtil::dyn_cast<StoreInst>(&(*I)))</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#acbdf97de6a24cec8d0ae020e3bfb79e6">connectInheritEdgeViaStore</a>(fun, store);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</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>  }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</div><div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a2e08ce822223842fa6a73fd659b1a526"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a2e08ce822223842fa6a73fd659b1a526">SVF::SVFUtil::isCallSite</a></div><div class="ttdeci">bool isCallSite(const Instruction *inst)</div><div class="ttdoc">Whether an instruction is a call or invoke instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00193">SVFUtil.h:193</a></div></div>
|
|
339
|
+
<div class="ttc" id="namespaceSVF_html_ab696aab940eb187dc81217efe8649af5"><div class="ttname"><a href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">SVF::StoreInst</a></div><div class="ttdeci">llvm::StoreInst StoreInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00151">BasicTypes.h:151</a></div></div>
|
|
340
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_a06db89019c094ad35bea97be1d3b452a"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#a06db89019c094ad35bea97be1d3b452a">SVF::CHGBuilder::connectInheritEdgeViaCall</a></div><div class="ttdeci">void connectInheritEdgeViaCall(const SVFFunction *caller, CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00164">CHGBuilder.cpp:164</a></div></div>
|
|
341
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_ad6f9578cdce518141772a11617160da8"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#ad6f9578cdce518141772a11617160da8">SVF::cppUtil::isConstructor</a></div><div class="ttdeci">bool isConstructor(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00453">CPPUtil.cpp:453</a></div></div>
|
|
342
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_acbdf97de6a24cec8d0ae020e3bfb79e6"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#acbdf97de6a24cec8d0ae020e3bfb79e6">SVF::CHGBuilder::connectInheritEdgeViaStore</a></div><div class="ttdeci">void connectInheritEdgeViaStore(const SVFFunction *caller, const StoreInst *store)</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00193">CHGBuilder.cpp:193</a></div></div>
|
|
343
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_af19bec54621f4605bac4feaf9f73803c"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#af19bec54621f4605bac4feaf9f73803c">SVF::cppUtil::isDestructor</a></div><div class="ttdeci">bool isDestructor(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00484">CPPUtil.cpp:484</a></div></div>
|
|
344
|
+
<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="BasicTypes_8h_source.html#l00076">BasicTypes.h:76</a></div></div>
|
|
345
|
+
<div class="ttc" id="classSVF_1_1SVFFunction_html_ac4ae917ae35ac6fca652fe2dd90a8ac2"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">SVF::SVFFunction::getLLVMFun</a></div><div class="ttdeci">Function * getLLVMFun() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00249">BasicTypes.h:249</a></div></div>
|
|
346
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a202de7ad2bea0311e2f75894c030e7a9"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVF::SVFUtil::getLLVMCallSite</a></div><div class="ttdeci">CallSite getLLVMCallSite(const Instruction *inst)</div><div class="ttdoc">Return LLVM callsite given a instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00219">SVFUtil.h:219</a></div></div>
|
|
347
|
+
<div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00303">BasicTypes.h:303</a></div></div>
|
|
348
|
+
</div><!-- fragment -->
|
|
349
|
+
</div>
|
|
350
|
+
</div>
|
|
351
|
+
<a id="a648e97899c16a5634fc8369aef8a031f"></a>
|
|
352
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a648e97899c16a5634fc8369aef8a031f">◆ </a></span>buildCHGNodes() <span class="overload">[1/2]</span></h2>
|
|
353
|
+
|
|
354
|
+
<div class="memitem">
|
|
355
|
+
<div class="memproto">
|
|
356
|
+
<table class="memname">
|
|
357
|
+
<tr>
|
|
358
|
+
<td class="memname">void CHGBuilder::buildCHGNodes </td>
|
|
359
|
+
<td>(</td>
|
|
360
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> * </td>
|
|
361
|
+
<td class="paramname"><em>V</em></td><td>)</td>
|
|
362
|
+
<td></td>
|
|
363
|
+
</tr>
|
|
364
|
+
</table>
|
|
365
|
+
</div><div class="memdoc">
|
|
366
|
+
|
|
367
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00089">89</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
|
|
368
|
+
<div class="fragment"><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">isValVtbl</a>(globalvalue) && globalvalue->getNumOperands() > 0)</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *vtblStruct = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a>>(globalvalue->getOperand(0));</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vtblStruct && <span class="stringliteral">"Initializer of a vtable not a struct?"</span>);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordtype">string</span> className = <a class="code" href="namespaceSVF_1_1cppUtil.html#ad83c097f1c77cdf52fc219ef07ee0b1a">getClassNameFromVtblObj</a>(globalvalue);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">getNode</a>(className))</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#a8e915f257224b1d8e40d0e4c9b5e1df0">createNode</a>(className);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ei = 0; ei < vtblStruct->getNumOperands(); ++ei)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</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>>(vtblStruct->getOperand(ei));</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vtbl && <span class="stringliteral">"Element of initializer not an array?"</span>);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < vtbl->getNumOperands(); ++i)</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *ce = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7e404bcc6613ba10a56c4fbdc842c5a8">isCastConstantExpr</a>(vtbl->getOperand(i)))</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *bitcastValue = ce->getOperand(0);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = SVFUtil::dyn_cast<Function>(bitcastValue))</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keyword">struct </span>DemangledName dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">demangle</a>(func->getName().str());</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">getNode</a>(dname.className))</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#a8e915f257224b1d8e40d0e4c9b5e1df0">createNode</a>(dname.className);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</div><div class="ttc" id="classSVF_1_1CHGBuilder_html_a8e915f257224b1d8e40d0e4c9b5e1df0"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#a8e915f257224b1d8e40d0e4c9b5e1df0">SVF::CHGBuilder::createNode</a></div><div class="ttdeci">CHNode * createNode(const std::string name)</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00241">CHGBuilder.cpp:241</a></div></div>
|
|
369
|
+
<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="BasicTypes_8h_source.html#l00133">BasicTypes.h:133</a></div></div>
|
|
370
|
+
<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>
|
|
371
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a7beec68a60036c93a741a7152e8198b6"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">SVF::CHGraph::getNode</a></div><div class="ttdeci">CHNode * getNode(const std::string name) const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00084">CHG.cpp:84</a></div></div>
|
|
372
|
+
<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#l00075">SVFBasicTypes.h:75</a></div></div>
|
|
373
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_ad83c097f1c77cdf52fc219ef07ee0b1a"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#ad83c097f1c77cdf52fc219ef07ee0b1a">SVF::cppUtil::getClassNameFromVtblObj</a></div><div class="ttdeci">std::string getClassNameFromVtblObj(const Value *value)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00433">CPPUtil.cpp:433</a></div></div>
|
|
374
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00037">CHGBuilder.h:37</a></div></div>
|
|
375
|
+
<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="BasicTypes_8h_source.html#l00076">BasicTypes.h:76</a></div></div>
|
|
376
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_aeef0f5c6486379043a7d47b0635f2667"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">SVF::cppUtil::isValVtbl</a></div><div class="ttdeci">bool isValVtbl(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00123">CPPUtil.cpp:123</a></div></div>
|
|
377
|
+
<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>
|
|
378
|
+
<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>
|
|
379
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a7e404bcc6613ba10a56c4fbdc842c5a8"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a7e404bcc6613ba10a56c4fbdc842c5a8">SVF::SVFUtil::isCastConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isCastConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00550">LLVMUtil.h:550</a></div></div>
|
|
380
|
+
<div class="ttc" id="namespaceSVF_html_a2b28f48dde0a9a91d251e654ce1f9477"><div class="ttname"><a href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">SVF::ConstantStruct</a></div><div class="ttdeci">llvm::ConstantStruct ConstantStruct</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00118">BasicTypes.h:118</a></div></div>
|
|
381
|
+
<div class="ttc" id="namespaceSVF_html_a911dbaab38cb42deb9c195c7f687853d"><div class="ttname"><a href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">SVF::ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00131">BasicTypes.h:131</a></div></div>
|
|
382
|
+
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
|
|
383
|
+
</div><!-- fragment -->
|
|
384
|
+
</div>
|
|
385
|
+
</div>
|
|
386
|
+
<a id="a51a07b2bd7cccf7c9ab24eb87db17216"></a>
|
|
387
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a51a07b2bd7cccf7c9ab24eb87db17216">◆ </a></span>buildCHGNodes() <span class="overload">[2/2]</span></h2>
|
|
388
|
+
|
|
389
|
+
<div class="memitem">
|
|
390
|
+
<div class="memproto">
|
|
391
|
+
<table class="memname">
|
|
392
|
+
<tr>
|
|
393
|
+
<td class="memname">void CHGBuilder::buildCHGNodes </td>
|
|
394
|
+
<td>(</td>
|
|
395
|
+
<td class="paramtype">const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> * </td>
|
|
396
|
+
<td class="paramname"><em>F</em></td><td>)</td>
|
|
397
|
+
<td></td>
|
|
398
|
+
</tr>
|
|
399
|
+
</table>
|
|
400
|
+
</div><div class="memdoc">
|
|
401
|
+
|
|
402
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00120">120</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
|
|
403
|
+
<div class="fragment"><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* F = fun-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>();</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#ad6f9578cdce518141772a11617160da8">isConstructor</a>(F) || <a class="code" href="namespaceSVF_1_1cppUtil.html#af19bec54621f4605bac4feaf9f73803c">isDestructor</a>(F))</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keyword">struct </span>DemangledName dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">demangle</a>(F->getName().str());</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a263149d980e5c3165dfe8750bfac3223">DCHA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t build CHANode for class "</span> + dname.className + <span class="stringliteral">"...\n"</span>);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">getNode</a>(dname.className))</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#a8e915f257224b1d8e40d0e4c9b5e1df0">createNode</a>(dname.className);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</div><div class="ttc" id="classSVF_1_1CHGBuilder_html_a8e915f257224b1d8e40d0e4c9b5e1df0"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#a8e915f257224b1d8e40d0e4c9b5e1df0">SVF::CHGBuilder::createNode</a></div><div class="ttdeci">CHNode * createNode(const std::string name)</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00241">CHGBuilder.cpp:241</a></div></div>
|
|
404
|
+
<div class="ttc" id="SVFBasicTypes_8h_html_a263149d980e5c3165dfe8750bfac3223"><div class="ttname"><a href="SVFBasicTypes_8h.html#a263149d980e5c3165dfe8750bfac3223">DCHA</a></div><div class="ttdeci">#define DCHA</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00170">SVFBasicTypes.h:170</a></div></div>
|
|
405
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_ad6f9578cdce518141772a11617160da8"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#ad6f9578cdce518141772a11617160da8">SVF::cppUtil::isConstructor</a></div><div class="ttdeci">bool isConstructor(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00453">CPPUtil.cpp:453</a></div></div>
|
|
406
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a7beec68a60036c93a741a7152e8198b6"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">SVF::CHGraph::getNode</a></div><div class="ttdeci">CHNode * getNode(const std::string name) const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00084">CHG.cpp:84</a></div></div>
|
|
407
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_af19bec54621f4605bac4feaf9f73803c"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#af19bec54621f4605bac4feaf9f73803c">SVF::cppUtil::isDestructor</a></div><div class="ttdeci">bool isDestructor(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00484">CPPUtil.cpp:484</a></div></div>
|
|
408
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00037">CHGBuilder.h:37</a></div></div>
|
|
409
|
+
<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="BasicTypes_8h_source.html#l00076">BasicTypes.h:76</a></div></div>
|
|
410
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
411
|
+
<div class="ttc" id="classSVF_1_1SVFFunction_html_ac4ae917ae35ac6fca652fe2dd90a8ac2"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">SVF::SVFFunction::getLLVMFun</a></div><div class="ttdeci">Function * getLLVMFun() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00249">BasicTypes.h:249</a></div></div>
|
|
412
|
+
<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>
|
|
413
|
+
<div class="ttc" id="SVFBasicTypes_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DEBUG model of each pass. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00149">SVFBasicTypes.h:149</a></div></div>
|
|
414
|
+
</div><!-- fragment -->
|
|
415
|
+
</div>
|
|
416
|
+
</div>
|
|
417
|
+
<a id="ae7832c277f0ff86f3ae750aac6063adb"></a>
|
|
418
|
+
<h2 class="memtitle"><span class="permalink"><a href="#ae7832c277f0ff86f3ae750aac6063adb">◆ </a></span>buildClassNameToAncestorsDescendantsMap()</h2>
|
|
419
|
+
|
|
420
|
+
<div class="memitem">
|
|
421
|
+
<div class="memproto">
|
|
422
|
+
<table class="memname">
|
|
423
|
+
<tr>
|
|
424
|
+
<td class="memname">void CHGBuilder::buildClassNameToAncestorsDescendantsMap </td>
|
|
425
|
+
<td>(</td>
|
|
426
|
+
<td class="paramname"></td><td>)</td>
|
|
427
|
+
<td></td>
|
|
428
|
+
</tr>
|
|
429
|
+
</table>
|
|
430
|
+
</div><div class="memdoc">
|
|
431
|
+
|
|
432
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00268">268</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
|
|
433
|
+
<div class="fragment"><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">CHGraph::const_iterator</a> it = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>();</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  it != eit; ++it)</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *node = it->second;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#a727a1737e7290536b29b05e03d8b85ac">WorkList</a> worklist;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#adbff217477a779de9024d9a5777413a7">CHNodeSetTy</a> visitedNodes;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  worklist.push(node);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">while</span> (!worklist.empty())</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  {</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *curnode = worklist.pop();</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordflow">if</span> (visitedNodes.find(curnode) == visitedNodes.end())</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="keywordflow">for</span> (CHEdge::CHEdgeSetTy::const_iterator it =</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  curnode-><a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().begin(), eit =</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  curnode-><a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().end(); it != eit; ++it)</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  {</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">if</span> ((*it)->getEdgeType() == <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">CHEdge::INHERITANCE</a>)</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  {</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *succnode = (*it)->getDstNode();</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a083f726d74208c2d8107a75e0d6b3ca9">classNameToAncestorsMap</a>[node-><a class="code" href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">getName</a>()].insert(succnode);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#ac08f846413b6aed26a1bf39eb865b006">classNameToDescendantsMap</a>[succnode-><a class="code" href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">getName</a>()].insert(node);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  worklist.push(succnode);</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>  visitedNodes.insert(curnode);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  }</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  }</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> }</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::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#l00361">GenericGraph.h:361</a></div></div>
|
|
434
|
+
<div class="ttc" id="classSVF_1_1CHNode_html"><div class="ttname"><a href="classSVF_1_1CHNode.html">SVF::CHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00104">CHG.h:104</a></div></div>
|
|
435
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a083f726d74208c2d8107a75e0d6b3ca9"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a083f726d74208c2d8107a75e0d6b3ca9">SVF::CHGraph::classNameToAncestorsMap</a></div><div class="ttdeci">NameToCHNodesMap classNameToAncestorsMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00316">CHG.h:316</a></div></div>
|
|
436
|
+
<div class="ttc" id="classSVF_1_1GenericGraph_html_a5dfa3f178d4abf37177d0d74ff4c6a97"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">SVF::GenericGraph::const_iterator</a></div><div class="ttdeci">IDToNodeMapTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00339">GenericGraph.h:339</a></div></div>
|
|
437
|
+
<div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
|
|
438
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00037">CHGBuilder.h:37</a></div></div>
|
|
439
|
+
<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#l00178">GenericGraph.h:178</a></div></div>
|
|
440
|
+
<div class="ttc" id="classSVF_1_1CHEdge_html_a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c"><div class="ttname"><a href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">SVF::CHEdge::INHERITANCE</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00082">CHG.h:82</a></div></div>
|
|
441
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_adbff217477a779de9024d9a5777413a7"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#adbff217477a779de9024d9a5777413a7">SVF::CHGBuilder::CHNodeSetTy</a></div><div class="ttdeci">CHGraph::CHNodeSetTy CHNodeSetTy</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00040">CHGBuilder.h:40</a></div></div>
|
|
442
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_ac08f846413b6aed26a1bf39eb865b006"><div class="ttname"><a href="classSVF_1_1CHGraph.html#ac08f846413b6aed26a1bf39eb865b006">SVF::CHGraph::classNameToDescendantsMap</a></div><div class="ttdeci">NameToCHNodesMap classNameToDescendantsMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00315">CHG.h:315</a></div></div>
|
|
443
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_a727a1737e7290536b29b05e03d8b85ac"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#a727a1737e7290536b29b05e03d8b85ac">SVF::CHGBuilder::WorkList</a></div><div class="ttdeci">CHGraph::WorkList WorkList</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00041">CHGBuilder.h:41</a></div></div>
|
|
444
|
+
<div class="ttc" id="classSVF_1_1CHNode_html_af6e71c1a932464b1b615fc177f5af089"><div class="ttname"><a href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">SVF::CHNode::getName</a></div><div class="ttdeci">std::string getName() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00123">CHG.h:123</a></div></div>
|
|
445
|
+
</div><!-- fragment -->
|
|
446
|
+
</div>
|
|
447
|
+
</div>
|
|
448
|
+
<a id="abab6d95945a43fbe4c73ac12550f5d8c"></a>
|
|
449
|
+
<h2 class="memtitle"><span class="permalink"><a href="#abab6d95945a43fbe4c73ac12550f5d8c">◆ </a></span>buildCSToCHAVtblsAndVfnsMap()</h2>
|
|
450
|
+
|
|
451
|
+
<div class="memitem">
|
|
452
|
+
<div class="memproto">
|
|
453
|
+
<table class="memname">
|
|
454
|
+
<tr>
|
|
455
|
+
<td class="memname">void CHGBuilder::buildCSToCHAVtblsAndVfnsMap </td>
|
|
456
|
+
<td>(</td>
|
|
457
|
+
<td class="paramname"></td><td>)</td>
|
|
458
|
+
<td></td>
|
|
459
|
+
</tr>
|
|
460
|
+
</table>
|
|
461
|
+
</div><div class="memdoc">
|
|
462
|
+
|
|
463
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00640">640</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
|
|
464
|
+
<div class="fragment"><div class="line"><a name="l00641"></a><span class="lineno"> 641</span> {</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span> </div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <span class="keywordflow">for</span> (SymbolTableInfo::CallSiteSet::const_iterator it =</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()->getCallSiteSet().begin(), eit =</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()->getCallSiteSet().end(); it != eit; ++it)</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>  <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = *it;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1cppUtil.html#aca6465c72effcaddeb34f55da4555754">cppUtil::isVirtualCallSite</a>(cs))</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <a class="code" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a> vtbls;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CHGBuilder.html#adbff217477a779de9024d9a5777413a7">CHNodeSetTy</a>& chClasses = <a class="code" href="classSVF_1_1CHGBuilder.html#adc3e52b70db841cb1566a1fb855256b6">getCSClasses</a>(cs);</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="keywordflow">for</span> (CHNodeSetTy::const_iterator it = chClasses.begin(), eit = chClasses.end(); it != eit; ++it)</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  {</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *child = *it;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl = child-><a class="code" href="classSVF_1_1CHNode.html#a600b63dac83e526c933c141d4e2bcc0c">getVTable</a>();</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keywordflow">if</span> (vtbl != <span class="keyword">nullptr</span>)</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>  vtbls.insert(vtbl);</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>  <span class="keywordflow">if</span> (vtbls.size() > 0)</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>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#af3ed2bee5d76e5a848b250950c3be333">csToCHAVtblsMap</a>[cs] = vtbls;</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <a class="code" href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7">VFunSet</a> virtualFunctions;</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#ac5f5646db24455609cd86c421774dd3e">getVFnsFromVtbls</a>(cs, vtbls, virtualFunctions);</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keywordflow">if</span> (virtualFunctions.size() > 0)</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a5e6502c5baad99c70e1cf56c84ce9474">csToCHAVFnsMap</a>[cs] = virtualFunctions;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  }</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  }</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span> }</div><div class="ttc" id="namespaceSVF_1_1cppUtil_html_aca6465c72effcaddeb34f55da4555754"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#aca6465c72effcaddeb34f55da4555754">SVF::cppUtil::isVirtualCallSite</a></div><div class="ttdeci">bool isVirtualCallSite(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00257">CPPUtil.cpp:257</a></div></div>
|
|
465
|
+
<div class="ttc" id="classSVF_1_1CHNode_html"><div class="ttname"><a href="classSVF_1_1CHNode.html">SVF::CHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00104">CHG.h:104</a></div></div>
|
|
466
|
+
<div class="ttc" id="classSVF_1_1CHNode_html_a600b63dac83e526c933c141d4e2bcc0c"><div class="ttname"><a href="classSVF_1_1CHNode.html#a600b63dac83e526c933c141d4e2bcc0c">SVF::CHNode::getVTable</a></div><div class="ttdeci">const GlobalValue * getVTable() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00177">CHG.h:177</a></div></div>
|
|
467
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00037">CHGBuilder.h:37</a></div></div>
|
|
468
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a5e6502c5baad99c70e1cf56c84ce9474"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a5e6502c5baad99c70e1cf56c84ce9474">SVF::CHGraph::csToCHAVFnsMap</a></div><div class="ttdeci">CallSiteToVFunSetMap csToCHAVFnsMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00323">CHG.h:323</a></div></div>
|
|
469
|
+
<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="BasicTypes_8h_source.html#l00082">BasicTypes.h:82</a></div></div>
|
|
470
|
+
<div class="ttc" id="namespaceSVF_html_ad2b487757f1e1a1d81073120fc1d49c7"><div class="ttname"><a href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7">SVF::VFunSet</a></div><div class="ttdeci">Set< const SVFFunction * > VFunSet</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00047">CHG.h:47</a></div></div>
|
|
471
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_adbff217477a779de9024d9a5777413a7"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#adbff217477a779de9024d9a5777413a7">SVF::CHGBuilder::CHNodeSetTy</a></div><div class="ttdeci">CHGraph::CHNodeSetTy CHNodeSetTy</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00040">CHGBuilder.h:40</a></div></div>
|
|
472
|
+
<div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a267169023fc4f8dd66b145f7231fec11"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SVF::SymbolTableInfo::SymbolInfo</a></div><div class="ttdeci">static SymbolTableInfo * SymbolInfo()</div><div class="ttdoc">Singleton design here to make sure we only have one instance during any analysis. ...</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00059">SymbolTableInfo.cpp:59</a></div></div>
|
|
473
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_ac5f5646db24455609cd86c421774dd3e"><div class="ttname"><a href="classSVF_1_1CHGraph.html#ac5f5646db24455609cd86c421774dd3e">SVF::CHGraph::getVFnsFromVtbls</a></div><div class="ttdeci">void getVFnsFromVtbls(CallSite cs, const VTableSet &vtbls, VFunSet &virtualFunctions) override</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00096">CHG.cpp:96</a></div></div>
|
|
474
|
+
<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>
|
|
475
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_af3ed2bee5d76e5a848b250950c3be333"><div class="ttname"><a href="classSVF_1_1CHGraph.html#af3ed2bee5d76e5a848b250950c3be333">SVF::CHGraph::csToCHAVtblsMap</a></div><div class="ttdeci">CallSiteToVTableSetMap csToCHAVtblsMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00322">CHG.h:322</a></div></div>
|
|
476
|
+
<div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00303">BasicTypes.h:303</a></div></div>
|
|
477
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_adc3e52b70db841cb1566a1fb855256b6"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#adc3e52b70db841cb1566a1fb855256b6">SVF::CHGBuilder::getCSClasses</a></div><div class="ttdeci">const CHNodeSetTy & getCSClasses(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00672">CHGBuilder.cpp:672</a></div></div>
|
|
478
|
+
</div><!-- fragment -->
|
|
479
|
+
</div>
|
|
480
|
+
</div>
|
|
481
|
+
<a id="ad9f1c51ba6dc279f22aa671f29257a50"></a>
|
|
482
|
+
<h2 class="memtitle"><span class="permalink"><a href="#ad9f1c51ba6dc279f22aa671f29257a50">◆ </a></span>buildInternalMaps()</h2>
|
|
483
|
+
|
|
484
|
+
<div class="memitem">
|
|
485
|
+
<div class="memproto">
|
|
486
|
+
<table class="memname">
|
|
487
|
+
<tr>
|
|
488
|
+
<td class="memname">void CHGBuilder::buildInternalMaps </td>
|
|
489
|
+
<td>(</td>
|
|
490
|
+
<td class="paramname"></td><td>)</td>
|
|
491
|
+
<td></td>
|
|
492
|
+
</tr>
|
|
493
|
+
</table>
|
|
494
|
+
</div><div class="memdoc">
|
|
495
|
+
|
|
496
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00157">157</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
|
|
497
|
+
<div class="fragment"><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>  <a class="code" href="classSVF_1_1CHGBuilder.html#ae7832c277f0ff86f3ae750aac6063adb">buildClassNameToAncestorsDescendantsMap</a>();</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#aa677ac2c640ee7fc0dab1d4fe508ead8">buildVirtualFunctionToIDMap</a>();</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#abab6d95945a43fbe4c73ac12550f5d8c">buildCSToCHAVtblsAndVfnsMap</a>();</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> }</div><div class="ttc" id="classSVF_1_1CHGBuilder_html_ae7832c277f0ff86f3ae750aac6063adb"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ae7832c277f0ff86f3ae750aac6063adb">SVF::CHGBuilder::buildClassNameToAncestorsDescendantsMap</a></div><div class="ttdeci">void buildClassNameToAncestorsDescendantsMap()</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00268">CHGBuilder.cpp:268</a></div></div>
|
|
498
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_abab6d95945a43fbe4c73ac12550f5d8c"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#abab6d95945a43fbe4c73ac12550f5d8c">SVF::CHGBuilder::buildCSToCHAVtblsAndVfnsMap</a></div><div class="ttdeci">void buildCSToCHAVtblsAndVfnsMap()</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00640">CHGBuilder.cpp:640</a></div></div>
|
|
499
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_aa677ac2c640ee7fc0dab1d4fe508ead8"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#aa677ac2c640ee7fc0dab1d4fe508ead8">SVF::CHGBuilder::buildVirtualFunctionToIDMap</a></div><div class="ttdeci">void buildVirtualFunctionToIDMap()</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00541">CHGBuilder.cpp:541</a></div></div>
|
|
500
|
+
</div><!-- fragment -->
|
|
501
|
+
</div>
|
|
502
|
+
</div>
|
|
503
|
+
<a id="aa677ac2c640ee7fc0dab1d4fe508ead8"></a>
|
|
504
|
+
<h2 class="memtitle"><span class="permalink"><a href="#aa677ac2c640ee7fc0dab1d4fe508ead8">◆ </a></span>buildVirtualFunctionToIDMap()</h2>
|
|
505
|
+
|
|
506
|
+
<div class="memitem">
|
|
507
|
+
<div class="memproto">
|
|
508
|
+
<table class="memname">
|
|
509
|
+
<tr>
|
|
510
|
+
<td class="memname">void CHGBuilder::buildVirtualFunctionToIDMap </td>
|
|
511
|
+
<td>(</td>
|
|
512
|
+
<td class="paramname"></td><td>)</td>
|
|
513
|
+
<td></td>
|
|
514
|
+
</tr>
|
|
515
|
+
</table>
|
|
516
|
+
</div><div class="memdoc">
|
|
517
|
+
|
|
518
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00541">541</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
|
|
519
|
+
<div class="fragment"><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> {</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <span class="comment">/*</span></div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="comment"> * 1. Divide classes into groups</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="comment"> * 2. Get all virtual functions in a group</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="comment"> * 3. Assign consecutive IDs to virtual functions that have</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="comment"> * the same name (after demangling) in a group</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="comment"> */</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <a class="code" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHGraph::CHNodeSetTy</a> visitedNodes;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">CHGraph::const_iterator</a> nit = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  neit = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); nit != neit; ++nit)</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *node = nit->second;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="keywordflow">if</span> (visitedNodes.find(node) != visitedNodes.end())</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="keywordtype">string</span> className = node-><a class="code" href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">getName</a>();</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> </div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="comment">/*</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="comment"> * get all the classes in a specific group</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="comment"> */</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <a class="code" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHGraph::CHNodeSetTy</a> group;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  stack<const CHNode*> nodeStack;</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  nodeStack.push(node);</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="keywordflow">while</span> (!nodeStack.empty())</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *curnode = nodeStack.top();</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  nodeStack.pop();</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  group.insert(curnode);</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">if</span> (visitedNodes.find(curnode) != visitedNodes.end())</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">for</span> (CHEdge::CHEdgeSetTy::const_iterator it = curnode-><a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().begin(),</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  eit = curnode-><a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().end(); it != eit; ++it)</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>  <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *tmpnode = (*it)->getDstNode();</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  nodeStack.push(tmpnode);</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  group.insert(tmpnode);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="keywordflow">for</span> (CHEdge::CHEdgeSetTy::const_iterator it = curnode-><a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>().begin(),</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  eit = curnode-><a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>().end(); it != eit; ++it)</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  {</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *tmpnode = (*it)->getSrcNode();</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  nodeStack.push(tmpnode);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  group.insert(tmpnode);</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  }</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  visitedNodes.insert(curnode);</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span> </div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="comment">/*</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="comment"> * get all virtual functions in a specific group</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="comment"> */</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  set<const SVFFunction*> virtualFunctions;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keywordflow">for</span> (CHGraph::CHNodeSetTy::iterator it = group.begin(),</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  eit = group.end(); it != eit; ++it)</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="keyword">const</span> vector<CHNode::FuncVector> &vecs = (*it)-><a class="code" href="classSVF_1_1CHNode.html#a5df1cf4d51bf3406d188c96bc9aae0af">getVirtualFunctionVectors</a>();</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="keywordflow">for</span> (vector<CHNode::FuncVector>::const_iterator vit = vecs.begin(),</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  veit = vecs.end(); vit != veit; ++vit)</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  {</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="keywordflow">for</span> (vector<const SVFFunction*>::const_iterator fit = (*vit).begin(),</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  feit = (*vit).end(); fit != feit; ++fit)</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  {</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  virtualFunctions.insert(*fit);</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  }</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>  }</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span> </div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <span class="comment">/*</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="comment"> * build a set of pairs of demangled function name and function in a</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="comment"> * specific group, items in the set will be sort by the first item of the</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="comment"> * pair, so all the virtual functions in a group will be sorted by the</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="comment"> * demangled function name</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="comment"> * <f, A::f></span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="comment"> * <f, B::f></span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="comment"> * <g, A::g></span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="comment"> * <g, B::g></span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="comment"> * <g, C::g></span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="comment"> * <~A, A::~A></span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="comment"> * <~B, B::~B></span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="comment"> * <~C, C::~C></span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="comment"> * ...</span></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="comment"> */</span></div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  set<pair<string, const SVFFunction*> > fNameSet;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keywordflow">for</span> (set<const SVFFunction*>::iterator fit = virtualFunctions.begin(),</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  feit = virtualFunctions.end(); fit != feit; ++fit)</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  {</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* f = *fit;</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keyword">struct </span>DemangledName dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">demangle</a>(f-><a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>().str());</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  fNameSet.insert(pair<string, const SVFFunction*>(dname.funcName, f));</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>  <span class="keywordflow">for</span> (<span class="keyword">set</span><pair<string, const SVFFunction*>>::iterator it = fNameSet.begin(),</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  eit = fNameSet.end(); it != eit; ++it)</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  {</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a6a581e9b4105745c518124b494b41c63">virtualFunctionToIDMap</a>[it->second] = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a1cf155a56d1a3b3c3ab1a3d593e1afcd">vfID</a>++;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  }</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  }</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> }</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::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#l00361">GenericGraph.h:361</a></div></div>
|
|
520
|
+
<div class="ttc" id="classSVF_1_1GenericNode_html_afc8b5f86d7795b6a0dfc0687d942d79b"><div class="ttname"><a href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">SVF::GenericNode::getInEdges</a></div><div class="ttdeci">const GEdgeSetTy & getInEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00182">GenericGraph.h:182</a></div></div>
|
|
521
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a6a581e9b4105745c518124b494b41c63"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a6a581e9b4105745c518124b494b41c63">SVF::CHGraph::virtualFunctionToIDMap</a></div><div class="ttdeci">Map< const SVFFunction *, s32_t > virtualFunctionToIDMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00321">CHG.h:321</a></div></div>
|
|
522
|
+
<div class="ttc" id="classSVF_1_1CHNode_html"><div class="ttname"><a href="classSVF_1_1CHNode.html">SVF::CHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00104">CHG.h:104</a></div></div>
|
|
523
|
+
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00233">BasicTypes.h:233</a></div></div>
|
|
524
|
+
<div class="ttc" id="classSVF_1_1SVFValue_html_adc15c1f7a77158142156fba7524e89c9"><div class="ttname"><a href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">SVF::SVFValue::getName</a></div><div class="ttdeci">const llvm::StringRef getName() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00231">SVFBasicTypes.h:231</a></div></div>
|
|
525
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_ad0f60c720b277c60ed8a8966189bb42b"><div class="ttname"><a href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">SVF::CHGraph::CHNodeSetTy</a></div><div class="ttdeci">Set< const CHNode * > CHNodeSetTy</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00213">CHG.h:213</a></div></div>
|
|
526
|
+
<div class="ttc" id="classSVF_1_1GenericGraph_html_a5dfa3f178d4abf37177d0d74ff4c6a97"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">SVF::GenericGraph::const_iterator</a></div><div class="ttdeci">IDToNodeMapTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00339">GenericGraph.h:339</a></div></div>
|
|
527
|
+
<div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
|
|
528
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00037">CHGBuilder.h:37</a></div></div>
|
|
529
|
+
<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#l00178">GenericGraph.h:178</a></div></div>
|
|
530
|
+
<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>
|
|
531
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a1cf155a56d1a3b3c3ab1a3d593e1afcd"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a1cf155a56d1a3b3c3ab1a3d593e1afcd">SVF::CHGraph::vfID</a></div><div class="ttdeci">s32_t vfID</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00312">CHG.h:312</a></div></div>
|
|
532
|
+
<div class="ttc" id="classSVF_1_1CHNode_html_af6e71c1a932464b1b615fc177f5af089"><div class="ttname"><a href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">SVF::CHNode::getName</a></div><div class="ttdeci">std::string getName() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00123">CHG.h:123</a></div></div>
|
|
533
|
+
<div class="ttc" id="classSVF_1_1CHNode_html_a5df1cf4d51bf3406d188c96bc9aae0af"><div class="ttname"><a href="classSVF_1_1CHNode.html#a5df1cf4d51bf3406d188c96bc9aae0af">SVF::CHNode::getVirtualFunctionVectors</a></div><div class="ttdeci">const std::vector< FuncVector > & getVirtualFunctionVectors() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00171">CHG.h:171</a></div></div>
|
|
534
|
+
</div><!-- fragment -->
|
|
535
|
+
</div>
|
|
536
|
+
</div>
|
|
537
|
+
<a id="a06db89019c094ad35bea97be1d3b452a"></a>
|
|
538
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a06db89019c094ad35bea97be1d3b452a">◆ </a></span>connectInheritEdgeViaCall()</h2>
|
|
539
|
+
|
|
540
|
+
<div class="memitem">
|
|
541
|
+
<div class="memproto">
|
|
542
|
+
<table class="memname">
|
|
543
|
+
<tr>
|
|
544
|
+
<td class="memname">void CHGBuilder::connectInheritEdgeViaCall </td>
|
|
545
|
+
<td>(</td>
|
|
546
|
+
<td class="paramtype">const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> * </td>
|
|
547
|
+
<td class="paramname"><em>caller</em>, </td>
|
|
548
|
+
</tr>
|
|
549
|
+
<tr>
|
|
550
|
+
<td class="paramkey"></td>
|
|
551
|
+
<td></td>
|
|
552
|
+
<td class="paramtype"><a class="el" href="classSVF_1_1CallSite.html">CallSite</a> </td>
|
|
553
|
+
<td class="paramname"><em>cs</em> </td>
|
|
554
|
+
</tr>
|
|
555
|
+
<tr>
|
|
556
|
+
<td></td>
|
|
557
|
+
<td>)</td>
|
|
558
|
+
<td></td><td></td>
|
|
559
|
+
</tr>
|
|
560
|
+
</table>
|
|
561
|
+
</div><div class="memdoc">
|
|
562
|
+
|
|
563
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00164">164</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
|
|
564
|
+
<div class="fragment"><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">getCallee</a>(cs) == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">getCallee</a>(cs)-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>();</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* caller = callerfun-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>();</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keyword">struct </span>DemangledName dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">demangle</a>(caller->getName().str());</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">if</span> ((<a class="code" href="namespaceSVF_1_1cppUtil.html#ad6f9578cdce518141772a11617160da8">isConstructor</a>(caller) && <a class="code" href="namespaceSVF_1_1cppUtil.html#ad6f9578cdce518141772a11617160da8">isConstructor</a>(callee)) || (<a class="code" href="namespaceSVF_1_1cppUtil.html#af19bec54621f4605bac4feaf9f73803c">isDestructor</a>(caller) && <a class="code" href="namespaceSVF_1_1cppUtil.html#af19bec54621f4605bac4feaf9f73803c">isDestructor</a>(callee)))</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>  <span class="keywordflow">if</span> (cs.<a class="code" href="classSVF_1_1CallSite.html#a145676880fce313b4634d14118476c27">arg_size</a>() < 1 || (cs.<a class="code" href="classSVF_1_1CallSite.html#a145676880fce313b4634d14118476c27">arg_size</a>() < 2 && cs.<a class="code" href="classSVF_1_1CallSite.html#a15a98a5e0fe91f0e239a052acd029cc2">paramHasAttr</a>(0, llvm::Attribute::StructRet)))</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *csThisPtr = <a class="code" href="namespaceSVF_1_1cppUtil.html#a7c9507812041b5de8dbbca5b602fefbd">getVCallThisPtr</a>(cs);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="comment">//const Argument *consThisPtr = getConstructorThisPtr(caller);</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="comment">//bool samePtr = isSameThisPtrInConstructor(consThisPtr, csThisPtr);</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordtype">bool</span> samePtrTrue = <span class="keyword">true</span>;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">if</span> (csThisPtr != <span class="keyword">nullptr</span> && samePtrTrue)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">struct </span>DemangledName basename = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">demangle</a>(callee->getName().str());</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1SVFUtil.html#a2e08ce822223842fa6a73fd659b1a526">SVFUtil::isCallSite</a>(csThisPtr) &&</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  basename.className.size() > 0)</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a3867db3e76f068bd8c4399b103dcd0b7">addEdge</a>(dname.className, basename.className, <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">CHEdge::INHERITANCE</a>);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  }</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>  }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> }</div><div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a2e08ce822223842fa6a73fd659b1a526"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a2e08ce822223842fa6a73fd659b1a526">SVF::SVFUtil::isCallSite</a></div><div class="ttdeci">bool isCallSite(const Instruction *inst)</div><div class="ttdoc">Whether an instruction is a call or invoke instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00193">SVFUtil.h:193</a></div></div>
|
|
565
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_ad6f9578cdce518141772a11617160da8"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#ad6f9578cdce518141772a11617160da8">SVF::cppUtil::isConstructor</a></div><div class="ttdeci">bool isConstructor(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00453">CPPUtil.cpp:453</a></div></div>
|
|
566
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_af19bec54621f4605bac4feaf9f73803c"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#af19bec54621f4605bac4feaf9f73803c">SVF::cppUtil::isDestructor</a></div><div class="ttdeci">bool isDestructor(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00484">CPPUtil.cpp:484</a></div></div>
|
|
567
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00037">CHGBuilder.h:37</a></div></div>
|
|
568
|
+
<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="BasicTypes_8h_source.html#l00076">BasicTypes.h:76</a></div></div>
|
|
569
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_a7c9507812041b5de8dbbca5b602fefbd"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a7c9507812041b5de8dbbca5b602fefbd">SVF::cppUtil::getVCallThisPtr</a></div><div class="ttdeci">const Value * getVCallThisPtr(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00314">CPPUtil.cpp:314</a></div></div>
|
|
570
|
+
<div class="ttc" id="classSVF_1_1CHEdge_html_a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c"><div class="ttname"><a href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">SVF::CHEdge::INHERITANCE</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00082">CHG.h:82</a></div></div>
|
|
571
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a3867db3e76f068bd8c4399b103dcd0b7"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a3867db3e76f068bd8c4399b103dcd0b7">SVF::CHGraph::addEdge</a></div><div class="ttdeci">void addEdge(const std::string className, const std::string baseClassName, CHEdge::CHEDGETYPE edgeType)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00069">CHG.cpp:69</a></div></div>
|
|
572
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a145abbd2958629718fbca41d25c3124d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVF::SVFUtil::getCallee</a></div><div class="ttdeci">const SVFFunction * getCallee(const CallSite cs)</div><div class="ttdoc">Return callee of a callsite. Return null if this is an indirect call. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00268">SVFUtil.h:268</a></div></div>
|
|
573
|
+
<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="BasicTypes_8h_source.html#l00316">BasicTypes.h:316</a></div></div>
|
|
574
|
+
<div class="ttc" id="classSVF_1_1CallSite_html_a15a98a5e0fe91f0e239a052acd029cc2"><div class="ttname"><a href="classSVF_1_1CallSite.html#a15a98a5e0fe91f0e239a052acd029cc2">SVF::CallSite::paramHasAttr</a></div><div class="ttdeci">bool paramHasAttr(unsigned ArgNo, llvm::Attribute::AttrKind Kind) const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00324">BasicTypes.h:324</a></div></div>
|
|
575
|
+
<div class="ttc" id="classSVF_1_1SVFFunction_html_ac4ae917ae35ac6fca652fe2dd90a8ac2"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">SVF::SVFFunction::getLLVMFun</a></div><div class="ttdeci">Function * getLLVMFun() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00249">BasicTypes.h:249</a></div></div>
|
|
576
|
+
<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>
|
|
577
|
+
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
|
|
578
|
+
</div><!-- fragment -->
|
|
579
|
+
</div>
|
|
580
|
+
</div>
|
|
581
|
+
<a id="acbdf97de6a24cec8d0ae020e3bfb79e6"></a>
|
|
582
|
+
<h2 class="memtitle"><span class="permalink"><a href="#acbdf97de6a24cec8d0ae020e3bfb79e6">◆ </a></span>connectInheritEdgeViaStore()</h2>
|
|
583
|
+
|
|
584
|
+
<div class="memitem">
|
|
585
|
+
<div class="memproto">
|
|
586
|
+
<table class="memname">
|
|
587
|
+
<tr>
|
|
588
|
+
<td class="memname">void CHGBuilder::connectInheritEdgeViaStore </td>
|
|
589
|
+
<td>(</td>
|
|
590
|
+
<td class="paramtype">const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> * </td>
|
|
591
|
+
<td class="paramname"><em>caller</em>, </td>
|
|
592
|
+
</tr>
|
|
593
|
+
<tr>
|
|
594
|
+
<td class="paramkey"></td>
|
|
595
|
+
<td></td>
|
|
596
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> * </td>
|
|
597
|
+
<td class="paramname"><em>store</em> </td>
|
|
598
|
+
</tr>
|
|
599
|
+
<tr>
|
|
600
|
+
<td></td>
|
|
601
|
+
<td>)</td>
|
|
602
|
+
<td></td><td></td>
|
|
603
|
+
</tr>
|
|
604
|
+
</table>
|
|
605
|
+
</div><div class="memdoc">
|
|
606
|
+
|
|
607
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00193">193</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
|
|
608
|
+
<div class="fragment"><div class="line"><a name="l00194"></a><span class="lineno"> 194</span> {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keyword">struct </span>DemangledName dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">demangle</a>(caller-><a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>().str());</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *ce = SVFUtil::dyn_cast<ConstantExpr>(storeInst->getValueOperand()))</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">if</span> (ce->getOpcode() == Instruction::BitCast)</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *bitcastval = ce->getOperand(0);</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *bcce = SVFUtil::dyn_cast<ConstantExpr>(bitcastval))</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>  <span class="keywordflow">if</span> (bcce->getOpcode() == Instruction::GetElementPtr)</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  {</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *gepval = bcce->getOperand(0);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">isValVtbl</a>(gepval))</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordtype">string</span> vtblClassName = <a class="code" href="namespaceSVF_1_1cppUtil.html#ad83c097f1c77cdf52fc219ef07ee0b1a">getClassNameFromVtblObj</a>(gepval);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">if</span> (vtblClassName.size() > 0 && dname.className.compare(vtblClassName) != 0)</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>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a3867db3e76f068bd8c4399b103dcd0b7">addEdge</a>(dname.className, vtblClassName, <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">CHEdge::INHERITANCE</a>);</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="classSVF_1_1SVFValue_html_adc15c1f7a77158142156fba7524e89c9"><div class="ttname"><a href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">SVF::SVFValue::getName</a></div><div class="ttdeci">const llvm::StringRef getName() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00231">SVFBasicTypes.h:231</a></div></div>
|
|
609
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_ad83c097f1c77cdf52fc219ef07ee0b1a"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#ad83c097f1c77cdf52fc219ef07ee0b1a">SVF::cppUtil::getClassNameFromVtblObj</a></div><div class="ttdeci">std::string getClassNameFromVtblObj(const Value *value)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00433">CPPUtil.cpp:433</a></div></div>
|
|
610
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00037">CHGBuilder.h:37</a></div></div>
|
|
611
|
+
<div class="ttc" id="classSVF_1_1CHEdge_html_a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c"><div class="ttname"><a href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">SVF::CHEdge::INHERITANCE</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00082">CHG.h:82</a></div></div>
|
|
612
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_aeef0f5c6486379043a7d47b0635f2667"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">SVF::cppUtil::isValVtbl</a></div><div class="ttdeci">bool isValVtbl(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00123">CPPUtil.cpp:123</a></div></div>
|
|
613
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a3867db3e76f068bd8c4399b103dcd0b7"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a3867db3e76f068bd8c4399b103dcd0b7">SVF::CHGraph::addEdge</a></div><div class="ttdeci">void addEdge(const std::string className, const std::string baseClassName, CHEdge::CHEDGETYPE edgeType)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00069">CHG.cpp:69</a></div></div>
|
|
614
|
+
<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>
|
|
615
|
+
<div class="ttc" id="namespaceSVF_html_a911dbaab38cb42deb9c195c7f687853d"><div class="ttname"><a href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">SVF::ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00131">BasicTypes.h:131</a></div></div>
|
|
616
|
+
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
|
|
617
|
+
</div><!-- fragment -->
|
|
618
|
+
</div>
|
|
619
|
+
</div>
|
|
620
|
+
<a id="a8e915f257224b1d8e40d0e4c9b5e1df0"></a>
|
|
621
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a8e915f257224b1d8e40d0e4c9b5e1df0">◆ </a></span>createNode()</h2>
|
|
622
|
+
|
|
623
|
+
<div class="memitem">
|
|
624
|
+
<div class="memproto">
|
|
625
|
+
<table class="memname">
|
|
626
|
+
<tr>
|
|
627
|
+
<td class="memname"><a class="el" href="classSVF_1_1CHNode.html">CHNode</a> * CHGBuilder::createNode </td>
|
|
628
|
+
<td>(</td>
|
|
629
|
+
<td class="paramtype">const std::string </td>
|
|
630
|
+
<td class="paramname"><em>name</em></td><td>)</td>
|
|
631
|
+
<td></td>
|
|
632
|
+
</tr>
|
|
633
|
+
</table>
|
|
634
|
+
</div><div class="memdoc">
|
|
635
|
+
|
|
636
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00241">241</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
|
|
637
|
+
<div class="fragment"><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> {</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">getNode</a>(className) && <span class="stringliteral">"this node should never be created before!"</span>);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> * node = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CHNode.html">CHNode</a>(className, <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#adb99b732d20cfc8cc0f078cda6753bc0">classNum</a>++);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#aa040bc0a5653843419d24777343e1650">classNameToNodeMap</a>[className] = node;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0a8831a5429005ff9d71adbd6bf3994f">addGNode</a>(node->getId(), node);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">if</span> (className.size() > 0 && className[className.size() - 1] == <span class="charliteral">'>'</span>)</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  {</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordtype">string</span> templateName = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">getBeforeBrackets</a>(className);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <a class="code" href="classSVF_1_1CHNode.html">CHNode</a>* templateNode = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">getNode</a>(templateName);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">if</span> (!templateNode)</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  {</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a263149d980e5c3165dfe8750bfac3223">DCHA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t Create Template CHANode "</span> + templateName + <span class="stringliteral">" for class "</span> + className + <span class="stringliteral">"...\n"</span>);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  templateNode = <a class="code" href="classSVF_1_1CHGBuilder.html#a8e915f257224b1d8e40d0e4c9b5e1df0">createNode</a>(templateName);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  templateNode-><a class="code" href="classSVF_1_1CHNode.html#a00343177422c8d84d707432d0c483438">setTemplate</a>();</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  }</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a3867db3e76f068bd8c4399b103dcd0b7">addEdge</a>(className, templateName, <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a8721eaefd547d6ba5229463d644815f4">CHEdge::INSTANTCE</a>);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a5ee7e559425045f3af5c35ea6d6f03ee">addInstances</a>(templateName,node);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  }</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">return</span> node;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</div><div class="ttc" id="classSVF_1_1CHGBuilder_html_a8e915f257224b1d8e40d0e4c9b5e1df0"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#a8e915f257224b1d8e40d0e4c9b5e1df0">SVF::CHGBuilder::createNode</a></div><div class="ttdeci">CHNode * createNode(const std::string name)</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00241">CHGBuilder.cpp:241</a></div></div>
|
|
638
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_adb99b732d20cfc8cc0f078cda6753bc0"><div class="ttname"><a href="classSVF_1_1CHGraph.html#adb99b732d20cfc8cc0f078cda6753bc0">SVF::CHGraph::classNum</a></div><div class="ttdeci">u32_t classNum</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00311">CHG.h:311</a></div></div>
|
|
639
|
+
<div class="ttc" id="SVFBasicTypes_8h_html_a263149d980e5c3165dfe8750bfac3223"><div class="ttname"><a href="SVFBasicTypes_8h.html#a263149d980e5c3165dfe8750bfac3223">DCHA</a></div><div class="ttdeci">#define DCHA</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00170">SVFBasicTypes.h:170</a></div></div>
|
|
640
|
+
<div class="ttc" id="classSVF_1_1CHNode_html"><div class="ttname"><a href="classSVF_1_1CHNode.html">SVF::CHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00104">CHG.h:104</a></div></div>
|
|
641
|
+
<div class="ttc" id="classSVF_1_1CHNode_html_a00343177422c8d84d707432d0c483438"><div class="ttname"><a href="classSVF_1_1CHNode.html#a00343177422c8d84d707432d0c483438">SVF::CHNode::setTemplate</a></div><div class="ttdeci">void setTemplate()</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00149">CHG.h:149</a></div></div>
|
|
642
|
+
<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>
|
|
643
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a7beec68a60036c93a741a7152e8198b6"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">SVF::CHGraph::getNode</a></div><div class="ttdeci">CHNode * getNode(const std::string name) const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00084">CHG.cpp:84</a></div></div>
|
|
644
|
+
<div class="ttc" id="classSVF_1_1CHEdge_html_a26280c3b724551036f7e3ba2b5922676a8721eaefd547d6ba5229463d644815f4"><div class="ttname"><a href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a8721eaefd547d6ba5229463d644815f4">SVF::CHEdge::INSTANTCE</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00083">CHG.h:83</a></div></div>
|
|
645
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00037">CHGBuilder.h:37</a></div></div>
|
|
646
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a5ee7e559425045f3af5c35ea6d6f03ee"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a5ee7e559425045f3af5c35ea6d6f03ee">SVF::CHGraph::addInstances</a></div><div class="ttdeci">void addInstances(const std::string templateName, CHNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00262">CHG.h:262</a></div></div>
|
|
647
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a3867db3e76f068bd8c4399b103dcd0b7"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a3867db3e76f068bd8c4399b103dcd0b7">SVF::CHGraph::addEdge</a></div><div class="ttdeci">void addEdge(const std::string className, const std::string baseClassName, CHEdge::CHEDGETYPE edgeType)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00069">CHG.cpp:69</a></div></div>
|
|
648
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_a1cf2e4671b16b477cc779c72f2419234"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">SVF::cppUtil::getBeforeBrackets</a></div><div class="ttdeci">std::string getBeforeBrackets(const std::string &name)</div></div>
|
|
649
|
+
<div class="ttc" id="classSVF_1_1GenericGraph_html_a0a8831a5429005ff9d71adbd6bf3994f"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0a8831a5429005ff9d71adbd6bf3994f">SVF::GenericGraph::addGNode</a></div><div class="ttdeci">void addGNode(NodeID id, NodeType *node)</div><div class="ttdoc">Add a Node. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00380">GenericGraph.h:380</a></div></div>
|
|
650
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
651
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_aa040bc0a5653843419d24777343e1650"><div class="ttname"><a href="classSVF_1_1CHGraph.html#aa040bc0a5653843419d24777343e1650">SVF::CHGraph::classNameToNodeMap</a></div><div class="ttdeci">Map< std::string, CHNode * > classNameToNodeMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00314">CHG.h:314</a></div></div>
|
|
652
|
+
<div class="ttc" id="SVFBasicTypes_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DEBUG model of each pass. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00149">SVFBasicTypes.h:149</a></div></div>
|
|
653
|
+
</div><!-- fragment -->
|
|
654
|
+
</div>
|
|
655
|
+
</div>
|
|
656
|
+
<a id="adc3e52b70db841cb1566a1fb855256b6"></a>
|
|
657
|
+
<h2 class="memtitle"><span class="permalink"><a href="#adc3e52b70db841cb1566a1fb855256b6">◆ </a></span>getCSClasses()</h2>
|
|
658
|
+
|
|
659
|
+
<div class="memitem">
|
|
660
|
+
<div class="memproto">
|
|
661
|
+
<table class="memname">
|
|
662
|
+
<tr>
|
|
663
|
+
<td class="memname">const <a class="el" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHGraph::CHNodeSetTy</a> & CHGBuilder::getCSClasses </td>
|
|
664
|
+
<td>(</td>
|
|
665
|
+
<td class="paramtype"><a class="el" href="classSVF_1_1CallSite.html">CallSite</a> </td>
|
|
666
|
+
<td class="paramname"><em>cs</em></td><td>)</td>
|
|
667
|
+
<td></td>
|
|
668
|
+
</tr>
|
|
669
|
+
</table>
|
|
670
|
+
</div><div class="memdoc">
|
|
671
|
+
|
|
672
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00672">672</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
|
|
673
|
+
<div class="fragment"><div class="line"><a name="l00673"></a><span class="lineno"> 673</span> {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="namespaceSVF_1_1cppUtil.html#aca6465c72effcaddeb34f55da4555754">isVirtualCallSite</a>(cs) && <span class="stringliteral">"not virtual callsite!"</span>);</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span> </div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  CHGraph::CallSiteToCHNodesMap::const_iterator it = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a7ef9982d89a4932883bd58bc49ad9986">csToClassesMap</a>.find(cs);</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordflow">if</span> (it != <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a7ef9982d89a4932883bd58bc49ad9986">csToClassesMap</a>.end())</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keywordflow">return</span> it->second;</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>  <span class="keywordflow">else</span></div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordtype">string</span> thisPtrClassName = <a class="code" href="namespaceSVF_1_1cppUtil.html#a3bed7bc0a0ae580841ca049f91690ff7">getClassNameOfThisPtr</a>(cs);</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CHNode.html">CHNode</a>* thisNode = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">getNode</a>(thisPtrClassName))</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  {</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHGraph::CHNodeSetTy</a>& instAndDesces = <a class="code" href="classSVF_1_1CHGBuilder.html#a444dba7f18bee07a6cad51f88bb63e30">getInstancesAndDescendants</a>(thisPtrClassName);</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a7ef9982d89a4932883bd58bc49ad9986">csToClassesMap</a>[cs].insert(thisNode);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="keywordflow">for</span> (CHGraph::CHNodeSetTy::const_iterator it = instAndDesces.begin(), eit = instAndDesces.end(); it != eit; ++it)</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a7ef9982d89a4932883bd58bc49ad9986">csToClassesMap</a>[cs].insert(*it);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  }</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a7ef9982d89a4932883bd58bc49ad9986">csToClassesMap</a>[cs];</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  }</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span> }</div><div class="ttc" id="namespaceSVF_1_1cppUtil_html_aca6465c72effcaddeb34f55da4555754"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#aca6465c72effcaddeb34f55da4555754">SVF::cppUtil::isVirtualCallSite</a></div><div class="ttdeci">bool isVirtualCallSite(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00257">CPPUtil.cpp:257</a></div></div>
|
|
674
|
+
<div class="ttc" id="classSVF_1_1CHNode_html"><div class="ttname"><a href="classSVF_1_1CHNode.html">SVF::CHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00104">CHG.h:104</a></div></div>
|
|
675
|
+
<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>
|
|
676
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a7beec68a60036c93a741a7152e8198b6"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">SVF::CHGraph::getNode</a></div><div class="ttdeci">CHNode * getNode(const std::string name) const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00084">CHG.cpp:84</a></div></div>
|
|
677
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_ad0f60c720b277c60ed8a8966189bb42b"><div class="ttname"><a href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">SVF::CHGraph::CHNodeSetTy</a></div><div class="ttdeci">Set< const CHNode * > CHNodeSetTy</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00213">CHG.h:213</a></div></div>
|
|
678
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00037">CHGBuilder.h:37</a></div></div>
|
|
679
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a7ef9982d89a4932883bd58bc49ad9986"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a7ef9982d89a4932883bd58bc49ad9986">SVF::CHGraph::csToClassesMap</a></div><div class="ttdeci">CallSiteToCHNodesMap csToClassesMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00319">CHG.h:319</a></div></div>
|
|
680
|
+
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_a3bed7bc0a0ae580841ca049f91690ff7"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a3bed7bc0a0ae580841ca049f91690ff7">SVF::cppUtil::getClassNameOfThisPtr</a></div><div class="ttdeci">std::string getClassNameOfThisPtr(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00517">CPPUtil.cpp:517</a></div></div>
|
|
681
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_a444dba7f18bee07a6cad51f88bb63e30"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#a444dba7f18bee07a6cad51f88bb63e30">SVF::CHGBuilder::getInstancesAndDescendants</a></div><div class="ttdeci">const CHGraph::CHNodeSetTy & getInstancesAndDescendants(const std::string className)</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00302">CHGBuilder.cpp:302</a></div></div>
|
|
682
|
+
</div><!-- fragment -->
|
|
683
|
+
</div>
|
|
684
|
+
</div>
|
|
685
|
+
<a id="a444dba7f18bee07a6cad51f88bb63e30"></a>
|
|
686
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a444dba7f18bee07a6cad51f88bb63e30">◆ </a></span>getInstancesAndDescendants()</h2>
|
|
687
|
+
|
|
688
|
+
<div class="memitem">
|
|
689
|
+
<div class="memproto">
|
|
690
|
+
<table class="memname">
|
|
691
|
+
<tr>
|
|
692
|
+
<td class="memname">const <a class="el" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHGraph::CHNodeSetTy</a> & CHGBuilder::getInstancesAndDescendants </td>
|
|
693
|
+
<td>(</td>
|
|
694
|
+
<td class="paramtype">const std::string </td>
|
|
695
|
+
<td class="paramname"><em>className</em></td><td>)</td>
|
|
696
|
+
<td></td>
|
|
697
|
+
</tr>
|
|
698
|
+
</table>
|
|
699
|
+
</div><div class="memdoc">
|
|
700
|
+
|
|
701
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00302">302</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
|
|
702
|
+
<div class="fragment"><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> </div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  CHGraph::NameToCHNodesMap::const_iterator it = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#aaec4bdde66e4a7a63ea3f3c6ec0bd045">classNameToInstAndDescsMap</a>.find(className);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">if</span> (it != <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#aaec4bdde66e4a7a63ea3f3c6ec0bd045">classNameToInstAndDescsMap</a>.end())</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  }</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keywordflow">else</span></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>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#aaec4bdde66e4a7a63ea3f3c6ec0bd045">classNameToInstAndDescsMap</a>[className] = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a26f89a9b269cad3fc894110d25598715">getDescendants</a>(className);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">getNode</a>(className)-><a class="code" href="classSVF_1_1CHNode.html#aff23fda93401c60422a4a5a08d77d749">isTemplate</a>())</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  {</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CHGBuilder.html#adbff217477a779de9024d9a5777413a7">CHNodeSetTy</a>& instances = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a894a69fa143d3f460d433646a0521b6f">getInstances</a>(className);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="keywordflow">for</span> (CHNodeSetTy::const_iterator it = instances.begin(), eit = instances.end(); it != eit; ++it)</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  {</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *node = *it;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#aaec4bdde66e4a7a63ea3f3c6ec0bd045">classNameToInstAndDescsMap</a>[className].insert(node);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CHGBuilder.html#adbff217477a779de9024d9a5777413a7">CHNodeSetTy</a>& instance_descendants = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a26f89a9b269cad3fc894110d25598715">getDescendants</a>(node-><a class="code" href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">getName</a>());</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">for</span> (CHNodeSetTy::const_iterator dit =</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  instance_descendants.begin(), deit =</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  instance_descendants.end(); dit != deit; ++dit)</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  {</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#aaec4bdde66e4a7a63ea3f3c6ec0bd045">classNameToInstAndDescsMap</a>[className].insert(*dit);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  }</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  }</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#aaec4bdde66e4a7a63ea3f3c6ec0bd045">classNameToInstAndDescsMap</a>[className];</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> }</div><div class="ttc" id="classSVF_1_1CHNode_html"><div class="ttname"><a href="classSVF_1_1CHNode.html">SVF::CHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00104">CHG.h:104</a></div></div>
|
|
703
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a7beec68a60036c93a741a7152e8198b6"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">SVF::CHGraph::getNode</a></div><div class="ttdeci">CHNode * getNode(const std::string name) const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00084">CHG.cpp:84</a></div></div>
|
|
704
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_aaec4bdde66e4a7a63ea3f3c6ec0bd045"><div class="ttname"><a href="classSVF_1_1CHGraph.html#aaec4bdde66e4a7a63ea3f3c6ec0bd045">SVF::CHGraph::classNameToInstAndDescsMap</a></div><div class="ttdeci">NameToCHNodesMap classNameToInstAndDescsMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00317">CHG.h:317</a></div></div>
|
|
705
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00037">CHGBuilder.h:37</a></div></div>
|
|
706
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a894a69fa143d3f460d433646a0521b6f"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a894a69fa143d3f460d433646a0521b6f">SVF::CHGraph::getInstances</a></div><div class="ttdeci">const CHNodeSetTy & getInstances(const std::string className)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00275">CHG.h:275</a></div></div>
|
|
707
|
+
<div class="ttc" id="classSVF_1_1CHNode_html_aff23fda93401c60422a4a5a08d77d749"><div class="ttname"><a href="classSVF_1_1CHNode.html#aff23fda93401c60422a4a5a08d77d749">SVF::CHNode::isTemplate</a></div><div class="ttdeci">bool isTemplate() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00161">CHG.h:161</a></div></div>
|
|
708
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_adbff217477a779de9024d9a5777413a7"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#adbff217477a779de9024d9a5777413a7">SVF::CHGBuilder::CHNodeSetTy</a></div><div class="ttdeci">CHGraph::CHNodeSetTy CHNodeSetTy</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00040">CHGBuilder.h:40</a></div></div>
|
|
709
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a26f89a9b269cad3fc894110d25598715"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a26f89a9b269cad3fc894110d25598715">SVF::CHGraph::getDescendants</a></div><div class="ttdeci">const CHNodeSetTy & getDescendants(const std::string className)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00271">CHG.h:271</a></div></div>
|
|
710
|
+
<div class="ttc" id="classSVF_1_1CHNode_html_af6e71c1a932464b1b615fc177f5af089"><div class="ttname"><a href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">SVF::CHNode::getName</a></div><div class="ttdeci">std::string getName() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00123">CHG.h:123</a></div></div>
|
|
711
|
+
</div><!-- fragment -->
|
|
712
|
+
</div>
|
|
713
|
+
</div>
|
|
714
|
+
<a id="a443b021eb2b08b92164515750385b058"></a>
|
|
715
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a443b021eb2b08b92164515750385b058">◆ </a></span>readInheritanceMetadataFromModule()</h2>
|
|
716
|
+
|
|
717
|
+
<div class="memitem">
|
|
718
|
+
<div class="memproto">
|
|
719
|
+
<table class="memname">
|
|
720
|
+
<tr>
|
|
721
|
+
<td class="memname">void CHGBuilder::readInheritanceMetadataFromModule </td>
|
|
722
|
+
<td>(</td>
|
|
723
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> & </td>
|
|
724
|
+
<td class="paramname"><em>M</em></td><td>)</td>
|
|
725
|
+
<td></td>
|
|
726
|
+
</tr>
|
|
727
|
+
</table>
|
|
728
|
+
</div><div class="memdoc">
|
|
729
|
+
|
|
730
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00220">220</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
|
|
731
|
+
<div class="fragment"><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">for</span> (Module::const_named_metadata_iterator mdit = M.named_metadata_begin(),</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  mdeit = M.named_metadata_end(); mdit != mdeit; ++mdit)</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  {</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a3011dbac9102f044ad5f36a4ad3d4a71">NamedMDNode</a> *md = &*mdit;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordtype">string</span> mdname = md->getName().str();</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">if</span> (mdname.compare(0, 15, <span class="stringliteral">"__cxx_bases_of_"</span>) != 0)</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordtype">string</span> className = mdname.substr(15);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">for</span> (NamedMDNode::const_op_iterator opit = md->op_begin(),</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  opeit = md->op_end(); opit != opeit; ++opit)</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  {</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *N = *opit;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a28eec26ec8edaa5e96aecfeb01f6c0d4">MDString</a> &mdstr = SVFUtil::cast<MDString>(N->getOperand(0));</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordtype">string</span> baseName = mdstr.getString().str();</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-><a class="code" href="classSVF_1_1CHGraph.html#a3867db3e76f068bd8c4399b103dcd0b7">addEdge</a>(className, baseName, <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">CHEdge::INHERITANCE</a>);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> }</div><div class="ttc" id="namespaceSVF_html_a28eec26ec8edaa5e96aecfeb01f6c0d4"><div class="ttname"><a href="namespaceSVF.html#a28eec26ec8edaa5e96aecfeb01f6c0d4">SVF::MDString</a></div><div class="ttdeci">llvm::MDString MDString</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00142">BasicTypes.h:142</a></div></div>
|
|
732
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00037">CHGBuilder.h:37</a></div></div>
|
|
733
|
+
<div class="ttc" id="classSVF_1_1CHEdge_html_a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c"><div class="ttname"><a href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">SVF::CHEdge::INHERITANCE</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00082">CHG.h:82</a></div></div>
|
|
734
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html_a3867db3e76f068bd8c4399b103dcd0b7"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a3867db3e76f068bd8c4399b103dcd0b7">SVF::CHGraph::addEdge</a></div><div class="ttdeci">void addEdge(const std::string className, const std::string baseClassName, CHEdge::CHEDGETYPE edgeType)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00069">CHG.cpp:69</a></div></div>
|
|
735
|
+
<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="BasicTypes_8h_source.html#l00143">BasicTypes.h:143</a></div></div>
|
|
736
|
+
<div class="ttc" id="namespaceSVF_html_a3011dbac9102f044ad5f36a4ad3d4a71"><div class="ttname"><a href="namespaceSVF.html#a3011dbac9102f044ad5f36a4ad3d4a71">SVF::NamedMDNode</a></div><div class="ttdeci">llvm::NamedMDNode NamedMDNode</div><div class="ttdoc">LLVM metadata. </div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00141">BasicTypes.h:141</a></div></div>
|
|
737
|
+
</div><!-- fragment -->
|
|
738
|
+
</div>
|
|
739
|
+
</div>
|
|
740
|
+
<h2 class="groupheader">Member Data Documentation</h2>
|
|
741
|
+
<a id="ab3471cc9afba5976c7e5fbd07dfb22dc"></a>
|
|
742
|
+
<h2 class="memtitle"><span class="permalink"><a href="#ab3471cc9afba5976c7e5fbd07dfb22dc">◆ </a></span>chg</h2>
|
|
743
|
+
|
|
744
|
+
<div class="memitem">
|
|
745
|
+
<div class="memproto">
|
|
746
|
+
<table class="mlabels">
|
|
747
|
+
<tr>
|
|
748
|
+
<td class="mlabels-left">
|
|
749
|
+
<table class="memname">
|
|
750
|
+
<tr>
|
|
751
|
+
<td class="memname"><a class="el" href="classSVF_1_1CHGraph.html">CHGraph</a>* SVF::CHGBuilder::chg</td>
|
|
752
|
+
</tr>
|
|
753
|
+
</table>
|
|
754
|
+
</td>
|
|
755
|
+
<td class="mlabels-right">
|
|
756
|
+
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
757
|
+
</tr>
|
|
758
|
+
</table>
|
|
759
|
+
</div><div class="memdoc">
|
|
760
|
+
|
|
761
|
+
<p class="definition">Definition at line <a class="el" href="CHGBuilder_8h_source.html#l00037">37</a> of file <a class="el" href="CHGBuilder_8h_source.html">CHGBuilder.h</a>.</p>
|
|
762
|
+
|
|
763
|
+
</div>
|
|
764
|
+
</div>
|
|
765
|
+
<hr/>The documentation for this class was generated from the following files:<ul>
|
|
766
|
+
<li>/home/runner/work/SVF/SVF/include/SVF-FE/<a class="el" href="CHGBuilder_8h_source.html">CHGBuilder.h</a></li>
|
|
767
|
+
<li>/home/runner/work/SVF/SVF/lib/SVF-FE/<a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a></li>
|
|
768
|
+
</ul>
|
|
769
|
+
</div><!-- contents -->
|
|
770
|
+
<!-- start footer part -->
|
|
771
|
+
<hr class="footer"/><address class="footer"><small>
|
|
772
|
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
|
773
|
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
774
|
+
</a> 1.8.13
|
|
775
|
+
</small></address>
|
|
776
|
+
</body>
|
|
777
|
+
</html>
|