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
|
@@ -66,65 +66,62 @@ $(function() {
|
|
|
66
66
|
<div class="title">PointerAnalysis.cpp</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="PointerAnalysis_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- PointerAnalysis.cpp -- Base class of pointer analyses------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-2017> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * PointerAnalysis.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * Created on: May 14, 2013</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="CallGraphBuilder_8h.html">SVF-FE/CallGraphBuilder.h</a>"</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="CHG_8h.html">SVF-FE/CHG.h</a>"</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="DCHG_8h.html">SVF-FE/DCHG.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="CPPUtil_8h.html">SVF-FE/CPPUtil.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>"</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>"</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include "<a class="code" href="PAGBuilderFromFile_8h.html">MemoryModel/PAGBuilderFromFile.h</a>"</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "<a class="code" href="PTAStat_8h.html">MemoryModel/PTAStat.h</a>"</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="ThreadCallGraph_8h.html">Graphs/ThreadCallGraph.h</a>"</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "<a class="code" href="ICFG_8h.html">Graphs/ICFG.h</a>"</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "<a class="code" href="ExternalPAG_8h.html">Graphs/ExternalPAG.h</a>"</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "<a class="code" href="FlowSensitiveTBHC_8h.html">WPA/FlowSensitiveTBHC.h</a>"</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include <iomanip></span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#include <iostream></span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include <fstream></span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#include <sstream></span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">using namespace </span><a class="code" href="namespacecppUtil.html">cppUtil</a>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <a class="code" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</a>* <a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">PointerAnalysis::chgraph</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">PointerAnalysis::pag</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#a7648a0358e2c0798db1c547ec7aa7c64">PointerAnalysis::aliasTestMayAlias</a> = <span class="stringliteral">"MAYALIAS"</span>;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#a13ce6b930a35877f17bffd4b89e22654">PointerAnalysis::aliasTestMayAliasMangled</a> = <span class="stringliteral">"_Z8MAYALIASPvS_"</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#ac353221cc7aced590dcf3550a24b1570">PointerAnalysis::aliasTestNoAlias</a> = <span class="stringliteral">"NOALIAS"</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#a0e68883e2ee328315af29e59bb2008cd">PointerAnalysis::aliasTestNoAliasMangled</a> = <span class="stringliteral">"_Z7NOALIASPvS_"</span>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#a83b0a51d88fa7aadff6e9267765d07a5">PointerAnalysis::aliasTestPartialAlias</a> = <span class="stringliteral">"PARTIALALIAS"</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#acbb517523fd30708ed1a93f306cd3545">PointerAnalysis::aliasTestPartialAliasMangled</a> = <span class="stringliteral">"_Z12PARTIALALIASPvS_"</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#a7477a4301d548b93958e57df389cbba0">PointerAnalysis::aliasTestMustAlias</a> = <span class="stringliteral">"MUSTALIAS"</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#aec884481726cfaf19c4ab8ec8d9195b7">PointerAnalysis::aliasTestMustAliasMangled</a> = <span class="stringliteral">"_Z9MUSTALIASPvS_"</span>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#a32c6f12ce8bc0554dbb6aafa36f9a235">PointerAnalysis::aliasTestFailMayAlias</a> = <span class="stringliteral">"EXPECTEDFAIL_MAYALIAS"</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#a651cc82379c2d18cc2f69f25b2ae08db">PointerAnalysis::aliasTestFailMayAliasMangled</a> = <span class="stringliteral">"_Z21EXPECTEDFAIL_MAYALIASPvS_"</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#a18347e41bc66b16e3f42c7c52811ad42">PointerAnalysis::aliasTestFailNoAlias</a> = <span class="stringliteral">"EXPECTEDFAIL_NOALIAS"</span>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#aefd4e9ea66da5ad84a45efead823eb22">PointerAnalysis::aliasTestFailNoAliasMangled</a> = <span class="stringliteral">"_Z20EXPECTEDFAIL_NOALIASPvS_"</span>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a14e2a209cb594f91a24ef09b12f82f3f"> 76</a></span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a14e2a209cb594f91a24ef09b12f82f3f">PointerAnalysis::PointerAnalysis</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* p, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> ty, <span class="keywordtype">bool</span> alias_check) :</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  svfMod(nullptr),ptaTy(ty),stat(nullptr),ptaCallGraph(nullptr),callGraphSCC(nullptr),icfg(nullptr),typeSystem(nullptr)</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="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a> = p;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#afc320fbf269404fe128e69c98e6f9cac">OnTheFlyIterBudgetForStat</a> = <a class="code" href="classSVF_1_1Options.html#abae23cb06d932f93900f627813b9f4a4">Options::StatBudget</a>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a3550ea3f087ec557a6fe076bc443b05d">print_stat</a> = <a class="code" href="classSVF_1_1Options.html#a498a1a05a08be1ffd845aefeb0672bcb">Options::PStat</a>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a5d3c3094e263bf16a4f312a118c1bd36">ptaImplTy</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da66b132e5ab8c8746eb22e58d199b4c2a">BaseImpl</a>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#aac1a133d478bd14c74309d9c4eaf0c8e">alias_validation</a> = (alias_check && <a class="code" href="classSVF_1_1Options.html#a4da18281b973b9ffb5068dd53060524c">Options::EnableAliasCheck</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> </div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a4aeca84393c5586eea7a480737daf17c"> 89</a></span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a4aeca84393c5586eea7a480737daf17c">PointerAnalysis::~PointerAnalysis</a>()</div><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>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a03dadb5429e2b84f88713a83153979a8">destroy</a>();</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="comment">// do not delete the SVFIR for now</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="comment">//delete pag;</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a03dadb5429e2b84f88713a83153979a8"> 97</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a03dadb5429e2b84f88713a83153979a8">PointerAnalysis::destroy</a>()</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="keyword">delete</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad47b39252e02c68dfb466d4f42dc7ebe">ptaCallGraph</a>;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ad47b39252e02c68dfb466d4f42dc7ebe">ptaCallGraph</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ae3b651799345d9d92b6d736dafb03f63">callGraphSCC</a>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ae3b651799345d9d92b6d736dafb03f63">callGraphSCC</a> = <span class="keyword">nullptr</span>;</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="keyword">delete</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32"> 112</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32">PointerAnalysis::initialize</a>()</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>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a> && <span class="stringliteral">"SVFIR has not been built!"</span>);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a> == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->allCTir()) {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a> *dchg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>());</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="comment">// TODO: we might want to have an option for extending.</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  dchg-><a class="code" href="classSVF_1_1DCHGraph.html#a710c6b87fd475552eddb425e38de8889">buildCHG</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a> = dchg;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <a class="code" href="classSVF_1_1CHGraph.html">CHGraph</a> *chg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CHGraph.html">CHGraph</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>());</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  chg-><a class="code" href="classSVF_1_1CHGraph.html#ae6b620ead0f214e72fbef9c26da3d5a0">buildCHG</a>();</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a> = chg;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7e8b3f6843e5ea75fd189162d2cd60a5">svfMod</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>();</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>  <span class="comment">// dump SVFIR</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a3fd44d3cfc3f4ab18506870c65df32f5">dumpGraph</a>())</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a1cb32461439c4dc8d044c2bfadb11307">dump</a>(<span class="stringliteral">"pag_initial"</span>);</div><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="comment">// dump ICFG</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#aea29a835c54fab800117e57de00e0b1e">Options::DumpICFG</a>)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">dump</a>(<span class="stringliteral">"icfg_initial"</span>);</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="comment">// print to command line of the SVFIR graph</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a98df022c5da54ea30b3f0ce008d3ca80">Options::PAGPrint</a>)</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a236b4fefd16e9c793c5bd6d576290841">print</a>();</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a153d42a480ef1763ad59fd7258ac3ac5">Options::EnableThreadCallGraph</a>)</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>* cg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>();</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="code" href="classSVF_1_1ThreadCallGraphBuilder.html">ThreadCallGraphBuilder</a> bd(cg, <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>());</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ad47b39252e02c68dfb466d4f42dc7ebe">ptaCallGraph</a> = bd.buildThreadCallGraph(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>());</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>  <span class="keywordflow">else</span></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>  <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* cg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>();</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <a class="code" href="classSVF_1_1CallGraphBuilder.html">CallGraphBuilder</a> bd(cg,<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>());</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ad47b39252e02c68dfb466d4f42dc7ebe">ptaCallGraph</a> = bd.buildCallGraph(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>());</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  }</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#aafa5df4aa576a144476e547b1da35795">callGraphSCCDetection</a>();</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="comment">// dump callgraph</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a61c9d525088cc044f8937a39bb96aa93">Options::CallGraphDotGraph</a>)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-><a class="code" href="classSVF_1_1PTACallGraph.html#a841be22581a7896d8924564e7199f62b">dump</a>(<span class="stringliteral">"callgraph_initial"</span>);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a108380f6f0b67654bb7c7676686096c8"> 166</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a108380f6f0b67654bb7c7676686096c8">PointerAnalysis::isLocalVarInRecursiveFun</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keyword"></span>{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = this-><a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj && <span class="stringliteral">"object not found!!"</span>);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">if</span>(obj-><a class="code" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">isStack</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="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">AllocaInst</a>* local = SVFUtil::dyn_cast<AllocaInst>(obj-><a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()))</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  {</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(local->getFunction());</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ae3b651799345d9d92b6d736dafb03f63">callGraphSCC</a>-><a class="code" href="classSVF_1_1SCCDetection.html#a5d699af73b1e7ad4e3a5f6d26b8b6d15">isInCycle</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()->getCallGraphNode(fun)->getId());</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a73fb8e595473e0c7df1dd0de4968ad13"> 184</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a73fb8e595473e0c7df1dd0de4968ad13">PointerAnalysis::resetObjFieldSensitive</a>()</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ObjPN.html">ObjPN</a>* node = SVFUtil::dyn_cast<ObjPN>(nIter->second))</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  const_cast<MemObj*>(node->getMemObj())->setFieldSensitive();</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="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a3fd44d3cfc3f4ab18506870c65df32f5"> 196</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a3fd44d3cfc3f4ab18506870c65df32f5">PointerAnalysis::dumpGraph</a>()</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">return</span> <a class="code" href="classSVF_1_1Options.html#a3a20311c732fb391332ae0ee1cb450a0">Options::PAGDotGraph</a>;</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> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment">/*</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment"> * Dump statistics</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment"> */</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#ab83b827ea42d3a61aad20b1a1485d866"> 205</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ab83b827ea42d3a61aad20b1a1485d866">PointerAnalysis::dumpStat</a>()</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a3550ea3f087ec557a6fe076bc443b05d">print_stat</a> && <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>)</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  {</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#acfed70588cf921694db35990ec3c7497">performStat</a>();</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  }</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="l00218"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166"> 218</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">PointerAnalysis::finalize</a>()</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ab83b827ea42d3a61aad20b1a1485d866">dumpStat</a>();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a> = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>();</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="comment">// dump SVFIR</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a3fd44d3cfc3f4ab18506870c65df32f5">dumpGraph</a>())</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  pag-><a class="code" href="classSVF_1_1IRGraph.html#a1cb32461439c4dc8d044c2bfadb11307">dump</a>(<span class="stringliteral">"pag_final"</span>);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="comment">// dump ICFG</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#aea29a835c54fab800117e57de00e0b1e">Options::DumpICFG</a>){</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5a00682b75726cacc1b4d88bbf40c824">updateCallGraph</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ad47b39252e02c68dfb466d4f42dc7ebe">ptaCallGraph</a>);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">dump</a>(<span class="stringliteral">"icfg_final"</span>);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">if</span> (!<a class="code" href="ExternalPAG_8h.html#acbba9510c89f3a87e7043cf6327ae7cb">DumpPAGFunctions</a>.empty()) <a class="code" href="classSVF_1_1ExternalPAG.html#acee9fa409f3649dcf2c0f5e6da66ceb0">ExternalPAG::dumpFunctions</a>(<a class="code" href="ExternalPAG_8h.html#acbba9510c89f3a87e7043cf6327ae7cb">DumpPAGFunctions</a>);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ace0fa364337374ce75a58a9e2f229e24">Options::PTSPrint</a>)</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a627bdc95485fd65e8846fcaa5e89559f">dumpTopLevelPtsTo</a>();</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="comment">//dumpAllPts();</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="comment">//dumpCPts();</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#affd0cb6e0cb91e096537a3d3198bf4e5">Options::TypePrint</a>)</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a08399de593c073b6dd848a8d849dad27">dumpAllTypes</a>();</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a113ee30422ef08b6790eed9a83277b9c">Options::PTSAllPrint</a>)</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a861554c2fdeaa406131c2c920b4c7908">dumpAllPts</a>();</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a14ceeb5d7de81a0946389159986e4955">Options::FuncPointerPrint</a>)</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a062f1f2d6d47694caa9ac64a9e68c7b3">printIndCSTargets</a>();</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-><a class="code" href="classSVF_1_1PTACallGraph.html#ac695d78f0a78e2e5f1fb4f93264e52b8">verifyCallGraph</a>();</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a61c9d525088cc044f8937a39bb96aa93">Options::CallGraphDotGraph</a>)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-><a class="code" href="classSVF_1_1PTACallGraph.html#a841be22581a7896d8924564e7199f62b">dump</a>(<span class="stringliteral">"callgraph_final"</span>);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="comment">// FSTBHC has its own TBHC-specific test validation.</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">if</span>(!pag-><a class="code" href="classSVF_1_1IRGraph.html#a41423da58a07b344bc7ca8dd96d48f98">isBuiltFromFile</a>() && <a class="code" href="classSVF_1_1PointerAnalysis.html#aac1a133d478bd14c74309d9c4eaf0c8e">alias_validation</a></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  && !SVFUtil::isa<FlowSensitiveTBHC>(<span class="keyword">this</span>))</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a0454332c89e60729956bb7d69a1a24df">validateTests</a>();</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1Options.html#afb6fabc25c0d7f9e9d1708ce648797fc">Options::UsePreCompFieldSensitive</a>)</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a73fb8e595473e0c7df1dd0de4968ad13">resetObjFieldSensitive</a>();</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> }</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div><div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a0454332c89e60729956bb7d69a1a24df"> 271</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0454332c89e60729956bb7d69a1a24df">PointerAnalysis::validateTests</a>()</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">validateSuccessTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a7648a0358e2c0798db1c547ec7aa7c64">aliasTestMayAlias</a>);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">validateSuccessTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ac353221cc7aced590dcf3550a24b1570">aliasTestNoAlias</a>);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">validateSuccessTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a7477a4301d548b93958e57df389cbba0">aliasTestMustAlias</a>);</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">validateSuccessTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a83b0a51d88fa7aadff6e9267765d07a5">aliasTestPartialAlias</a>);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ab982e6bbd99a2f9a0a3abbebeeb00dcc">validateExpectedFailureTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a32c6f12ce8bc0554dbb6aafa36f9a235">aliasTestFailMayAlias</a>);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ab982e6bbd99a2f9a0a3abbebeeb00dcc">validateExpectedFailureTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a18347e41bc66b16e3f42c7c52811ad42">aliasTestFailNoAlias</a>);</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>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">validateSuccessTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a13ce6b930a35877f17bffd4b89e22654">aliasTestMayAliasMangled</a>);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">validateSuccessTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a0e68883e2ee328315af29e59bb2008cd">aliasTestNoAliasMangled</a>);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">validateSuccessTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#aec884481726cfaf19c4ab8ec8d9195b7">aliasTestMustAliasMangled</a>);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">validateSuccessTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#acbb517523fd30708ed1a93f306cd3545">aliasTestPartialAliasMangled</a>);</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ab982e6bbd99a2f9a0a3abbebeeb00dcc">validateExpectedFailureTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a651cc82379c2d18cc2f69f25b2ae08db">aliasTestFailMayAliasMangled</a>);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ab982e6bbd99a2f9a0a3abbebeeb00dcc">validateExpectedFailureTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#aefd4e9ea66da5ad84a45efead823eb22">aliasTestFailNoAliasMangled</a>);</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> </div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div><div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a08399de593c073b6dd848a8d849dad27"> 289</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a08399de593c073b6dd848a8d849dad27">PointerAnalysis::dumpAllTypes</a>()</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">for</span> (OrderedNodeSet::iterator nIter = this-><a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().begin();</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  nIter != this-><a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().end(); ++nIter)</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*nIter);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordflow">if</span> (SVFUtil::isa<DummyObjPN>(node) || SVFUtil::isa<DummyValPN>(node))</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">continue</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"##<"</span> << node-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()->getName() << <span class="stringliteral">"> "</span>;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Source Loc: "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(node-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>());</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\nNodeID "</span> << node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type = node-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()->getType();</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#aa40ff2fcaba3d4297d63269b74738737">printFlattenFields</a>(type);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* ptType = SVFUtil::dyn_cast<PointerType>(type))</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#aa40ff2fcaba3d4297d63269b74738737">printFlattenFields</a>(ptType->getElementType());</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  }</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div><div class="line"><a name="l00312"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a1a6cee7e690ccb3e53cdc4c3e67b386d"> 312</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a1a6cee7e690ccb3e53cdc4c3e67b386d">PointerAnalysis::dumpPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptr, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& pts)</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> {</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(ptr);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordflow">if</span> (SVFUtil::isa<DummyObjPN> (node))</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"##<Dummy Obj > id:"</span> << node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  }</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!SVFUtil::isa<DummyValPN>(node) && !<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>()) {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">if</span> (node-><a class="code" href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">hasValue</a>()) {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"##<"</span> << node-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()->getName() << <span class="stringliteral">"> "</span>;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Source Loc: "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(node-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>());</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  }</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  }</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\nPtr "</span> << node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">" "</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">if</span> (pts.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t\tPointsTo: {empty}\n\n"</span>;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  }</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  {</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t\tPointsTo: { "</span>;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); it != eit;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  ++it)</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << *it << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n\n"</span>;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  }</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">""</span>;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); it != eit; ++it)</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  {</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*it);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">if</span>(SVFUtil::isa<ObjPN>(node) == <span class="keyword">false</span>)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"!!Target NodeID "</span> << ptd << <span class="stringliteral">"\t ["</span>;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(ptd);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">if</span> (SVFUtil::isa<DummyValPN>(node))</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"DummyVal\n"</span>;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<DummyObjPN>(node))</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Dummy Obj id: "</span> << node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">"]\n"</span>;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>()) {</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="keywordflow">if</span> (node-><a class="code" href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">hasValue</a>()) {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"<"</span> << pagNode-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()->getName() << <span class="stringliteral">"> "</span>;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Source Loc: "</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(pagNode-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()) << <span class="stringliteral">"] \n"</span>;</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  }</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  }</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  }</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  }</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div><div class="line"><a name="l00371"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a28bcd16249c04eea2d13fafd2bcaf9d9"> 371</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a062f1f2d6d47694caa9ac64a9e68c7b3">PointerAnalysis::printIndCSTargets</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">FunctionSet</a>& targets)</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span> {</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\nNodeID: "</span> << <a class="code" href="classSVF_1_1PointerAnalysis.html#a74df51017ceaa389de2c2f33f3522fc3">getFunPtr</a>(cs);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\nCallSite: "</span>;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\tLocation: "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">SVFUtil::getSourceLoc</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>());</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t with Targets: "</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="keywordflow">if</span> (!targets.empty())</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  {</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  FunctionSet::const_iterator fit = targets.begin();</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  FunctionSet::const_iterator feit = targets.end();</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keywordflow">for</span> (; fit != feit; ++fit)</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  {</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee = *fit;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n\t"</span> << callee-><a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>();</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  }</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keywordflow">else</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n\tNo Targets!"</span>;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> }</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> </div><div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a062f1f2d6d47694caa9ac64a9e68c7b3"> 400</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a062f1f2d6d47694caa9ac64a9e68c7b3">PointerAnalysis::printIndCSTargets</a>()</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"==================Function Pointer Targets==================\n"</span>;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a>& callEdges = <a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>();</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  CallEdgeMap::const_iterator it = callEdges.begin();</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  CallEdgeMap::const_iterator eit = callEdges.end();</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">for</span> (; it != eit; ++it)</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="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = it->first;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">FunctionSet</a>& targets = it->second;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a062f1f2d6d47694caa9ac64a9e68c7b3">printIndCSTargets</a>(cs, targets);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  }</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>& indCS = <a class="code" href="classSVF_1_1PointerAnalysis.html#a9d3e7753643166465b0d647a75bc145a">getIndirectCallsites</a>();</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  CallSiteToFunPtrMap::const_iterator csIt = indCS.begin();</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  CallSiteToFunPtrMap::const_iterator csEit = indCS.end();</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordflow">for</span> (; csIt != csEit; ++csIt)</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = csIt->first;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a8d3a457efb1963f8d87305bf33c02754">hasIndCSCallees</a>(cs) == <span class="keyword">false</span>)</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  {</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\nNodeID: "</span> << csIt->second;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\nCallSite: "</span>;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\tLocation: "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">SVFUtil::getSourceLoc</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>());</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n\t!!!has no targets!!!\n"</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> </div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> </div><div class="line"><a name="l00435"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a40738643202ca6301671f51da3fc1137"> 435</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a40738643202ca6301671f51da3fc1137">PointerAnalysis::resolveIndCalls</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& target, <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a>& newEdges, <a class="code" href="namespaceSVF.html#a6c559fdb6e0c4e84c4e5b05a5cf90052">LLVMCallGraph</a>*)</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span> {</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span> </div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ad44e1ef13d047f8aea8f6ddf5510bd6c">isIndirectCallSites</a>(cs) && <span class="stringliteral">"not an indirect callsite?"</span>);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> ii = target.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), ie = target.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>();</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  ii != ie; ii++)</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ac522df904e702381222a4d9b205c775b">getNumOfResolvedIndCallEdge</a>() >= <a class="code" href="classSVF_1_1Options.html#ad6c29b05188c9e06aa89623c61865ed8">Options::IndirectCallLimit</a>)</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6c06020737f7dff22a666b75c28c5e7d">wrnMsg</a>(<span class="stringliteral">"Resolved Indirect Call Edges are Out-Of-Budget, please increase the limit"</span>);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  }</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span> </div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ObjPN.html">ObjPN</a>* objPN = SVFUtil::dyn_cast<ObjPN>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*ii)))</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(objPN);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span> </div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">if</span>(obj-><a class="code" href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b">isFunction</a>())</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  {</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* calleefun = SVFUtil::cast<Function>(obj-><a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>());</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a142e650415cb81011eb59dadd3cb0637">getDefFunForMultipleModule</a>(calleefun);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a521f99705f67e3fea7167728a4e37129">matchArgs</a>(cs, callee) == <span class="keyword">false</span>)</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keywordflow">continue</span>;</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>  <span class="keywordflow">if</span>(0 == <a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>()[cs].count(callee))</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>  newEdges[cs].insert(callee);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>()[cs].insert(callee);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span> </div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ad47b39252e02c68dfb466d4f42dc7ebe">ptaCallGraph</a>-><a class="code" href="classSVF_1_1PTACallGraph.html#a09d0b8461ec0e678e1e69368b0f66b02">addIndirectCallGraphEdge</a>(cs, cs-><a class="code" href="classSVF_1_1CallBlockNode.html#a5bab98a0b8cf0a804d53abd994e922c0">getCaller</a>(), callee);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="comment">// FIXME: do we need to update llvm call graph here?</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="comment">// The indirect call is maintained by ourself, We may update llvm's when we need to</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="comment">//CallGraphNode* callgraphNode = callgraph->getOrInsertFunction(cs.getCaller());</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="comment">//callgraphNode->addCalledFunction(cs,callgraph->getOrInsertFunction(callee));</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  }</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>  }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> }</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div><div class="line"><a name="l00483"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a521f99705f67e3fea7167728a4e37129"> 483</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a521f99705f67e3fea7167728a4e37129">PointerAnalysis::matchArgs</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee)</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span> {</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ThreadAPI.html#a6852ff1eedc1117e95e45e4a90c80d53">ThreadAPI::getThreadAPI</a>()->isTDFork(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()))</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()).arg_size() == callee-><a class="code" href="classSVF_1_1SVFFunction.html#a3757cd3ae587eaca488fa4cd8ad3967d">arg_size</a>();</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> }</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span> </div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="comment">/*</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="comment"> * Get virtual functions "vfns" based on CHA</span></div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="comment"> */</span></div><div class="line"><a name="l00494"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a0e09e07ee52ba605dc386ae1d7b965e2"> 494</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0e09e07ee52ba605dc386ae1d7b965e2">PointerAnalysis::getVFnsFromCHA</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <a class="code" href="classSVF_1_1PointerAnalysis.html#aa7f15c74eb438be78fcc028534477478">VFunSet</a> &vfns)</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> {</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a>-><a class="code" href="classSVF_1_1CommonCHGraph.html#a0ce9117288d9e0b498f128217fda0cca">csHasVFnsBasedonCHA</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>())))</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  vfns = <a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a>-><a class="code" href="classSVF_1_1CommonCHGraph.html#abe9232b9cada361e0434f7c4390a7864">getCSVFsBasedonCHA</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()));</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="comment">/*</span></div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="comment"> * Get virtual functions "vfns" from PoninsTo set "target" for callsite "cs"</span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="comment"> */</span></div><div class="line"><a name="l00503"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a8fa5b8a7b410faf63106a879ff72bf51"> 503</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a8fa5b8a7b410faf63106a879ff72bf51">PointerAnalysis::getVFnsFromPts</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &target, <a class="code" href="classSVF_1_1PointerAnalysis.html#aa7f15c74eb438be78fcc028534477478">VFunSet</a> &vfns)</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</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>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a>-><a class="code" href="classSVF_1_1CommonCHGraph.html#aff7363feebc20267dad7230666b583b1">csHasVtblsBasedonCHA</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>())))</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const GlobalValue*></a> vtbls;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#af46f4b99fc2d5061c9266a7f45aafaca">VTableSet</a> &chaVtbls = <a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a>-><a class="code" href="classSVF_1_1CommonCHGraph.html#ae90f9a2152ab07aa0df16badd733f1fd">getCSVtblsBasedonCHA</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()));</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = target.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), eit = target.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); it != eit; ++it)</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *ptdnode = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*it);</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keywordflow">if</span> (ptdnode-><a class="code" href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">hasValue</a>())</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl = SVFUtil::dyn_cast<GlobalValue>(ptdnode-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()))</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>  <span class="keywordflow">if</span> (chaVtbls.find(vtbl) != chaVtbls.end())</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  vtbls.insert(vtbl);</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>  }</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>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a>-><a class="code" href="classSVF_1_1CommonCHGraph.html#aae511b2ee7c2c7ea7be70c7884e92021">getVFnsFromVtbls</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()), vtbls, vfns);</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> }</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span> </div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="comment">/*</span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="comment"> * Connect callsite "cs" to virtual functions in "vfns"</span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="comment"> */</span></div><div class="line"><a name="l00529"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a8ff3f219b9f118a4f06360750408c9cb"> 529</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a8ff3f219b9f118a4f06360750408c9cb">PointerAnalysis::connectVCallToVFns</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#aa7f15c74eb438be78fcc028534477478">VFunSet</a> &vfns, <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a>& newEdges)</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span> {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keywordflow">for</span> (VFunSet::const_iterator fit = vfns.begin(),</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  feit = vfns.end(); fit != feit; ++fit)</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee = *fit;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  callee = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a142e650415cb81011eb59dadd3cb0637">getDefFunForMultipleModule</a>(callee-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>());</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>()[cs].count(callee) > 0)</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()).arg_size() == callee-><a class="code" href="classSVF_1_1SVFFunction.html#a3757cd3ae587eaca488fa4cd8ad3967d">arg_size</a>() ||</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()).getFunctionType()->isVarArg() && callee-><a class="code" href="classSVF_1_1SVFFunction.html#a3c1fa59deae39c75c72c97e47326d982">isVarArg</a>()))</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  {</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  newEdges[cs].insert(callee);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>()[cs].insert(callee);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* callBlockNode = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>());</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ad47b39252e02c68dfb466d4f42dc7ebe">ptaCallGraph</a>-><a class="code" href="classSVF_1_1PTACallGraph.html#a09d0b8461ec0e678e1e69368b0f66b02">addIndirectCallGraphEdge</a>(callBlockNode, cs-><a class="code" href="classSVF_1_1CallBlockNode.html#a5bab98a0b8cf0a804d53abd994e922c0">getCaller</a>(),callee);</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  }</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  }</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> }</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div><div class="line"><a name="l00551"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#ac9f54859eabff4c1e1f5785d57a0c818"> 551</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ac9f54859eabff4c1e1f5785d57a0c818">PointerAnalysis::resolveCPPIndCalls</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& target, <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a>& newEdges)</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="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="namespaceSVF_1_1cppUtil.html#aca6465c72effcaddeb34f55da4555754">isVirtualCallSite</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>())) && <span class="stringliteral">"not cpp virtual call"</span>);</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> </div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#aa7f15c74eb438be78fcc028534477478">VFunSet</a> vfns;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a485ec0be47c5e78bac4511d00687aee1">Options::ConnectVCallOnCHA</a>)</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a0e09e07ee52ba605dc386ae1d7b965e2">getVFnsFromCHA</a>(cs, vfns);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a8fa5b8a7b410faf63106a879ff72bf51">getVFnsFromPts</a>(cs, target, vfns);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a8ff3f219b9f118a4f06360750408c9cb">connectVCallToVFns</a>(cs, vfns, newEdges);</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> }</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div><div class="line"><a name="l00567"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8"> 567</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">PointerAnalysis::validateSuccessTests</a>(std::string fun)</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span> {</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span> </div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="comment">// check for must alias cases, whether our alias analysis produce the correct results</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* checkFun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4f457db1cfa0d4f94762a306c0ac3757">getFunction</a>(fun))</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keywordflow">if</span>(!checkFun->getLLVMFun()->use_empty())</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"["</span> << this-><a class="code" href="classSVF_1_1PointerAnalysis.html#aed4e5066f6ddef83afaf60adbcc11de0">PTAName</a>() << <span class="stringliteral">"] Checking "</span> << fun << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> </div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keywordflow">for</span> (Value::user_iterator i = checkFun->getLLVMFun()->user_begin(), e =</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  checkFun->getLLVMFun()->user_end(); i != e; ++i)</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</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="l00579"></a><span class="lineno"> 579</span>  {</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span> </div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs(*i);</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#adf342a3f777e611fe6b92b09154e247e">getNumArgOperands</a>() == 2</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  && <span class="stringliteral">"arguments should be two pointers!!"</span>);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V1 = cs.<a class="code" href="classSVF_1_1CallSite.html#a5cd372d9fab846228fb0ee746001309a">getArgOperand</a>(0);</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V2 = cs.<a class="code" href="classSVF_1_1CallSite.html#a5cd372d9fab846228fb0ee746001309a">getArgOperand</a>(1);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> aliasRes = <a class="code" href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">alias</a>(V1, V2);</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>  <span class="keywordtype">bool</span> checkSuccessful = <span class="keyword">false</span>;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordflow">if</span> (fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#a7648a0358e2c0798db1c547ec7aa7c64">aliasTestMayAlias</a> || fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#a13ce6b930a35877f17bffd4b89e22654">aliasTestMayAliasMangled</a>)</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  {</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keywordflow">if</span> (aliasRes == llvm::AliasResult::MayAlias || aliasRes == llvm::AliasResult::MustAlias)</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  checkSuccessful = <span class="keyword">true</span>;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  }</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#ac353221cc7aced590dcf3550a24b1570">aliasTestNoAlias</a> || fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0e68883e2ee328315af29e59bb2008cd">aliasTestNoAliasMangled</a>)</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="keywordflow">if</span> (aliasRes == llvm::AliasResult::NoAlias)</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  checkSuccessful = <span class="keyword">true</span>;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  }</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#a7477a4301d548b93958e57df389cbba0">aliasTestMustAlias</a> || fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#aec884481726cfaf19c4ab8ec8d9195b7">aliasTestMustAliasMangled</a>)</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  {</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="comment">// change to must alias when our analysis support it</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keywordflow">if</span> (aliasRes == llvm::AliasResult::MayAlias || aliasRes == llvm::AliasResult::MustAlias)</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  checkSuccessful = <span class="keyword">true</span>;</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#a83b0a51d88fa7aadff6e9267765d07a5">aliasTestPartialAlias</a> || fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#acbb517523fd30708ed1a93f306cd3545">aliasTestPartialAliasMangled</a>)</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>  <span class="comment">// change to partial alias when our analysis support it</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <span class="keywordflow">if</span> (aliasRes == llvm::AliasResult::MayAlias)</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  checkSuccessful = <span class="keyword">true</span>;</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  }</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"not supported alias check!!"</span>);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span> </div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id1 = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V1);</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id2 = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V2);</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> </div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keywordflow">if</span> (checkSuccessful)</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6a55f1f8598998a3ffbbc67d32eaf8c4">sucMsg</a>(<span class="stringliteral">"\t SUCCESS :"</span>) << fun << <span class="stringliteral">" check <id:"</span> << id1 << <span class="stringliteral">", id:"</span> << id2 << <span class="stringliteral">"> at ("</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(*i) << <span class="stringliteral">")\n"</span>;</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  {</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#af0f447732c67402037a86ea29006efc2">SVFUtil::errs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5d4bb92f5df30417f414397f8e58cf01">errMsg</a>(<span class="stringliteral">"\t FAILURE :"</span>) << fun</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  << <span class="stringliteral">" check <id:"</span> << id1 << <span class="stringliteral">", id:"</span> << id2</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  << <span class="stringliteral">"> at ("</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(*i) << <span class="stringliteral">")\n"</span>;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"test case failed!"</span>);</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>  }</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"alias check functions not only used at callsite??"</span>);</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>  }</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span> }</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span> </div><div class="line"><a name="l00637"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#ab982e6bbd99a2f9a0a3abbebeeb00dcc"> 637</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ab982e6bbd99a2f9a0a3abbebeeb00dcc">PointerAnalysis::validateExpectedFailureTests</a>(std::string fun)</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span> {</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> </div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* checkFun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4f457db1cfa0d4f94762a306c0ac3757">getFunction</a>(fun))</div><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>  <span class="keywordflow">if</span>(!checkFun->getLLVMFun()->use_empty())</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"["</span> << this-><a class="code" href="classSVF_1_1PointerAnalysis.html#aed4e5066f6ddef83afaf60adbcc11de0">PTAName</a>() << <span class="stringliteral">"] Checking "</span> << fun << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span> </div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keywordflow">for</span> (Value::user_iterator i = checkFun->getLLVMFun()->user_begin(), e =</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  checkFun->getLLVMFun()->user_end(); i != e; ++i)</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a> *call = SVFUtil::dyn_cast<CallInst>(*i))</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  {</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(call->arg_size() == 2</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  && <span class="stringliteral">"arguments should be two pointers!!"</span>);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V1 = call->getArgOperand(0);</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V2 = call->getArgOperand(1);</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  <a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> aliasRes = <a class="code" href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">alias</a>(V1, V2);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span> </div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keywordtype">bool</span> expectedFailure = <span class="keyword">false</span>;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keywordflow">if</span> (fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#a32c6f12ce8bc0554dbb6aafa36f9a235">aliasTestFailMayAlias</a> || fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#a651cc82379c2d18cc2f69f25b2ae08db">aliasTestFailMayAliasMangled</a>)</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>  <span class="comment">// change to must alias when our analysis support it</span></div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <span class="keywordflow">if</span> (aliasRes == llvm::AliasResult::NoAlias)</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  expectedFailure = <span class="keyword">true</span>;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  }</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#a18347e41bc66b16e3f42c7c52811ad42">aliasTestFailNoAlias</a> || fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#aefd4e9ea66da5ad84a45efead823eb22">aliasTestFailNoAliasMangled</a>)</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  {</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="comment">// change to partial alias when our analysis support it</span></div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <span class="keywordflow">if</span> (aliasRes == llvm::AliasResult::MayAlias || aliasRes == llvm::AliasResult::PartialAlias || aliasRes == llvm::AliasResult::MustAlias)</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  expectedFailure = <span class="keyword">true</span>;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  }</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"not supported alias check!!"</span>);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span> </div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id1 = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V1);</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id2 = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V2);</div><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>  <span class="keywordflow">if</span> (expectedFailure)</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6a55f1f8598998a3ffbbc67d32eaf8c4">sucMsg</a>(<span class="stringliteral">"\t EXPECTED-FAILURE :"</span>) << fun << <span class="stringliteral">" check <id:"</span> << id1 << <span class="stringliteral">", id:"</span> << id2 << <span class="stringliteral">"> at ("</span></div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(call) << <span class="stringliteral">")\n"</span>;</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordflow">else</span></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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#af0f447732c67402037a86ea29006efc2">SVFUtil::errs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5d4bb92f5df30417f414397f8e58cf01">errMsg</a>(<span class="stringliteral">"\t UNEXPECTED FAILURE :"</span>) << fun << <span class="stringliteral">" check <id:"</span> << id1 << <span class="stringliteral">", id:"</span> << id2 << <span class="stringliteral">"> at ("</span></div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(call) << <span class="stringliteral">")\n"</span>;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"test case failed!"</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>  }</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"alias check functions not only used at callsite??"</span>);</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  }</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span> }</div><div class="ttc" id="FlowSensitiveTBHC_8h_html"><div class="ttname"><a href="FlowSensitiveTBHC_8h.html">FlowSensitiveTBHC.h</a></div></div>
|
|
69
|
+
<a href="PointerAnalysis_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- PointerAnalysis.cpp -- Base class of pointer analyses------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-2017> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * PointerAnalysis.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * Created on: May 14, 2013</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="CallGraphBuilder_8h.html">SVF-FE/CallGraphBuilder.h</a>"</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="CHGBuilder_8h.html">SVF-FE/CHGBuilder.h</a>"</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="DCHG_8h.html">SVF-FE/DCHG.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="CPPUtil_8h.html">SVF-FE/CPPUtil.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>"</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>"</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include "<a class="code" href="PAGBuilderFromFile_8h.html">MemoryModel/PAGBuilderFromFile.h</a>"</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "<a class="code" href="PTAStat_8h.html">MemoryModel/PTAStat.h</a>"</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="ThreadCallGraph_8h.html">Graphs/ThreadCallGraph.h</a>"</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "<a class="code" href="ICFG_8h.html">Graphs/ICFG.h</a>"</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "<a class="code" href="FlowSensitiveTBHC_8h.html">WPA/FlowSensitiveTBHC.h</a>"</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> <span class="preprocessor">#include <iomanip></span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include <iostream></span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#include <fstream></span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include <sstream></span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">using namespace </span><a class="code" href="namespacecppUtil.html">cppUtil</a>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <a class="code" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</a>* <a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">PointerAnalysis::chgraph</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">PointerAnalysis::pag</a> = <span class="keyword">nullptr</span>;</div><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> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#a7648a0358e2c0798db1c547ec7aa7c64">PointerAnalysis::aliasTestMayAlias</a> = <span class="stringliteral">"MAYALIAS"</span>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#a13ce6b930a35877f17bffd4b89e22654">PointerAnalysis::aliasTestMayAliasMangled</a> = <span class="stringliteral">"_Z8MAYALIASPvS_"</span>;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#ac353221cc7aced590dcf3550a24b1570">PointerAnalysis::aliasTestNoAlias</a> = <span class="stringliteral">"NOALIAS"</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#a0e68883e2ee328315af29e59bb2008cd">PointerAnalysis::aliasTestNoAliasMangled</a> = <span class="stringliteral">"_Z7NOALIASPvS_"</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#a83b0a51d88fa7aadff6e9267765d07a5">PointerAnalysis::aliasTestPartialAlias</a> = <span class="stringliteral">"PARTIALALIAS"</span>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#acbb517523fd30708ed1a93f306cd3545">PointerAnalysis::aliasTestPartialAliasMangled</a> = <span class="stringliteral">"_Z12PARTIALALIASPvS_"</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#a7477a4301d548b93958e57df389cbba0">PointerAnalysis::aliasTestMustAlias</a> = <span class="stringliteral">"MUSTALIAS"</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#aec884481726cfaf19c4ab8ec8d9195b7">PointerAnalysis::aliasTestMustAliasMangled</a> = <span class="stringliteral">"_Z9MUSTALIASPvS_"</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#a32c6f12ce8bc0554dbb6aafa36f9a235">PointerAnalysis::aliasTestFailMayAlias</a> = <span class="stringliteral">"EXPECTEDFAIL_MAYALIAS"</span>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#a651cc82379c2d18cc2f69f25b2ae08db">PointerAnalysis::aliasTestFailMayAliasMangled</a> = <span class="stringliteral">"_Z21EXPECTEDFAIL_MAYALIASPvS_"</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#a18347e41bc66b16e3f42c7c52811ad42">PointerAnalysis::aliasTestFailNoAlias</a> = <span class="stringliteral">"EXPECTEDFAIL_NOALIAS"</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PointerAnalysis.html#aefd4e9ea66da5ad84a45efead823eb22">PointerAnalysis::aliasTestFailNoAliasMangled</a> = <span class="stringliteral">"_Z20EXPECTEDFAIL_NOALIASPvS_"</span>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a14e2a209cb594f91a24ef09b12f82f3f"> 75</a></span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a14e2a209cb594f91a24ef09b12f82f3f">PointerAnalysis::PointerAnalysis</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* p, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> ty, <span class="keywordtype">bool</span> alias_check) :</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  svfMod(nullptr),ptaTy(ty),stat(nullptr),ptaCallGraph(nullptr),callGraphSCC(nullptr),icfg(nullptr),typeSystem(nullptr)</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>  <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a> = p;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#afc320fbf269404fe128e69c98e6f9cac">OnTheFlyIterBudgetForStat</a> = <a class="code" href="classSVF_1_1Options.html#abae23cb06d932f93900f627813b9f4a4">Options::StatBudget</a>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a3550ea3f087ec557a6fe076bc443b05d">print_stat</a> = <a class="code" href="classSVF_1_1Options.html#a498a1a05a08be1ffd845aefeb0672bcb">Options::PStat</a>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a5d3c3094e263bf16a4f312a118c1bd36">ptaImplTy</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da66b132e5ab8c8746eb22e58d199b4c2a">BaseImpl</a>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#aac1a133d478bd14c74309d9c4eaf0c8e">alias_validation</a> = (alias_check && <a class="code" href="classSVF_1_1Options.html#a4da18281b973b9ffb5068dd53060524c">Options::EnableAliasCheck</a>);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a4aeca84393c5586eea7a480737daf17c"> 88</a></span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a4aeca84393c5586eea7a480737daf17c">PointerAnalysis::~PointerAnalysis</a>()</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a03dadb5429e2b84f88713a83153979a8">destroy</a>();</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="comment">// do not delete the SVFIR for now</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="comment">//delete pag;</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a03dadb5429e2b84f88713a83153979a8"> 96</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a03dadb5429e2b84f88713a83153979a8">PointerAnalysis::destroy</a>()</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad47b39252e02c68dfb466d4f42dc7ebe">ptaCallGraph</a>;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ad47b39252e02c68dfb466d4f42dc7ebe">ptaCallGraph</a> = <span class="keyword">nullptr</span>;</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">delete</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ae3b651799345d9d92b6d736dafb03f63">callGraphSCC</a>;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ae3b651799345d9d92b6d736dafb03f63">callGraphSCC</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a> = <span class="keyword">nullptr</span>;</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> </div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32"> 111</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32">PointerAnalysis::initialize</a>()</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a> && <span class="stringliteral">"SVFIR has not been built!"</span>);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a> == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->allCTir()) {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a> *dchg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>());</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="comment">// TODO: we might want to have an option for extending.</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  dchg-><a class="code" href="classSVF_1_1DCHGraph.html#a710c6b87fd475552eddb425e38de8889">buildCHG</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a> = dchg;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="classSVF_1_1CHGraph.html">CHGraph</a> *chg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CHGraph.html">CHGraph</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>());</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <a class="code" href="classSVF_1_1CHGBuilder.html">CHGBuilder</a> builder(chg);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  builder.buildCHG();</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a> = chg;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7e8b3f6843e5ea75fd189162d2cd60a5">svfMod</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>();</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>  <span class="comment">// dump SVFIR</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a3fd44d3cfc3f4ab18506870c65df32f5">dumpGraph</a>())</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a1cb32461439c4dc8d044c2bfadb11307">dump</a>(<span class="stringliteral">"pag_initial"</span>);</div><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="comment">// dump ICFG</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#aea29a835c54fab800117e57de00e0b1e">Options::DumpICFG</a>)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">dump</a>(<span class="stringliteral">"icfg_initial"</span>);</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="comment">// print to command line of the SVFIR graph</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a98df022c5da54ea30b3f0ce008d3ca80">Options::PAGPrint</a>)</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a236b4fefd16e9c793c5bd6d576290841">print</a>();</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a153d42a480ef1763ad59fd7258ac3ac5">Options::EnableThreadCallGraph</a>)</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>* cg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>();</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="code" href="classSVF_1_1ThreadCallGraphBuilder.html">ThreadCallGraphBuilder</a> bd(cg, <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>());</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ad47b39252e02c68dfb466d4f42dc7ebe">ptaCallGraph</a> = bd.buildThreadCallGraph(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>());</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>  <span class="keywordflow">else</span></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>  <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* cg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>();</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <a class="code" href="classSVF_1_1CallGraphBuilder.html">CallGraphBuilder</a> bd(cg,<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>());</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ad47b39252e02c68dfb466d4f42dc7ebe">ptaCallGraph</a> = bd.buildCallGraph(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>());</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  }</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#aafa5df4aa576a144476e547b1da35795">callGraphSCCDetection</a>();</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="comment">// dump callgraph</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a61c9d525088cc044f8937a39bb96aa93">Options::CallGraphDotGraph</a>)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-><a class="code" href="classSVF_1_1PTACallGraph.html#a841be22581a7896d8924564e7199f62b">dump</a>(<span class="stringliteral">"callgraph_initial"</span>);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a108380f6f0b67654bb7c7676686096c8"> 166</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a108380f6f0b67654bb7c7676686096c8">PointerAnalysis::isLocalVarInRecursiveFun</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keyword"></span>{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = this-><a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj && <span class="stringliteral">"object not found!!"</span>);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">if</span>(obj-><a class="code" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">isStack</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="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">AllocaInst</a>* local = SVFUtil::dyn_cast<AllocaInst>(obj-><a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()))</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  {</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(local->getFunction());</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ae3b651799345d9d92b6d736dafb03f63">callGraphSCC</a>-><a class="code" href="classSVF_1_1SCCDetection.html#a5d699af73b1e7ad4e3a5f6d26b8b6d15">isInCycle</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()->getCallGraphNode(fun)->getId());</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a73fb8e595473e0c7df1dd0de4968ad13"> 184</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a73fb8e595473e0c7df1dd0de4968ad13">PointerAnalysis::resetObjFieldSensitive</a>()</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ObjPN.html">ObjPN</a>* node = SVFUtil::dyn_cast<ObjPN>(nIter->second))</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  const_cast<MemObj*>(node->getMemObj())->setFieldSensitive();</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="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a3fd44d3cfc3f4ab18506870c65df32f5"> 196</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a3fd44d3cfc3f4ab18506870c65df32f5">PointerAnalysis::dumpGraph</a>()</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">return</span> <a class="code" href="classSVF_1_1Options.html#a3a20311c732fb391332ae0ee1cb450a0">Options::PAGDotGraph</a>;</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> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment">/*</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment"> * Dump statistics</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment"> */</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#ab83b827ea42d3a61aad20b1a1485d866"> 205</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ab83b827ea42d3a61aad20b1a1485d866">PointerAnalysis::dumpStat</a>()</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a3550ea3f087ec557a6fe076bc443b05d">print_stat</a> && <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>)</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  {</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#acfed70588cf921694db35990ec3c7497">performStat</a>();</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  }</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="l00218"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166"> 218</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">PointerAnalysis::finalize</a>()</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ab83b827ea42d3a61aad20b1a1485d866">dumpStat</a>();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a> = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>();</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="comment">// dump SVFIR</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a3fd44d3cfc3f4ab18506870c65df32f5">dumpGraph</a>())</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  pag-><a class="code" href="classSVF_1_1IRGraph.html#a1cb32461439c4dc8d044c2bfadb11307">dump</a>(<span class="stringliteral">"pag_final"</span>);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="comment">// dump ICFG</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#aea29a835c54fab800117e57de00e0b1e">Options::DumpICFG</a>){</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5a00682b75726cacc1b4d88bbf40c824">updateCallGraph</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ad47b39252e02c68dfb466d4f42dc7ebe">ptaCallGraph</a>);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">dump</a>(<span class="stringliteral">"icfg_final"</span>);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ace0fa364337374ce75a58a9e2f229e24">Options::PTSPrint</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>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a627bdc95485fd65e8846fcaa5e89559f">dumpTopLevelPtsTo</a>();</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="comment">//dumpAllPts();</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="comment">//dumpCPts();</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div><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>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#affd0cb6e0cb91e096537a3d3198bf4e5">Options::TypePrint</a>)</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a08399de593c073b6dd848a8d849dad27">dumpAllTypes</a>();</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a113ee30422ef08b6790eed9a83277b9c">Options::PTSAllPrint</a>)</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a861554c2fdeaa406131c2c920b4c7908">dumpAllPts</a>();</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="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a14ceeb5d7de81a0946389159986e4955">Options::FuncPointerPrint</a>)</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a062f1f2d6d47694caa9ac64a9e68c7b3">printIndCSTargets</a>();</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-><a class="code" href="classSVF_1_1PTACallGraph.html#ac695d78f0a78e2e5f1fb4f93264e52b8">verifyCallGraph</a>();</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a61c9d525088cc044f8937a39bb96aa93">Options::CallGraphDotGraph</a>)</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-><a class="code" href="classSVF_1_1PTACallGraph.html#a841be22581a7896d8924564e7199f62b">dump</a>(<span class="stringliteral">"callgraph_final"</span>);</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>  <span class="comment">// FSTBHC has its own TBHC-specific test validation.</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">if</span>(!pag-><a class="code" href="classSVF_1_1IRGraph.html#a41423da58a07b344bc7ca8dd96d48f98">isBuiltFromFile</a>() && <a class="code" href="classSVF_1_1PointerAnalysis.html#aac1a133d478bd14c74309d9c4eaf0c8e">alias_validation</a></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  && !SVFUtil::isa<FlowSensitiveTBHC>(<span class="keyword">this</span>))</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a0454332c89e60729956bb7d69a1a24df">validateTests</a>();</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1Options.html#afb6fabc25c0d7f9e9d1708ce648797fc">Options::UsePreCompFieldSensitive</a>)</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a73fb8e595473e0c7df1dd0de4968ad13">resetObjFieldSensitive</a>();</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> }</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div><div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a0454332c89e60729956bb7d69a1a24df"> 269</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0454332c89e60729956bb7d69a1a24df">PointerAnalysis::validateTests</a>()</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>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">validateSuccessTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a7648a0358e2c0798db1c547ec7aa7c64">aliasTestMayAlias</a>);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">validateSuccessTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ac353221cc7aced590dcf3550a24b1570">aliasTestNoAlias</a>);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">validateSuccessTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a7477a4301d548b93958e57df389cbba0">aliasTestMustAlias</a>);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">validateSuccessTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a83b0a51d88fa7aadff6e9267765d07a5">aliasTestPartialAlias</a>);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ab982e6bbd99a2f9a0a3abbebeeb00dcc">validateExpectedFailureTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a32c6f12ce8bc0554dbb6aafa36f9a235">aliasTestFailMayAlias</a>);</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ab982e6bbd99a2f9a0a3abbebeeb00dcc">validateExpectedFailureTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a18347e41bc66b16e3f42c7c52811ad42">aliasTestFailNoAlias</a>);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">validateSuccessTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a13ce6b930a35877f17bffd4b89e22654">aliasTestMayAliasMangled</a>);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">validateSuccessTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a0e68883e2ee328315af29e59bb2008cd">aliasTestNoAliasMangled</a>);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">validateSuccessTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#aec884481726cfaf19c4ab8ec8d9195b7">aliasTestMustAliasMangled</a>);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">validateSuccessTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#acbb517523fd30708ed1a93f306cd3545">aliasTestPartialAliasMangled</a>);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ab982e6bbd99a2f9a0a3abbebeeb00dcc">validateExpectedFailureTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a651cc82379c2d18cc2f69f25b2ae08db">aliasTestFailMayAliasMangled</a>);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ab982e6bbd99a2f9a0a3abbebeeb00dcc">validateExpectedFailureTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#aefd4e9ea66da5ad84a45efead823eb22">aliasTestFailNoAliasMangled</a>);</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> }</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a08399de593c073b6dd848a8d849dad27"> 287</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a08399de593c073b6dd848a8d849dad27">PointerAnalysis::dumpAllTypes</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>  <span class="keywordflow">for</span> (OrderedNodeSet::iterator nIter = this-><a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().begin();</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  nIter != this-><a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().end(); ++nIter)</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  {</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*nIter);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keywordflow">if</span> (SVFUtil::isa<DummyObjPN>(node) || SVFUtil::isa<DummyValPN>(node))</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"##<"</span> << node-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()->getName() << <span class="stringliteral">"> "</span>;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Source Loc: "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(node-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>());</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\nNodeID "</span> << node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type = node-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()->getType();</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#aa40ff2fcaba3d4297d63269b74738737">printFlattenFields</a>(type);</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* ptType = SVFUtil::dyn_cast<PointerType>(type))</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#aa40ff2fcaba3d4297d63269b74738737">printFlattenFields</a>(ptType->getElementType());</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> }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div><div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a1a6cee7e690ccb3e53cdc4c3e67b386d"> 310</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a1a6cee7e690ccb3e53cdc4c3e67b386d">PointerAnalysis::dumpPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptr, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& pts)</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> </div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(ptr);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keywordflow">if</span> (SVFUtil::isa<DummyObjPN> (node))</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  {</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"##<Dummy Obj > id:"</span> << node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  }</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!SVFUtil::isa<DummyValPN>(node) && !<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>()) {</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">if</span> (node-><a class="code" href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">hasValue</a>()) {</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"##<"</span> << node-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()->getName() << <span class="stringliteral">"> "</span>;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Source Loc: "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(node-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>());</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  }</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="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\nPtr "</span> << node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">" "</span>;</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>  <span class="keywordflow">if</span> (pts.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t\tPointsTo: {empty}\n\n"</span>;</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>  <span class="keywordflow">else</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  {</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t\tPointsTo: { "</span>;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); it != eit;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  ++it)</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << *it << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n\n"</span>;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">""</span>;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); it != eit; ++it)</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  {</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*it);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keywordflow">if</span>(SVFUtil::isa<ObjPN>(node) == <span class="keyword">false</span>)</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"!!Target NodeID "</span> << ptd << <span class="stringliteral">"\t ["</span>;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(ptd);</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">if</span> (SVFUtil::isa<DummyValPN>(node))</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"DummyVal\n"</span>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<DummyObjPN>(node))</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Dummy Obj id: "</span> << node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">"]\n"</span>;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>()) {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordflow">if</span> (node-><a class="code" href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">hasValue</a>()) {</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"<"</span> << pagNode-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()->getName() << <span class="stringliteral">"> "</span>;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Source Loc: "</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(pagNode-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()) << <span class="stringliteral">"] \n"</span>;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  }</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  }</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  }</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> }</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a28bcd16249c04eea2d13fafd2bcaf9d9"> 369</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a062f1f2d6d47694caa9ac64a9e68c7b3">PointerAnalysis::printIndCSTargets</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">FunctionSet</a>& targets)</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> {</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\nNodeID: "</span> << <a class="code" href="classSVF_1_1PointerAnalysis.html#a74df51017ceaa389de2c2f33f3522fc3">getFunPtr</a>(cs);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\nCallSite: "</span>;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\tLocation: "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">SVFUtil::getSourceLoc</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>());</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t with Targets: "</span>;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordflow">if</span> (!targets.empty())</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>  FunctionSet::const_iterator fit = targets.begin();</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  FunctionSet::const_iterator feit = targets.end();</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">for</span> (; fit != feit; ++fit)</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee = *fit;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n\t"</span> << callee-><a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>();</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  }</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="keywordflow">else</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n\tNo Targets!"</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> </div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> }</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div><div class="line"><a name="l00398"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a062f1f2d6d47694caa9ac64a9e68c7b3"> 398</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a062f1f2d6d47694caa9ac64a9e68c7b3">PointerAnalysis::printIndCSTargets</a>()</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"==================Function Pointer Targets==================\n"</span>;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a>& callEdges = <a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>();</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  CallEdgeMap::const_iterator it = callEdges.begin();</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  CallEdgeMap::const_iterator eit = callEdges.end();</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keywordflow">for</span> (; it != eit; ++it)</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="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = it->first;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">FunctionSet</a>& targets = it->second;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a062f1f2d6d47694caa9ac64a9e68c7b3">printIndCSTargets</a>(cs, targets);</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> </div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>& indCS = <a class="code" href="classSVF_1_1PointerAnalysis.html#a9d3e7753643166465b0d647a75bc145a">getIndirectCallsites</a>();</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  CallSiteToFunPtrMap::const_iterator csIt = indCS.begin();</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  CallSiteToFunPtrMap::const_iterator csEit = indCS.end();</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keywordflow">for</span> (; csIt != csEit; ++csIt)</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  {</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = csIt->first;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a8d3a457efb1963f8d87305bf33c02754">hasIndCSCallees</a>(cs) == <span class="keyword">false</span>)</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\nNodeID: "</span> << csIt->second;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\nCallSite: "</span>;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\tLocation: "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">SVFUtil::getSourceLoc</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>());</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n\t!!!has no targets!!!\n"</span>;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  }</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</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="l00433"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a40738643202ca6301671f51da3fc1137"> 433</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a40738643202ca6301671f51da3fc1137">PointerAnalysis::resolveIndCalls</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& target, <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a>& newEdges, <a class="code" href="namespaceSVF.html#a6c559fdb6e0c4e84c4e5b05a5cf90052">LLVMCallGraph</a>*)</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> {</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ad44e1ef13d047f8aea8f6ddf5510bd6c">isIndirectCallSites</a>(cs) && <span class="stringliteral">"not an indirect callsite?"</span>);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> ii = target.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), ie = target.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>();</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  ii != ie; ii++)</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  {</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>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ac522df904e702381222a4d9b205c775b">getNumOfResolvedIndCallEdge</a>() >= <a class="code" href="classSVF_1_1Options.html#ad6c29b05188c9e06aa89623c61865ed8">Options::IndirectCallLimit</a>)</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6c06020737f7dff22a666b75c28c5e7d">wrnMsg</a>(<span class="stringliteral">"Resolved Indirect Call Edges are Out-Of-Budget, please increase the limit"</span>);</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  }</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="keywordflow">if</span>(<a class="code" href="classSVF_1_1ObjPN.html">ObjPN</a>* objPN = SVFUtil::dyn_cast<ObjPN>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*ii)))</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(objPN);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordflow">if</span>(obj-><a class="code" href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b">isFunction</a>())</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* calleefun = SVFUtil::cast<Function>(obj-><a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>());</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a142e650415cb81011eb59dadd3cb0637">getDefFunForMultipleModule</a>(calleefun);</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a521f99705f67e3fea7167728a4e37129">matchArgs</a>(cs, callee) == <span class="keyword">false</span>)</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keywordflow">if</span>(0 == <a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>()[cs].count(callee))</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>  newEdges[cs].insert(callee);</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>()[cs].insert(callee);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ad47b39252e02c68dfb466d4f42dc7ebe">ptaCallGraph</a>-><a class="code" href="classSVF_1_1PTACallGraph.html#a09d0b8461ec0e678e1e69368b0f66b02">addIndirectCallGraphEdge</a>(cs, cs-><a class="code" href="classSVF_1_1CallBlockNode.html#a5bab98a0b8cf0a804d53abd994e922c0">getCaller</a>(), callee);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="comment">// FIXME: do we need to update llvm call graph here?</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="comment">// The indirect call is maintained by ourself, We may update llvm's when we need to</span></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="comment">//CallGraphNode* callgraphNode = callgraph->getOrInsertFunction(cs.getCaller());</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="comment">//callgraphNode->addCalledFunction(cs,callgraph->getOrInsertFunction(callee));</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  }</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>  }</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> </div><div class="line"><a name="l00481"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a521f99705f67e3fea7167728a4e37129"> 481</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a521f99705f67e3fea7167728a4e37129">PointerAnalysis::matchArgs</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee)</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> {</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ThreadAPI.html#a6852ff1eedc1117e95e45e4a90c80d53">ThreadAPI::getThreadAPI</a>()->isTDFork(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()))</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()).arg_size() == callee-><a class="code" href="classSVF_1_1SVFFunction.html#a3757cd3ae587eaca488fa4cd8ad3967d">arg_size</a>();</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span> }</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="comment">/*</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="comment"> * Get virtual functions "vfns" based on CHA</span></div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="comment"> */</span></div><div class="line"><a name="l00492"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a0e09e07ee52ba605dc386ae1d7b965e2"> 492</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0e09e07ee52ba605dc386ae1d7b965e2">PointerAnalysis::getVFnsFromCHA</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <a class="code" href="classSVF_1_1PointerAnalysis.html#aa7f15c74eb438be78fcc028534477478">VFunSet</a> &vfns)</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span> {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a>-><a class="code" href="classSVF_1_1CommonCHGraph.html#a0ce9117288d9e0b498f128217fda0cca">csHasVFnsBasedonCHA</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>())))</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  vfns = <a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a>-><a class="code" href="classSVF_1_1CommonCHGraph.html#abe9232b9cada361e0434f7c4390a7864">getCSVFsBasedonCHA</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()));</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span> }</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="comment">/*</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="comment"> * Get virtual functions "vfns" from PoninsTo set "target" for callsite "cs"</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="comment"> */</span></div><div class="line"><a name="l00501"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a8fa5b8a7b410faf63106a879ff72bf51"> 501</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a8fa5b8a7b410faf63106a879ff72bf51">PointerAnalysis::getVFnsFromPts</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &target, <a class="code" href="classSVF_1_1PointerAnalysis.html#aa7f15c74eb438be78fcc028534477478">VFunSet</a> &vfns)</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</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>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a>-><a class="code" href="classSVF_1_1CommonCHGraph.html#aff7363feebc20267dad7230666b583b1">csHasVtblsBasedonCHA</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>())))</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const GlobalValue*></a> vtbls;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#af46f4b99fc2d5061c9266a7f45aafaca">VTableSet</a> &chaVtbls = <a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a>-><a class="code" href="classSVF_1_1CommonCHGraph.html#ae90f9a2152ab07aa0df16badd733f1fd">getCSVtblsBasedonCHA</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()));</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = target.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), eit = target.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); it != eit; ++it)</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  {</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *ptdnode = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*it);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <span class="keywordflow">if</span> (ptdnode-><a class="code" href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">hasValue</a>())</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">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl = SVFUtil::dyn_cast<GlobalValue>(ptdnode-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()))</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keywordflow">if</span> (chaVtbls.find(vtbl) != chaVtbls.end())</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  vtbls.insert(vtbl);</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>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">chgraph</a>-><a class="code" href="classSVF_1_1CommonCHGraph.html#aae511b2ee7c2c7ea7be70c7884e92021">getVFnsFromVtbls</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()), vtbls, vfns);</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> }</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="comment">/*</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="comment"> * Connect callsite "cs" to virtual functions in "vfns"</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="comment"> */</span></div><div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a8ff3f219b9f118a4f06360750408c9cb"> 527</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a8ff3f219b9f118a4f06360750408c9cb">PointerAnalysis::connectVCallToVFns</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#aa7f15c74eb438be78fcc028534477478">VFunSet</a> &vfns, <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a>& newEdges)</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> {</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keywordflow">for</span> (VFunSet::const_iterator fit = vfns.begin(),</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  feit = vfns.end(); fit != feit; ++fit)</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee = *fit;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  callee = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a142e650415cb81011eb59dadd3cb0637">getDefFunForMultipleModule</a>(callee-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>());</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>()[cs].count(callee) > 0)</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()).arg_size() == callee-><a class="code" href="classSVF_1_1SVFFunction.html#a3757cd3ae587eaca488fa4cd8ad3967d">arg_size</a>() ||</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()).getFunctionType()->isVarArg() && callee-><a class="code" href="classSVF_1_1SVFFunction.html#a3c1fa59deae39c75c72c97e47326d982">isVarArg</a>()))</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  newEdges[cs].insert(callee);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>()[cs].insert(callee);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* callBlockNode = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>());</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ad47b39252e02c68dfb466d4f42dc7ebe">ptaCallGraph</a>-><a class="code" href="classSVF_1_1PTACallGraph.html#a09d0b8461ec0e678e1e69368b0f66b02">addIndirectCallGraphEdge</a>(callBlockNode, cs-><a class="code" href="classSVF_1_1CallBlockNode.html#a5bab98a0b8cf0a804d53abd994e922c0">getCaller</a>(),callee);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  }</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> }</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div><div class="line"><a name="l00549"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#ac9f54859eabff4c1e1f5785d57a0c818"> 549</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ac9f54859eabff4c1e1f5785d57a0c818">PointerAnalysis::resolveCPPIndCalls</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& target, <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a>& newEdges)</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="namespaceSVF_1_1cppUtil.html#aca6465c72effcaddeb34f55da4555754">isVirtualCallSite</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>())) && <span class="stringliteral">"not cpp virtual call"</span>);</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_1PointerAnalysis.html#aa7f15c74eb438be78fcc028534477478">VFunSet</a> vfns;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a485ec0be47c5e78bac4511d00687aee1">Options::ConnectVCallOnCHA</a>)</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a0e09e07ee52ba605dc386ae1d7b965e2">getVFnsFromCHA</a>(cs, vfns);</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a8fa5b8a7b410faf63106a879ff72bf51">getVFnsFromPts</a>(cs, target, vfns);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a8ff3f219b9f118a4f06360750408c9cb">connectVCallToVFns</a>(cs, vfns, newEdges);</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span> }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span> </div><div class="line"><a name="l00565"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8"> 565</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">PointerAnalysis::validateSuccessTests</a>(std::string fun)</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> </div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="comment">// check for must alias cases, whether our alias analysis produce the correct results</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* checkFun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4f457db1cfa0d4f94762a306c0ac3757">getFunction</a>(fun))</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  {</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keywordflow">if</span>(!checkFun->getLLVMFun()->use_empty())</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"["</span> << this-><a class="code" href="classSVF_1_1PointerAnalysis.html#aed4e5066f6ddef83afaf60adbcc11de0">PTAName</a>() << <span class="stringliteral">"] Checking "</span> << fun << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span> </div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordflow">for</span> (Value::user_iterator i = checkFun->getLLVMFun()->user_begin(), e =</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  checkFun->getLLVMFun()->user_end(); i != e; ++i)</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</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="l00577"></a><span class="lineno"> 577</span>  {</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>  <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs(*i);</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#adf342a3f777e611fe6b92b09154e247e">getNumArgOperands</a>() == 2</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  && <span class="stringliteral">"arguments should be two pointers!!"</span>);</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V1 = cs.<a class="code" href="classSVF_1_1CallSite.html#a5cd372d9fab846228fb0ee746001309a">getArgOperand</a>(0);</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V2 = cs.<a class="code" href="classSVF_1_1CallSite.html#a5cd372d9fab846228fb0ee746001309a">getArgOperand</a>(1);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> aliasRes = <a class="code" href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">alias</a>(V1, V2);</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>  <span class="keywordtype">bool</span> checkSuccessful = <span class="keyword">false</span>;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="keywordflow">if</span> (fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#a7648a0358e2c0798db1c547ec7aa7c64">aliasTestMayAlias</a> || fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#a13ce6b930a35877f17bffd4b89e22654">aliasTestMayAliasMangled</a>)</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="keywordflow">if</span> (aliasRes == llvm::AliasResult::MayAlias || aliasRes == llvm::AliasResult::MustAlias)</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  checkSuccessful = <span class="keyword">true</span>;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  }</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#ac353221cc7aced590dcf3550a24b1570">aliasTestNoAlias</a> || fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0e68883e2ee328315af29e59bb2008cd">aliasTestNoAliasMangled</a>)</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  {</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="keywordflow">if</span> (aliasRes == llvm::AliasResult::NoAlias)</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  checkSuccessful = <span class="keyword">true</span>;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  }</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#a7477a4301d548b93958e57df389cbba0">aliasTestMustAlias</a> || fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#aec884481726cfaf19c4ab8ec8d9195b7">aliasTestMustAliasMangled</a>)</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  {</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="comment">// change to must alias when our analysis support it</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="keywordflow">if</span> (aliasRes == llvm::AliasResult::MayAlias || aliasRes == llvm::AliasResult::MustAlias)</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  checkSuccessful = <span class="keyword">true</span>;</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#a83b0a51d88fa7aadff6e9267765d07a5">aliasTestPartialAlias</a> || fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#acbb517523fd30708ed1a93f306cd3545">aliasTestPartialAliasMangled</a>)</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>  <span class="comment">// change to partial alias when our analysis support it</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="keywordflow">if</span> (aliasRes == llvm::AliasResult::MayAlias)</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  checkSuccessful = <span class="keyword">true</span>;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  }</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"not supported alias check!!"</span>);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span> </div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id1 = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V1);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id2 = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V2);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> </div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keywordflow">if</span> (checkSuccessful)</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6a55f1f8598998a3ffbbc67d32eaf8c4">sucMsg</a>(<span class="stringliteral">"\t SUCCESS :"</span>) << fun << <span class="stringliteral">" check <id:"</span> << id1 << <span class="stringliteral">", id:"</span> << id2 << <span class="stringliteral">"> at ("</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(*i) << <span class="stringliteral">")\n"</span>;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  {</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#af0f447732c67402037a86ea29006efc2">SVFUtil::errs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5d4bb92f5df30417f414397f8e58cf01">errMsg</a>(<span class="stringliteral">"\t FAILURE :"</span>) << fun</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  << <span class="stringliteral">" check <id:"</span> << id1 << <span class="stringliteral">", id:"</span> << id2</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  << <span class="stringliteral">"> at ("</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(*i) << <span class="stringliteral">")\n"</span>;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"test case failed!"</span>);</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  }</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  }</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"alias check functions not only used at callsite??"</span>);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span> </div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  }</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> </div><div class="line"><a name="l00635"></a><span class="lineno"><a class="line" href="classSVF_1_1PointerAnalysis.html#ab982e6bbd99a2f9a0a3abbebeeb00dcc"> 635</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ab982e6bbd99a2f9a0a3abbebeeb00dcc">PointerAnalysis::validateExpectedFailureTests</a>(std::string fun)</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="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* checkFun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4f457db1cfa0d4f94762a306c0ac3757">getFunction</a>(fun))</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  {</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">if</span>(!checkFun->getLLVMFun()->use_empty())</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"["</span> << this-><a class="code" href="classSVF_1_1PointerAnalysis.html#aed4e5066f6ddef83afaf60adbcc11de0">PTAName</a>() << <span class="stringliteral">"] Checking "</span> << fun << <span class="stringliteral">"\n"</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> (Value::user_iterator i = checkFun->getLLVMFun()->user_begin(), e =</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  checkFun->getLLVMFun()->user_end(); i != e; ++i)</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a> *call = SVFUtil::dyn_cast<CallInst>(*i))</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="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(call->arg_size() == 2</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  && <span class="stringliteral">"arguments should be two pointers!!"</span>);</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V1 = call->getArgOperand(0);</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V2 = call->getArgOperand(1);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> aliasRes = <a class="code" href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">alias</a>(V1, V2);</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span> </div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  <span class="keywordtype">bool</span> expectedFailure = <span class="keyword">false</span>;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordflow">if</span> (fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#a32c6f12ce8bc0554dbb6aafa36f9a235">aliasTestFailMayAlias</a> || fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#a651cc82379c2d18cc2f69f25b2ae08db">aliasTestFailMayAliasMangled</a>)</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  {</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="comment">// change to must alias when our analysis support it</span></div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="keywordflow">if</span> (aliasRes == llvm::AliasResult::NoAlias)</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  expectedFailure = <span class="keyword">true</span>;</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#a18347e41bc66b16e3f42c7c52811ad42">aliasTestFailNoAlias</a> || fun == <a class="code" href="classSVF_1_1PointerAnalysis.html#aefd4e9ea66da5ad84a45efead823eb22">aliasTestFailNoAliasMangled</a>)</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  {</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="comment">// change to partial alias when our analysis support it</span></div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keywordflow">if</span> (aliasRes == llvm::AliasResult::MayAlias || aliasRes == llvm::AliasResult::PartialAlias || aliasRes == llvm::AliasResult::MustAlias)</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  expectedFailure = <span class="keyword">true</span>;</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  }</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"not supported alias check!!"</span>);</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>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id1 = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V1);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id2 = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V2);</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span> </div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keywordflow">if</span> (expectedFailure)</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6a55f1f8598998a3ffbbc67d32eaf8c4">sucMsg</a>(<span class="stringliteral">"\t EXPECTED-FAILURE :"</span>) << fun << <span class="stringliteral">" check <id:"</span> << id1 << <span class="stringliteral">", id:"</span> << id2 << <span class="stringliteral">"> at ("</span></div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(call) << <span class="stringliteral">")\n"</span>;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  {</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#af0f447732c67402037a86ea29006efc2">SVFUtil::errs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5d4bb92f5df30417f414397f8e58cf01">errMsg</a>(<span class="stringliteral">"\t UNEXPECTED FAILURE :"</span>) << fun << <span class="stringliteral">" check <id:"</span> << id1 << <span class="stringliteral">", id:"</span> << id2 << <span class="stringliteral">"> at ("</span></div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(call) << <span class="stringliteral">")\n"</span>;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"test case failed!"</span>);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  }</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  }</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"alias check functions not only used at callsite??"</span>);</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span> }</div><div class="ttc" id="FlowSensitiveTBHC_8h_html"><div class="ttname"><a href="FlowSensitiveTBHC_8h.html">FlowSensitiveTBHC.h</a></div></div>
|
|
70
70
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a9d3e7753643166465b0d647a75bc145a"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a9d3e7753643166465b0d647a75bc145a">SVF::PointerAnalysis::getIndirectCallsites</a></div><div class="ttdeci">const CallSiteToFunPtrMap & getIndirectCallsites() const</div><div class="ttdoc">Return all indirect callsites. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00280">PointerAnalysis.h:280</a></div></div>
|
|
71
71
|
<div class="ttc" id="classSVF_1_1Options_html_abae23cb06d932f93900f627813b9f4a4"><div class="ttname"><a href="classSVF_1_1Options.html#abae23cb06d932f93900f627813b9f4a4">SVF::Options::StatBudget</a></div><div class="ttdeci">static const llvm::cl::opt< unsigned > StatBudget</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00132">Options.h:132</a></div></div>
|
|
72
72
|
<div class="ttc" id="classSVF_1_1Options_html_affd0cb6e0cb91e096537a3d3198bf4e5"><div class="ttname"><a href="classSVF_1_1Options.html#affd0cb6e0cb91e096537a3d3198bf4e5">SVF::Options::TypePrint</a></div><div class="ttdeci">static const llvm::cl::opt< bool > TypePrint</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00127">Options.h:127</a></div></div>
|
|
73
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0e09e07ee52ba605dc386ae1d7b965e2"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0e09e07ee52ba605dc386ae1d7b965e2">SVF::PointerAnalysis::getVFnsFromCHA</a></div><div class="ttdeci">void getVFnsFromCHA(const CallBlockNode *cs, VFunSet &vfns)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#
|
|
73
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0e09e07ee52ba605dc386ae1d7b965e2"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0e09e07ee52ba605dc386ae1d7b965e2">SVF::PointerAnalysis::getVFnsFromCHA</a></div><div class="ttdeci">void getVFnsFromCHA(const CallBlockNode *cs, VFunSet &vfns)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00492">PointerAnalysis.cpp:492</a></div></div>
|
|
74
74
|
<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>
|
|
75
75
|
<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>
|
|
76
76
|
<div class="ttc" id="classSVF_1_1Options_html_a113ee30422ef08b6790eed9a83277b9c"><div class="ttname"><a href="classSVF_1_1Options.html#a113ee30422ef08b6790eed9a83277b9c">SVF::Options::PTSAllPrint</a></div><div class="ttdeci">static const llvm::cl::opt< bool > PTSAllPrint</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00130">Options.h:130</a></div></div>
|
|
77
77
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a60b111647e000cc983aa52513f90afbc"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">SVF::PointerAnalysis::getAllValidPtrs</a></div><div class="ttdeci">OrderedNodeSet & getAllValidPtrs()</div><div class="ttdoc">Get all Valid Pointers for resolution. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00222">PointerAnalysis.h:222</a></div></div>
|
|
78
78
|
<div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00421">SymbolTableInfo.h:421</a></div></div>
|
|
79
79
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac522df904e702381222a4d9b205c775b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac522df904e702381222a4d9b205c775b">SVF::PointerAnalysis::getNumOfResolvedIndCallEdge</a></div><div class="ttdeci">Size_t getNumOfResolvedIndCallEdge() const</div><div class="ttdoc">Return number of resolved indirect call edges. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00173">PointerAnalysis.h:173</a></div></div>
|
|
80
|
-
<div class="ttc" id="
|
|
81
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ab982e6bbd99a2f9a0a3abbebeeb00dcc"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ab982e6bbd99a2f9a0a3abbebeeb00dcc">SVF::PointerAnalysis::validateExpectedFailureTests</a></div><div class="ttdeci">virtual void validateExpectedFailureTests(std::string fun)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00637">PointerAnalysis.cpp:637</a></div></div>
|
|
80
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ab982e6bbd99a2f9a0a3abbebeeb00dcc"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ab982e6bbd99a2f9a0a3abbebeeb00dcc">SVF::PointerAnalysis::validateExpectedFailureTests</a></div><div class="ttdeci">virtual void validateExpectedFailureTests(std::string fun)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00635">PointerAnalysis.cpp:635</a></div></div>
|
|
82
81
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a251638a947815a8ff91a507486cadfcd"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a251638a947815a8ff91a507486cadfcd">SVF::PointerAnalysis::chgraph</a></div><div class="ttdeci">static CommonCHGraph * chgraph</div><div class="ttdoc">CHGraph. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00163">PointerAnalysis.h:163</a></div></div>
|
|
83
|
-
<div class="ttc" id="ExternalPAG_8h_html"><div class="ttname"><a href="ExternalPAG_8h.html">ExternalPAG.h</a></div></div>
|
|
84
82
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac0c0855918cb2cdc3d8ebc175acfbd4da66b132e5ab8c8746eb22e58d199b4c2a"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da66b132e5ab8c8746eb22e58d199b4c2a">SVF::PointerAnalysis::BaseImpl</a></div><div class="ttdoc">Represents PointerAnalaysis. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00100">PointerAnalysis.h:100</a></div></div>
|
|
85
83
|
<div class="ttc" id="classSVF_1_1Options_html_ace0fa364337374ce75a58a9e2f229e24"><div class="ttname"><a href="classSVF_1_1Options.html#ace0fa364337374ce75a58a9e2f229e24">SVF::Options::PTSPrint</a></div><div class="ttdeci">static const llvm::cl::opt< bool > PTSPrint</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00129">Options.h:129</a></div></div>
|
|
86
84
|
<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>
|
|
87
|
-
<div class="ttc" id="ExternalPAG_8h_html_acbba9510c89f3a87e7043cf6327ae7cb"><div class="ttname"><a href="ExternalPAG_8h.html#acbba9510c89f3a87e7043cf6327ae7cb">DumpPAGFunctions</a></div><div class="ttdeci">llvm::cl::list< std::string > DumpPAGFunctions</div></div>
|
|
88
85
|
<div class="ttc" id="CPPUtil_8h_html"><div class="ttname"><a href="CPPUtil_8h.html">CPPUtil.h</a></div></div>
|
|
89
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a062f1f2d6d47694caa9ac64a9e68c7b3"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a062f1f2d6d47694caa9ac64a9e68c7b3">SVF::PointerAnalysis::printIndCSTargets</a></div><div class="ttdeci">void printIndCSTargets()</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#
|
|
86
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a062f1f2d6d47694caa9ac64a9e68c7b3"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a062f1f2d6d47694caa9ac64a9e68c7b3">SVF::PointerAnalysis::printIndCSTargets</a></div><div class="ttdeci">void printIndCSTargets()</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00398">PointerAnalysis.cpp:398</a></div></div>
|
|
90
87
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
91
88
|
<div class="ttc" id="classSVF_1_1Options_html_a498a1a05a08be1ffd845aefeb0672bcb"><div class="ttname"><a href="classSVF_1_1Options.html#a498a1a05a08be1ffd845aefeb0672bcb">SVF::Options::PStat</a></div><div class="ttdeci">static const llvm::cl::opt< bool > PStat</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00131">Options.h:131</a></div></div>
|
|
92
89
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a651cc82379c2d18cc2f69f25b2ae08db"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a651cc82379c2d18cc2f69f25b2ae08db">SVF::PointerAnalysis::aliasTestFailMayAliasMangled</a></div><div class="ttdeci">static const std::string aliasTestFailMayAliasMangled</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00126">PointerAnalysis.h:126</a></div></div>
|
|
93
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a8ff3f219b9f118a4f06360750408c9cb"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a8ff3f219b9f118a4f06360750408c9cb">SVF::PointerAnalysis::connectVCallToVFns</a></div><div class="ttdeci">void connectVCallToVFns(const CallBlockNode *cs, const VFunSet &vfns, CallEdgeMap &newEdges)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#
|
|
90
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a8ff3f219b9f118a4f06360750408c9cb"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a8ff3f219b9f118a4f06360750408c9cb">SVF::PointerAnalysis::connectVCallToVFns</a></div><div class="ttdeci">void connectVCallToVFns(const CallBlockNode *cs, const VFunSet &vfns, CallEdgeMap &newEdges)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00527">PointerAnalysis.cpp:527</a></div></div>
|
|
94
91
|
<div class="ttc" id="classSVF_1_1MemObj_html_ae1d14e2bf0be36cdadebf119822f607b"><div class="ttname"><a href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b">SVF::MemObj::isFunction</a></div><div class="ttdeci">bool isFunction() const</div><div class="ttdoc">object attributes methods </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00828">SymbolTableInfo.cpp:828</a></div></div>
|
|
95
92
|
<div class="ttc" id="namespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00075">BasicTypes.h:75</a></div></div>
|
|
96
93
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ab83b827ea42d3a61aad20b1a1485d866"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ab83b827ea42d3a61aad20b1a1485d866">SVF::PointerAnalysis::dumpStat</a></div><div class="ttdeci">void dumpStat()</div><div class="ttdoc">Dump the statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00205">PointerAnalysis.cpp:205</a></div></div>
|
|
97
94
|
<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>
|
|
98
95
|
<div class="ttc" id="classSVF_1_1ICFG_html_a7d10e8a815c836a070d35850f817a18c"><div class="ttname"><a href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">SVF::ICFG::getCallBlockNode</a></div><div class="ttdeci">CallBlockNode * getCallBlockNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00197">ICFG.cpp:197</a></div></div>
|
|
99
96
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac353221cc7aced590dcf3550a24b1570"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac353221cc7aced590dcf3550a24b1570">SVF::PointerAnalysis::aliasTestNoAlias</a></div><div class="ttdeci">static const std::string aliasTestNoAlias</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00119">PointerAnalysis.h:119</a></div></div>
|
|
100
|
-
<div class="ttc" id="classSVF_1_1IRGraph_html_a1cb32461439c4dc8d044c2bfadb11307"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a1cb32461439c4dc8d044c2bfadb11307">SVF::IRGraph::dump</a></div><div class="ttdeci">void dump(std::string name)</div><div class="ttdoc">Dump SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8cpp_source.html#
|
|
101
|
-
<div class="ttc" id="classSVF_1_1IRGraph_html_a41423da58a07b344bc7ca8dd96d48f98"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a41423da58a07b344bc7ca8dd96d48f98">SVF::IRGraph::isBuiltFromFile</a></div><div class="ttdeci">bool isBuiltFromFile()</div><div class="ttdoc">Whether this SVFIR built from a txt file. </div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#
|
|
97
|
+
<div class="ttc" id="classSVF_1_1IRGraph_html_a1cb32461439c4dc8d044c2bfadb11307"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a1cb32461439c4dc8d044c2bfadb11307">SVF::IRGraph::dump</a></div><div class="ttdeci">void dump(std::string name)</div><div class="ttdoc">Dump SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8cpp_source.html#l00099">IRGraph.cpp:99</a></div></div>
|
|
98
|
+
<div class="ttc" id="classSVF_1_1IRGraph_html_a41423da58a07b344bc7ca8dd96d48f98"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a41423da58a07b344bc7ca8dd96d48f98">SVF::IRGraph::isBuiltFromFile</a></div><div class="ttdeci">bool isBuiltFromFile()</div><div class="ttdoc">Whether this SVFIR built from a txt file. </div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00103">IRGraph.h:103</a></div></div>
|
|
102
99
|
<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>
|
|
103
100
|
<div class="ttc" id="namespaceSVF_html_aa962cc1d782cc46553251e96b64a754b"><div class="ttname"><a href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">SVF::PointerType</a></div><div class="ttdeci">llvm::PointerType PointerType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00108">BasicTypes.h:108</a></div></div>
|
|
104
101
|
<div class="ttc" id="classSVF_1_1PTACallGraph_html_a841be22581a7896d8924564e7199f62b"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#a841be22581a7896d8924564e7199f62b">SVF::PTACallGraph::dump</a></div><div class="ttdeci">void dump(const std::string &filename)</div><div class="ttdoc">Dump the graph. </div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8cpp_source.html#l00314">PTACallGraph.cpp:314</a></div></div>
|
|
105
102
|
<div class="ttc" id="classSVF_1_1MemObj_html_af7316c697eafc71d5fc93108da4e2cee"><div class="ttname"><a href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">SVF::MemObj::isStack</a></div><div class="ttdeci">bool isStack() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00843">SymbolTableInfo.cpp:843</a></div></div>
|
|
106
103
|
<div class="ttc" id="classSVF_1_1PointsTo_1_1PointsToIterator_html"><div class="ttname"><a href="classSVF_1_1PointsTo_1_1PointsToIterator.html">SVF::PointsTo::PointsToIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00174">PointsTo.h:174</a></div></div>
|
|
107
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0454332c89e60729956bb7d69a1a24df"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0454332c89e60729956bb7d69a1a24df">SVF::PointerAnalysis::validateTests</a></div><div class="ttdeci">virtual void validateTests()</div><div class="ttdoc">Alias check functions to verify correctness of pointer analysis. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#
|
|
104
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0454332c89e60729956bb7d69a1a24df"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0454332c89e60729956bb7d69a1a24df">SVF::PointerAnalysis::validateTests</a></div><div class="ttdeci">virtual void validateTests()</div><div class="ttdoc">Alias check functions to verify correctness of pointer analysis. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00269">PointerAnalysis.cpp:269</a></div></div>
|
|
108
105
|
<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>
|
|
109
106
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af0f447732c67402037a86ea29006efc2"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af0f447732c67402037a86ea29006efc2">SVF::SVFUtil::errs</a></div><div class="ttdeci">raw_ostream & errs()</div><div class="ttdoc">Overwrite llvm::errs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00055">SVFUtil.h:55</a></div></div>
|
|
110
107
|
<div class="ttc" id="namespaceSVF_html_adc8b60ca7d60cf6c81feae20e4a04c63"><div class="ttname"><a href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">SVF::CallInst</a></div><div class="ttdeci">llvm::CallInst CallInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00148">BasicTypes.h:148</a></div></div>
|
|
111
108
|
<div class="ttc" id="classSVF_1_1Options_html_a153d42a480ef1763ad59fd7258ac3ac5"><div class="ttname"><a href="classSVF_1_1Options.html#a153d42a480ef1763ad59fd7258ac3ac5">SVF::Options::EnableThreadCallGraph</a></div><div class="ttdeci">static const llvm::cl::opt< bool > EnableThreadCallGraph</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00141">Options.h:141</a></div></div>
|
|
112
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a8fa5b8a7b410faf63106a879ff72bf51"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a8fa5b8a7b410faf63106a879ff72bf51">SVF::PointerAnalysis::getVFnsFromPts</a></div><div class="ttdeci">void getVFnsFromPts(const CallBlockNode *cs, const PointsTo &target, VFunSet &vfns)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#
|
|
109
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a8fa5b8a7b410faf63106a879ff72bf51"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a8fa5b8a7b410faf63106a879ff72bf51">SVF::PointerAnalysis::getVFnsFromPts</a></div><div class="ttdeci">void getVFnsFromPts(const CallBlockNode *cs, const PointsTo &target, VFunSet &vfns)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00501">PointerAnalysis.cpp:501</a></div></div>
|
|
113
110
|
<div class="ttc" id="classSVF_1_1Options_html_ad6c29b05188c9e06aa89623c61865ed8"><div class="ttname"><a href="classSVF_1_1Options.html#ad6c29b05188c9e06aa89623c61865ed8">SVF::Options::IndirectCallLimit</a></div><div class="ttdeci">static const llvm::cl::opt< unsigned > IndirectCallLimit</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00138">Options.h:138</a></div></div>
|
|
114
111
|
<div class="ttc" id="SVFUtil_8h_html"><div class="ttname"><a href="SVFUtil_8h.html">SVFUtil.h</a></div></div>
|
|
115
112
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ad47b39252e02c68dfb466d4f42dc7ebe"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ad47b39252e02c68dfb466d4f42dc7ebe">SVF::PointerAnalysis::ptaCallGraph</a></div><div class="ttdeci">PTACallGraph * ptaCallGraph</div><div class="ttdoc">Call graph used for pointer analysis. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00157">PointerAnalysis.h:157</a></div></div>
|
|
116
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a14e2a209cb594f91a24ef09b12f82f3f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a14e2a209cb594f91a24ef09b12f82f3f">SVF::PointerAnalysis::PointerAnalysis</a></div><div class="ttdeci">PointerAnalysis(SVFIR *pag, PTATY ty=Default_PTA, bool alias_check=true)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#
|
|
113
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a14e2a209cb594f91a24ef09b12f82f3f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a14e2a209cb594f91a24ef09b12f82f3f">SVF::PointerAnalysis::PointerAnalysis</a></div><div class="ttdeci">PointerAnalysis(SVFIR *pag, PTATY ty=Default_PTA, bool alias_check=true)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00075">PointerAnalysis.cpp:75</a></div></div>
|
|
117
114
|
<div class="ttc" id="classSVF_1_1SVFVar_html"><div class="ttname"><a href="classSVF_1_1SVFVar.html">SVF::SVFVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00046">SVFVariables.h:46</a></div></div>
|
|
118
115
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_abd9da46106d820721a24201caaa164e1"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">SVF::PointerAnalysis::alias</a></div><div class="ttdeci">virtual AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB)=0</div><div class="ttdoc">Interface exposed to users of our pointer analysis, given Location infos. </div></div>
|
|
119
116
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a3fd44d3cfc3f4ab18506870c65df32f5"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a3fd44d3cfc3f4ab18506870c65df32f5">SVF::PointerAnalysis::dumpGraph</a></div><div class="ttdeci">bool dumpGraph()</div><div class="ttdoc">Whether to dump the graph for debugging purpose. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00196">PointerAnalysis.cpp:196</a></div></div>
|
|
120
117
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_aafa5df4aa576a144476e547b1da35795"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#aafa5df4aa576a144476e547b1da35795">SVF::PointerAnalysis::callGraphSCCDetection</a></div><div class="ttdeci">void callGraphSCCDetection()</div><div class="ttdoc">CallGraph SCC related methods. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00413">PointerAnalysis.h:413</a></div></div>
|
|
118
|
+
<div class="ttc" id="CHGBuilder_8h_html"><div class="ttname"><a href="CHGBuilder_8h.html">CHGBuilder.h</a></div></div>
|
|
121
119
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a28c0ede7e4765d2a686fc8ae0f5641a4"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">SVF::SVFUtil::getSourceLoc</a></div><div class="ttdeci">std::string getSourceLoc(const Value *val)</div><div class="ttdoc">Return source code including line number and file name from debug information. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00269">SVFUtil.cpp:269</a></div></div>
|
|
122
120
|
<div class="ttc" id="classSVF_1_1DCHGraph_html"><div class="ttname"><a href="classSVF_1_1DCHGraph.html">SVF::DCHGraph</a></div><div class="ttdoc">Dwarf based CHG. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00208">DCHG.h:208</a></div></div>
|
|
123
|
-
<div class="ttc" id="classSVF_1_1SVFIR_html_a37cfa2aa4e7b98ef9dc8179f581a2362"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVF::SVFIR::getPAG</a></div><div class="ttdeci">static SVFIR * getPAG(bool buildFromFile=false)</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="SVFIR_8h_source.html#
|
|
121
|
+
<div class="ttc" id="classSVF_1_1SVFIR_html_a37cfa2aa4e7b98ef9dc8179f581a2362"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVF::SVFIR::getPAG</a></div><div class="ttdeci">static SVFIR * getPAG(bool buildFromFile=false)</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="SVFIR_8h_source.html#l00107">SVFIR.h:107</a></div></div>
|
|
124
122
|
<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>
|
|
125
|
-
<div class="ttc" id="classSVF_1_1CHGraph_html_ae6b620ead0f214e72fbef9c26da3d5a0"><div class="ttname"><a href="classSVF_1_1CHGraph.html#ae6b620ead0f214e72fbef9c26da3d5a0">SVF::CHGraph::buildCHG</a></div><div class="ttdeci">void buildCHG()</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00082">CHG.cpp:82</a></div></div>
|
|
126
123
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a7e8b3f6843e5ea75fd189162d2cd60a5"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a7e8b3f6843e5ea75fd189162d2cd60a5">SVF::PointerAnalysis::svfMod</a></div><div class="ttdeci">SVFModule * svfMod</div><div class="ttdoc">Module. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00149">PointerAnalysis.h:149</a></div></div>
|
|
127
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a521f99705f67e3fea7167728a4e37129"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a521f99705f67e3fea7167728a4e37129">SVF::PointerAnalysis::matchArgs</a></div><div class="ttdeci">bool matchArgs(const CallBlockNode *cs, const SVFFunction *callee)</div><div class="ttdoc">Match arguments for callsite at caller and callee. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#
|
|
124
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a521f99705f67e3fea7167728a4e37129"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a521f99705f67e3fea7167728a4e37129">SVF::PointerAnalysis::matchArgs</a></div><div class="ttdeci">bool matchArgs(const CallBlockNode *cs, const SVFFunction *callee)</div><div class="ttdoc">Match arguments for callsite at caller and callee. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00481">PointerAnalysis.cpp:481</a></div></div>
|
|
128
125
|
<div class="ttc" id="classSVF_1_1Options_html_a3a20311c732fb391332ae0ee1cb450a0"><div class="ttname"><a href="classSVF_1_1Options.html#a3a20311c732fb391332ae0ee1cb450a0">SVF::Options::PAGDotGraph</a></div><div class="ttdeci">static const llvm::cl::opt< bool > PAGDotGraph</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00133">Options.h:133</a></div></div>
|
|
129
126
|
<div class="ttc" id="classSVF_1_1CallBlockNode_html_a5bab98a0b8cf0a804d53abd994e922c0"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html#a5bab98a0b8cf0a804d53abd994e922c0">SVF::CallBlockNode::getCaller</a></div><div class="ttdeci">const SVFFunction * getCaller() const</div><div class="ttdoc">Return callsite. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00400">ICFGNode.h:400</a></div></div>
|
|
130
127
|
<div class="ttc" id="classSVF_1_1CommonCHGraph_html_ae90f9a2152ab07aa0df16badd733f1fd"><div class="ttname"><a href="classSVF_1_1CommonCHGraph.html#ae90f9a2152ab07aa0df16badd733f1fd">SVF::CommonCHGraph::getCSVtblsBasedonCHA</a></div><div class="ttdeci">virtual const VTableSet & getCSVtblsBasedonCHA(CallSite cs)=0</div></div>
|
|
@@ -134,21 +131,21 @@ $(function() {
|
|
|
134
131
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_afc320fbf269404fe128e69c98e6f9cac"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#afc320fbf269404fe128e69c98e6f9cac">SVF::PointerAnalysis::OnTheFlyIterBudgetForStat</a></div><div class="ttdeci">u32_t OnTheFlyIterBudgetForStat</div><div class="ttdoc">Flag for iteration budget for on-the-fly statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00143">PointerAnalysis.h:143</a></div></div>
|
|
135
132
|
<div class="ttc" id="classSVF_1_1SVFFunction_html_a3757cd3ae587eaca488fa4cd8ad3967d"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a3757cd3ae587eaca488fa4cd8ad3967d">SVF::SVFFunction::arg_size</a></div><div class="ttdeci">u32_t arg_size() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00265">BasicTypes.h:265</a></div></div>
|
|
136
133
|
<div class="ttc" id="classSVF_1_1CommonCHGraph_html_aae511b2ee7c2c7ea7be70c7884e92021"><div class="ttname"><a href="classSVF_1_1CommonCHGraph.html#aae511b2ee7c2c7ea7be70c7884e92021">SVF::CommonCHGraph::getVFnsFromVtbls</a></div><div class="ttdeci">virtual void getVFnsFromVtbls(CallSite cs, const VTableSet &vtbls, VFunSet &virtualFunctions)=0</div></div>
|
|
137
|
-
<div class="ttc" id="classSVF_1_1CHGraph_html"><div class="ttname"><a href="classSVF_1_1CHGraph.html">SVF::CHGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#
|
|
134
|
+
<div class="ttc" id="classSVF_1_1CHGraph_html"><div class="ttname"><a href="classSVF_1_1CHGraph.html">SVF::CHGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00208">CHG.h:208</a></div></div>
|
|
138
135
|
<div class="ttc" id="classSVF_1_1PTACallGraph_html_a09d0b8461ec0e678e1e69368b0f66b02"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#a09d0b8461ec0e678e1e69368b0f66b02">SVF::PTACallGraph::addIndirectCallGraphEdge</a></div><div class="ttdeci">void addIndirectCallGraphEdge(const CallBlockNode *cs, const SVFFunction *callerFun, const SVFFunction *calleeFun)</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8cpp_source.html#l00185">PTACallGraph.cpp:185</a></div></div>
|
|
139
|
-
<div class="ttc" id="classSVF_1_1IRGraph_html_abffddd41cc308b9b3bd5ad4a7f8f1624"><div class="ttname"><a href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">SVF::IRGraph::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#
|
|
136
|
+
<div class="ttc" id="classSVF_1_1IRGraph_html_abffddd41cc308b9b3bd5ad4a7f8f1624"><div class="ttname"><a href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">SVF::IRGraph::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00120">IRGraph.h:120</a></div></div>
|
|
140
137
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a8d3a457efb1963f8d87305bf33c02754"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a8d3a457efb1963f8d87305bf33c02754">SVF::PointerAnalysis::hasIndCSCallees</a></div><div class="ttdeci">bool hasIndCSCallees(const CallBlockNode *cs) const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00395">PointerAnalysis.h:395</a></div></div>
|
|
141
138
|
<div class="ttc" id="PAGBuilderFromFile_8h_html"><div class="ttname"><a href="PAGBuilderFromFile_8h.html">PAGBuilderFromFile.h</a></div></div>
|
|
142
139
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a118dabc50024b5cd91095814ade47166"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">SVF::PointerAnalysis::finalize</a></div><div class="ttdeci">virtual void finalize()</div><div class="ttdoc">Finalization of a pointer analysis, including checking alias correctness. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00218">PointerAnalysis.cpp:218</a></div></div>
|
|
143
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a1a6cee7e690ccb3e53cdc4c3e67b386d"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a1a6cee7e690ccb3e53cdc4c3e67b386d">SVF::PointerAnalysis::dumpPts</a></div><div class="ttdeci">virtual void dumpPts(NodeID ptr, const PointsTo &pts)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#
|
|
140
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a1a6cee7e690ccb3e53cdc4c3e67b386d"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a1a6cee7e690ccb3e53cdc4c3e67b386d">SVF::PointerAnalysis::dumpPts</a></div><div class="ttdeci">virtual void dumpPts(NodeID ptr, const PointsTo &pts)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00310">PointerAnalysis.cpp:310</a></div></div>
|
|
144
141
|
<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>
|
|
145
142
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a7c9b7e5fe37ae31ba84d167945ca57df"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">SVF::PointerAnalysis::getPTACallGraph</a></div><div class="ttdeci">PTACallGraph * getPTACallGraph() const</div><div class="ttdoc">Return call graph. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00178">PointerAnalysis.h:178</a></div></div>
|
|
146
143
|
<div class="ttc" id="classSVF_1_1PointsTo_html_aa53962e561399bf493d1f2b9137356f6"><div class="ttname"><a href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">SVF::PointsTo::begin</a></div><div class="ttdeci">const_iterator begin(void) const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00127">PointsTo.h:127</a></div></div>
|
|
147
|
-
<div class="ttc" id="classSVF_1_1SVFIR_html_ad44e1ef13d047f8aea8f6ddf5510bd6c"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ad44e1ef13d047f8aea8f6ddf5510bd6c">SVF::SVFIR::isIndirectCallSites</a></div><div class="ttdeci">bool isIndirectCallSites(const CallBlockNode *cs) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#
|
|
144
|
+
<div class="ttc" id="classSVF_1_1SVFIR_html_ad44e1ef13d047f8aea8f6ddf5510bd6c"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ad44e1ef13d047f8aea8f6ddf5510bd6c">SVF::SVFIR::isIndirectCallSites</a></div><div class="ttdeci">bool isIndirectCallSites(const CallBlockNode *cs) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00329">SVFIR.h:329</a></div></div>
|
|
148
145
|
<div class="ttc" id="namespaceSVF_html_a6c559fdb6e0c4e84c4e5b05a5cf90052"><div class="ttname"><a href="namespaceSVF.html#a6c559fdb6e0c4e84c4e5b05a5cf90052">SVF::LLVMCallGraph</a></div><div class="ttdeci">llvm::CallGraph LLVMCallGraph</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00085">BasicTypes.h:85</a></div></div>
|
|
149
146
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a13ce6b930a35877f17bffd4b89e22654"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a13ce6b930a35877f17bffd4b89e22654">SVF::PointerAnalysis::aliasTestMayAliasMangled</a></div><div class="ttdeci">static const std::string aliasTestMayAliasMangled</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00118">PointerAnalysis.h:118</a></div></div>
|
|
150
147
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_af46f4b99fc2d5061c9266a7f45aafaca"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#af46f4b99fc2d5061c9266a7f45aafaca">SVF::PointerAnalysis::VTableSet</a></div><div class="ttdeci">Set< const GlobalValue * > VTableSet</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00113">PointerAnalysis.h:113</a></div></div>
|
|
151
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a7accf4e4db4001716e53d98ce5217ac8"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">SVF::PointerAnalysis::validateSuccessTests</a></div><div class="ttdeci">virtual void validateSuccessTests(std::string fun)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#
|
|
148
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a7accf4e4db4001716e53d98ce5217ac8"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a7accf4e4db4001716e53d98ce5217ac8">SVF::PointerAnalysis::validateSuccessTests</a></div><div class="ttdeci">virtual void validateSuccessTests(std::string fun)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00565">PointerAnalysis.cpp:565</a></div></div>
|
|
152
149
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph< SVFVar, SVFStmt >::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00338">GenericGraph.h:338</a></div></div>
|
|
153
150
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a18347e41bc66b16e3f42c7c52811ad42"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a18347e41bc66b16e3f42c7c52811ad42">SVF::PointerAnalysis::aliasTestFailNoAlias</a></div><div class="ttdeci">static const std::string aliasTestFailNoAlias</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00127">PointerAnalysis.h:127</a></div></div>
|
|
154
151
|
<div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set< Key, Hash, KeyEqual, Allocator > Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00095">SVFBasicTypes.h:95</a></div></div>
|
|
@@ -183,9 +180,9 @@ $(function() {
|
|
|
183
180
|
<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>
|
|
184
181
|
<div class="ttc" id="PointerAnalysisImpl_8h_html"><div class="ttname"><a href="PointerAnalysisImpl_8h.html">PointerAnalysisImpl.h</a></div></div>
|
|
185
182
|
<div class="ttc" id="classSVF_1_1PTAStat_html_acfed70588cf921694db35990ec3c7497"><div class="ttname"><a href="classSVF_1_1PTAStat.html#acfed70588cf921694db35990ec3c7497">SVF::PTAStat::performStat</a></div><div class="ttdeci">virtual void performStat()</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00132">PTAStat.cpp:132</a></div></div>
|
|
186
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a40738643202ca6301671f51da3fc1137"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a40738643202ca6301671f51da3fc1137">SVF::PointerAnalysis::resolveIndCalls</a></div><div class="ttdeci">virtual void resolveIndCalls(const CallBlockNode *cs, const PointsTo &target, CallEdgeMap &newEdges, LLVMCallGraph *callgraph=nullptr)</div><div class="ttdoc">Resolve indirect call edges. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#
|
|
183
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a40738643202ca6301671f51da3fc1137"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a40738643202ca6301671f51da3fc1137">SVF::PointerAnalysis::resolveIndCalls</a></div><div class="ttdeci">virtual void resolveIndCalls(const CallBlockNode *cs, const PointsTo &target, CallEdgeMap &newEdges, LLVMCallGraph *callgraph=nullptr)</div><div class="ttdoc">Resolve indirect call edges. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00433">PointerAnalysis.cpp:433</a></div></div>
|
|
187
184
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a83b0a51d88fa7aadff6e9267765d07a5"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a83b0a51d88fa7aadff6e9267765d07a5">SVF::PointerAnalysis::aliasTestPartialAlias</a></div><div class="ttdeci">static const std::string aliasTestPartialAlias</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00121">PointerAnalysis.h:121</a></div></div>
|
|
188
|
-
<div class="ttc" id="classSVF_1_1SVFIR_html_a236b4fefd16e9c793c5bd6d576290841"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a236b4fefd16e9c793c5bd6d576290841">SVF::SVFIR::print</a></div><div class="ttdeci">void print()</div><div class="ttdoc">Print SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#
|
|
185
|
+
<div class="ttc" id="classSVF_1_1SVFIR_html_a236b4fefd16e9c793c5bd6d576290841"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a236b4fefd16e9c793c5bd6d576290841">SVF::SVFIR::print</a></div><div class="ttdeci">void print()</div><div class="ttdoc">Print SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00557">SVFIR.cpp:557</a></div></div>
|
|
189
186
|
<div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
|
|
190
187
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_aac1a133d478bd14c74309d9c4eaf0c8e"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#aac1a133d478bd14c74309d9c4eaf0c8e">SVF::PointerAnalysis::alias_validation</a></div><div class="ttdeci">bool alias_validation</div><div class="ttdoc">Flag for validating points-to/alias results. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00141">PointerAnalysis.h:141</a></div></div>
|
|
191
188
|
<div class="ttc" id="classSVF_1_1ICFG_html_a5a00682b75726cacc1b4d88bbf40c824"><div class="ttname"><a href="classSVF_1_1ICFG.html#a5a00682b75726cacc1b4d88bbf40c824">SVF::ICFG::updateCallGraph</a></div><div class="ttdeci">void updateCallGraph(PTACallGraph *callgraph)</div><div class="ttdoc">update ICFG for indirect calls </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00414">ICFG.cpp:414</a></div></div>
|
|
@@ -205,16 +202,15 @@ $(function() {
|
|
|
205
202
|
<div class="ttc" id="classSVF_1_1CallBlockNode_html_ad3d50024efcfa94b1246c982b43aff2f"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">SVF::CallBlockNode::getCallSite</a></div><div class="ttdeci">const Instruction * getCallSite() const</div><div class="ttdoc">Return callsite. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00381">ICFGNode.h:381</a></div></div>
|
|
206
203
|
<div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
|
|
207
204
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a108380f6f0b67654bb7c7676686096c8"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a108380f6f0b67654bb7c7676686096c8">SVF::PointerAnalysis::isLocalVarInRecursiveFun</a></div><div class="ttdeci">bool isLocalVarInRecursiveFun(NodeID id) const</div><div class="ttdoc">Whether a local variable is in function recursions. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00166">PointerAnalysis.cpp:166</a></div></div>
|
|
208
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a4aeca84393c5586eea7a480737daf17c"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a4aeca84393c5586eea7a480737daf17c">SVF::PointerAnalysis::~PointerAnalysis</a></div><div class="ttdeci">virtual ~PointerAnalysis()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#
|
|
205
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a4aeca84393c5586eea7a480737daf17c"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a4aeca84393c5586eea7a480737daf17c">SVF::PointerAnalysis::~PointerAnalysis</a></div><div class="ttdeci">virtual ~PointerAnalysis()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00088">PointerAnalysis.cpp:88</a></div></div>
|
|
209
206
|
<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>
|
|
210
207
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ad95c842964e6ca46e51fb763fefec585"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">SVF::PointerAnalysis::CallSiteToFunPtrMap</a></div><div class="ttdeci">SVFIR::CallSiteToFunPtrMap CallSiteToFunPtrMap</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00109">PointerAnalysis.h:109</a></div></div>
|
|
211
208
|
<div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00165">GenericGraph.h:165</a></div></div>
|
|
212
209
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a4f457db1cfa0d4f94762a306c0ac3757"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a4f457db1cfa0d4f94762a306c0ac3757">SVF::SVFUtil::getFunction</a></div><div class="ttdeci">const SVFFunction * getFunction(StringRef name)</div><div class="ttdoc">Get the corresponding Function based on its name. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00227">SVFUtil.h:227</a></div></div>
|
|
213
210
|
<div class="ttc" id="classSVF_1_1Options_html_a98df022c5da54ea30b3f0ce008d3ca80"><div class="ttname"><a href="classSVF_1_1Options.html#a98df022c5da54ea30b3f0ce008d3ca80">SVF::Options::PAGPrint</a></div><div class="ttdeci">static const llvm::cl::opt< bool > PAGPrint</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00137">Options.h:137</a></div></div>
|
|
214
|
-
<div class="ttc" id="classSVF_1_1ExternalPAG_html_acee9fa409f3649dcf2c0f5e6da66ceb0"><div class="ttname"><a href="classSVF_1_1ExternalPAG.html#acee9fa409f3649dcf2c0f5e6da66ceb0">SVF::ExternalPAG::dumpFunctions</a></div><div class="ttdeci">static void dumpFunctions(std::vector< std::string > functions)</div><div class="ttdoc">Dump individual PAGs of specified functions. Currently to outs(). </div><div class="ttdef"><b>Definition:</b> <a href="ExternalPAG_8cpp_source.html#l00256">ExternalPAG.cpp:256</a></div></div>
|
|
215
211
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5d3c3094e263bf16a4f312a118c1bd36"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5d3c3094e263bf16a4f312a118c1bd36">SVF::PointerAnalysis::ptaImplTy</a></div><div class="ttdeci">PTAImplTy ptaImplTy</div><div class="ttdoc">PTA implementation type. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00153">PointerAnalysis.h:153</a></div></div>
|
|
216
212
|
<div class="ttc" id="SVFModule_8h_html"><div class="ttname"><a href="SVFModule_8h.html">SVFModule.h</a></div></div>
|
|
217
|
-
<div class="ttc" id="classSVF_1_1SVFIR_html_ad6e18f520f6b559f2304002792f6b701"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">SVF::SVFIR::getModule</a></div><div class="ttdeci">SVFModule * getModule()</div><div class="ttdoc">Get LLVM Module. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#
|
|
213
|
+
<div class="ttc" id="classSVF_1_1SVFIR_html_ad6e18f520f6b559f2304002792f6b701"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">SVF::SVFIR::getModule</a></div><div class="ttdeci">SVFModule * getModule()</div><div class="ttdoc">Get LLVM Module. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00156">SVFIR.h:156</a></div></div>
|
|
218
214
|
<div class="ttc" id="classSVF_1_1SVFFunction_html_a3c1fa59deae39c75c72c97e47326d982"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a3c1fa59deae39c75c72c97e47326d982">SVF::SVFFunction::isVarArg</a></div><div class="ttdeci">bool isVarArg() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00270">BasicTypes.h:270</a></div></div>
|
|
219
215
|
<div class="ttc" id="classSVF_1_1MemObj_html_a4da54ef60231d2e6c26669226b99d2f3"><div class="ttname"><a href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">SVF::MemObj::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get the reference value to this object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00445">SymbolTableInfo.h:445</a></div></div>
|
|
220
216
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_acbb517523fd30708ed1a93f306cd3545"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#acbb517523fd30708ed1a93f306cd3545">SVF::PointerAnalysis::aliasTestPartialAliasMangled</a></div><div class="ttdeci">static const std::string aliasTestPartialAliasMangled</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00122">PointerAnalysis.h:122</a></div></div>
|
|
@@ -222,7 +218,7 @@ $(function() {
|
|
|
222
218
|
<div class="ttc" id="classSVF_1_1SCCDetection_html_a5d699af73b1e7ad4e3a5f6d26b8b6d15"><div class="ttname"><a href="classSVF_1_1SCCDetection.html#a5d699af73b1e7ad4e3a5f6d26b8b6d15">SVF::SCCDetection::isInCycle</a></div><div class="ttdeci">bool isInCycle(NodeID n) const</div><div class="ttdoc">whether the node is in a cycle </div><div class="ttdef"><b>Definition:</b> <a href="SCC_8h_source.html#l00149">SCC.h:149</a></div></div>
|
|
223
219
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">SVF::PointerAnalysis::PTATY</a></div><div class="ttdeci">PTATY</div><div class="ttdoc">Pointer analysis type list. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00062">PointerAnalysis.h:62</a></div></div>
|
|
224
220
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_adc7f5c71efb9cd1bec4f5ca9127654c3"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">SVF::PointerAnalysis::pag</a></div><div class="ttdeci">static SVFIR * pag</div><div class="ttdoc">SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00147">PointerAnalysis.h:147</a></div></div>
|
|
225
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a03dadb5429e2b84f88713a83153979a8"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a03dadb5429e2b84f88713a83153979a8">SVF::PointerAnalysis::destroy</a></div><div class="ttdeci">void destroy()</div><div class="ttdoc">Release the memory. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#
|
|
221
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a03dadb5429e2b84f88713a83153979a8"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a03dadb5429e2b84f88713a83153979a8">SVF::PointerAnalysis::destroy</a></div><div class="ttdeci">void destroy()</div><div class="ttdoc">Release the memory. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00096">PointerAnalysis.cpp:96</a></div></div>
|
|
226
222
|
<div class="ttc" id="CallGraphBuilder_8h_html"><div class="ttname"><a href="CallGraphBuilder_8h.html">CallGraphBuilder.h</a></div></div>
|
|
227
223
|
<div class="ttc" id="classSVF_1_1Options_html_afb6fabc25c0d7f9e9d1708ce648797fc"><div class="ttname"><a href="classSVF_1_1Options.html#afb6fabc25c0d7f9e9d1708ce648797fc">SVF::Options::UsePreCompFieldSensitive</a></div><div class="ttdeci">static const llvm::cl::opt< bool > UsePreCompFieldSensitive</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00139">Options.h:139</a></div></div>
|
|
228
224
|
<div class="ttc" id="classSVF_1_1SVFModule_html_a1357c876eccedd58b3abe68875b3a570"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVF::SVFModule::pagReadFromTXT</a></div><div class="ttdeci">static bool pagReadFromTXT()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00098">SVFModule.h:98</a></div></div>
|
|
@@ -234,13 +230,13 @@ $(function() {
|
|
|
234
230
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a73fb8e595473e0c7df1dd0de4968ad13"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a73fb8e595473e0c7df1dd0de4968ad13">SVF::PointerAnalysis::resetObjFieldSensitive</a></div><div class="ttdeci">void resetObjFieldSensitive()</div><div class="ttdoc">Reset all object node as field-sensitive. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00184">PointerAnalysis.cpp:184</a></div></div>
|
|
235
231
|
<div class="ttc" id="classSVF_1_1SVFIR_html"><div class="ttname"><a href="classSVF_1_1SVFIR.html">SVF::SVFIR</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00043">SVFIR.h:43</a></div></div>
|
|
236
232
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a5d4bb92f5df30417f414397f8e58cf01"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a5d4bb92f5df30417f414397f8e58cf01">SVF::SVFUtil::errMsg</a></div><div class="ttdeci">std::string errMsg(std::string msg)</div><div class="ttdoc">Print error message by converting a string into red string output. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00078">SVFUtil.cpp:78</a></div></div>
|
|
237
|
-
<div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#
|
|
238
|
-
<div class="ttc" id="classSVF_1_1CommonCHGraph_html"><div class="ttname"><a href="classSVF_1_1CommonCHGraph.html">SVF::CommonCHGraph</a></div><div class="ttdoc">Common base for class hierarchy graph. Only implements what PointerAnalysis needs. </div><div class="ttdef"><b>Definition:</b> <a href="
|
|
233
|
+
<div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00133">SVFIR.h:133</a></div></div>
|
|
234
|
+
<div class="ttc" id="classSVF_1_1CommonCHGraph_html"><div class="ttname"><a href="classSVF_1_1CommonCHGraph.html">SVF::CommonCHGraph</a></div><div class="ttdoc">Common base for class hierarchy graph. Only implements what PointerAnalysis needs. </div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00050">CHG.h:50</a></div></div>
|
|
239
235
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_aed4e5066f6ddef83afaf60adbcc11de0"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#aed4e5066f6ddef83afaf60adbcc11de0">SVF::PointerAnalysis::PTAName</a></div><div class="ttdeci">virtual const std::string PTAName() const</div><div class="ttdoc">Return PTA name. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00441">PointerAnalysis.h:441</a></div></div>
|
|
240
236
|
<div class="ttc" id="classSVF_1_1PTACallGraph_html_ac695d78f0a78e2e5f1fb4f93264e52b8"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#ac695d78f0a78e2e5f1fb4f93264e52b8">SVF::PTACallGraph::verifyCallGraph</a></div><div class="ttdeci">void verifyCallGraph()</div><div class="ttdoc">Issue a warning if the function which has indirect call sites can not be reached from program entry...</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8cpp_source.html#l00263">PTACallGraph.cpp:263</a></div></div>
|
|
241
237
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a74df51017ceaa389de2c2f33f3522fc3"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a74df51017ceaa389de2c2f33f3522fc3">SVF::PointerAnalysis::getFunPtr</a></div><div class="ttdeci">NodeID getFunPtr(const CallBlockNode *cs) const</div><div class="ttdoc">Return function pointer PAGNode at a callsite cs. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00285">PointerAnalysis.h:285</a></div></div>
|
|
242
238
|
<div class="ttc" id="PTAStat_8h_html"><div class="ttname"><a href="PTAStat_8h.html">PTAStat.h</a></div></div>
|
|
243
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a431ec4f85eb0f029e5740b92fd9ceb32"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32">SVF::PointerAnalysis::initialize</a></div><div class="ttdeci">virtual void initialize()</div><div class="ttdoc">Initialization of a pointer analysis, including building symbol table and SVFIR etc. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#
|
|
239
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a431ec4f85eb0f029e5740b92fd9ceb32"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32">SVF::PointerAnalysis::initialize</a></div><div class="ttdeci">virtual void initialize()</div><div class="ttdoc">Initialization of a pointer analysis, including building symbol table and SVFIR etc. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00111">PointerAnalysis.cpp:111</a></div></div>
|
|
244
240
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a32c6f12ce8bc0554dbb6aafa36f9a235"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a32c6f12ce8bc0554dbb6aafa36f9a235">SVF::PointerAnalysis::aliasTestFailMayAlias</a></div><div class="ttdeci">static const std::string aliasTestFailMayAlias</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00125">PointerAnalysis.h:125</a></div></div>
|
|
245
241
|
<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>
|
|
246
242
|
<div class="ttc" id="classSVF_1_1PointsTo_html_a8f741cdffbf3c5fe0f602cdca677dee6"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">SVF::PointsTo::end</a></div><div class="ttdeci">const_iterator end(void) const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00128">PointsTo.h:128</a></div></div>
|
|
@@ -249,10 +245,11 @@ $(function() {
|
|
|
249
245
|
<div class="ttc" id="LLVMUtil_8h_html"><div class="ttname"><a href="LLVMUtil_8h.html">LLVMUtil.h</a></div></div>
|
|
250
246
|
<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>
|
|
251
247
|
<div class="ttc" id="classSVF_1_1CallSite_html_adf342a3f777e611fe6b92b09154e247e"><div class="ttname"><a href="classSVF_1_1CallSite.html#adf342a3f777e611fe6b92b09154e247e">SVF::CallSite::getNumArgOperands</a></div><div class="ttdeci">unsigned getNumArgOperands() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00319">BasicTypes.h:319</a></div></div>
|
|
252
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac9f54859eabff4c1e1f5785d57a0c818"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac9f54859eabff4c1e1f5785d57a0c818">SVF::PointerAnalysis::resolveCPPIndCalls</a></div><div class="ttdeci">virtual void resolveCPPIndCalls(const CallBlockNode *cs, const PointsTo &target, CallEdgeMap &newEdges)</div><div class="ttdoc">Resolve cpp indirect call edges. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#
|
|
253
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a08399de593c073b6dd848a8d849dad27"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a08399de593c073b6dd848a8d849dad27">SVF::PointerAnalysis::dumpAllTypes</a></div><div class="ttdeci">void dumpAllTypes()</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#
|
|
248
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac9f54859eabff4c1e1f5785d57a0c818"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac9f54859eabff4c1e1f5785d57a0c818">SVF::PointerAnalysis::resolveCPPIndCalls</a></div><div class="ttdeci">virtual void resolveCPPIndCalls(const CallBlockNode *cs, const PointsTo &target, CallEdgeMap &newEdges)</div><div class="ttdoc">Resolve cpp indirect call edges. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00549">PointerAnalysis.cpp:549</a></div></div>
|
|
249
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a08399de593c073b6dd848a8d849dad27"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a08399de593c073b6dd848a8d849dad27">SVF::PointerAnalysis::dumpAllTypes</a></div><div class="ttdeci">void dumpAllTypes()</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00287">PointerAnalysis.cpp:287</a></div></div>
|
|
250
|
+
<div class="ttc" id="classSVF_1_1CHGBuilder_html"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html">SVF::CHGBuilder</a></div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00034">CHGBuilder.h:34</a></div></div>
|
|
254
251
|
<div class="ttc" id="namespaceSVF_html_ae941b2925716d8ebe14bf190aa8dfd06"><div class="ttname"><a href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">SVF::AliasResult</a></div><div class="ttdeci">llvm::AliasResult AliasResult</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00135">BasicTypes.h:135</a></div></div>
|
|
255
|
-
<div class="ttc" id="classSVF_1_1SVFIR_html_a2dd4d5f704906270af13e7a07f900eb1"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">SVF::SVFIR::getObject</a></div><div class="ttdeci">const MemObj * getObject(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#
|
|
252
|
+
<div class="ttc" id="classSVF_1_1SVFIR_html_a2dd4d5f704906270af13e7a07f900eb1"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">SVF::SVFIR::getObject</a></div><div class="ttdeci">const MemObj * getObject(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00358">SVFIR.h:358</a></div></div>
|
|
256
253
|
</div><!-- fragment --></div><!-- contents -->
|
|
257
254
|
<!-- start footer part -->
|
|
258
255
|
<hr class="footer"/><address class="footer"><small>
|