svf-tools 1.0.352 → 1.0.356
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/AndersenSFR_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +8 -8
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +28 -29
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +26 -26
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +10 -9
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +19 -8
- package/SVF-doxygen/html/html/LocationSet_8h_source.html +6 -6
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/Options_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +18 -21
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +17 -17
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +7 -8
- package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +8 -8
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +6 -5
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +25 -24
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +20 -19
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +15 -14
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +89 -85
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
- 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/SymbolTableBuilder_8cpp_source.html +22 -22
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +51 -50
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +67 -62
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +9 -8
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/VFG_8h_source.html +10 -10
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +1 -1
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -6
- package/SVF-doxygen/html/html/WPAPass_8h_source.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +26 -24
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +140 -86
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +76 -78
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt-members.html +68 -67
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +38 -7
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +3 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet-members.html +22 -21
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +86 -32
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder-members.html +2 -4
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +10 -14
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +87 -87
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +25 -25
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +98 -98
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +43 -48
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder-members.html +2 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +32 -78
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +30 -30
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +79 -73
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder-members.html +2 -4
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +8 -12
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1StInfo-members.html +13 -6
- package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +263 -37
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +65 -64
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +90 -63
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +13 -14
- package/SVF-doxygen/html/html/functions_a.html +13 -12
- package/SVF-doxygen/html/html/functions_b.html +5 -11
- package/SVF-doxygen/html/html/functions_f.html +20 -15
- package/SVF-doxygen/html/html/functions_func.html +14 -13
- package/SVF-doxygen/html/html/functions_func_b.html +0 -6
- package/SVF-doxygen/html/html/functions_func_g.html +28 -15
- package/SVF-doxygen/html/html/functions_func_o.html +2 -1
- package/SVF-doxygen/html/html/functions_func_s.html +4 -4
- package/SVF-doxygen/html/html/functions_g.html +26 -13
- package/SVF-doxygen/html/html/functions_l.html +8 -8
- package/SVF-doxygen/html/html/functions_o.html +12 -13
- package/SVF-doxygen/html/html/functions_p.html +16 -16
- package/SVF-doxygen/html/html/functions_r.html +1 -1
- package/SVF-doxygen/html/html/functions_s.html +18 -12
- package/SVF-doxygen/html/html/functions_t.html +3 -1
- package/SVF-doxygen/html/html/functions_type_s.html +3 -0
- package/SVF-doxygen/html/html/functions_v.html +6 -6
- package/SVF-doxygen/html/html/functions_vars_f.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_s.html +4 -1
- package/SVF-doxygen/html/html/functions_w.html +9 -5
- package/SVF-doxygen/html/html/search/all_1.js +3 -3
- package/SVF-doxygen/html/html/search/all_10.js +7 -7
- package/SVF-doxygen/html/html/search/all_12.js +1 -1
- package/SVF-doxygen/html/html/search/all_13.js +12 -10
- package/SVF-doxygen/html/html/search/all_14.js +4 -4
- package/SVF-doxygen/html/html/search/all_15.js +1 -1
- package/SVF-doxygen/html/html/search/all_16.js +3 -3
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_2.js +1 -3
- package/SVF-doxygen/html/html/search/all_6.js +1 -0
- package/SVF-doxygen/html/html/search/all_7.js +6 -2
- package/SVF-doxygen/html/html/search/all_c.js +4 -4
- package/SVF-doxygen/html/html/search/all_e.js +1 -1
- package/SVF-doxygen/html/html/search/all_f.js +1 -1
- package/SVF-doxygen/html/html/search/functions_0.js +3 -3
- package/SVF-doxygen/html/html/search/functions_1.js +1 -3
- package/SVF-doxygen/html/html/search/functions_10.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +6 -2
- package/SVF-doxygen/html/html/search/functions_d.js +1 -1
- package/SVF-doxygen/html/html/search/functions_e.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_11.js +1 -0
- package/SVF-doxygen/html/html/search/variables_13.js +2 -1
- package/SVF-doxygen/html/html/search/variables_14.js +2 -2
- package/SVF-doxygen/html/html/search/variables_15.js +1 -1
- package/SVF-doxygen/html/html/search/variables_6.js +1 -0
- package/SVF-doxygen/html/html/search/variables_e.js +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +16 -16
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1LocationSet_01_4.html +3 -3
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +2 -2
- package/include/DDA/DDAVFSolver.h +1 -1
- package/include/Graphs/VFGNode.h +1 -1
- package/include/MSSA/SVFGBuilder.h +0 -2
- package/include/MemoryModel/LocationSet.h +4 -0
- package/include/MemoryModel/SVFIR.h +1 -1
- package/include/MemoryModel/SVFStatements.h +25 -5
- package/include/MemoryModel/SymbolTableInfo.h +27 -6
- package/include/SVF-FE/SVFIRBuilder.h +1 -1
- package/lib/Graphs/ICFG.cpp +4 -0
- package/lib/MSSA/SVFGBuilder.cpp +4 -11
- package/lib/MemoryModel/LocationSet.cpp +69 -7
- package/lib/MemoryModel/PointerAnalysis.cpp +0 -6
- package/lib/MemoryModel/SVFIR.cpp +1 -1
- package/lib/MemoryModel/SymbolTableInfo.cpp +23 -16
- package/lib/SABER/SrcSnkDDA.cpp +2 -2
- package/lib/SVF-FE/SVFIRBuilder.cpp +9 -4
- package/lib/Util/Options.cpp +1 -1
- package/lib/WPA/FlowSensitive.cpp +3 -5
- package/lib/WPA/WPAPass.cpp +1 -9
- package/package.json +1 -1
- package/tools/Example/svf-ex.cpp +1 -1
|
@@ -76,7 +76,7 @@ $(function() {
|
|
|
76
76
|
<div class="ttc" id="classSVF_1_1ValVar_html_ae5dc21b3327a100ffe3e0e2c876ba1bb"><div class="ttname"><a href="classSVF_1_1ValVar.html#ae5dc21b3327a100ffe3e0e2c876ba1bb">SVF::ValVar::ValVar</a></div><div class="ttdeci">ValVar(const Value *val, NodeID i, PNODEK ty=ValNode)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00306">SVFVariables.h:306</a></div></div>
|
|
77
77
|
<div class="ttc" id="classSVF_1_1VarArgPN_html_a7f873a8015eb6a6b30530a7e5a69018d"><div class="ttname"><a href="classSVF_1_1VarArgPN.html#a7f873a8015eb6a6b30530a7e5a69018d">SVF::VarArgPN::classof</a></div><div class="ttdeci">static bool classof(const GenericPAGNodeTy *node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00649">SVFVariables.h:649</a></div></div>
|
|
78
78
|
<div class="ttc" id="classSVF_1_1GepValVar_html_a9bad2709e0d82d2d4a8578cc57bdf9f5"><div class="ttname"><a href="classSVF_1_1GepValVar.html#a9bad2709e0d82d2d4a8578cc57bdf9f5">SVF::GepValVar::GepValVar</a></div><div class="ttdeci">GepValVar(const Value *val, NodeID i, const LocationSet &l, const Type *ty, u32_t idx)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00422">SVFVariables.h:422</a></div></div>
|
|
79
|
-
<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#
|
|
79
|
+
<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#l00422">SymbolTableInfo.h:422</a></div></div>
|
|
80
80
|
<div class="ttc" id="classSVF_1_1SVFVar_html_a283f7c0c2eaae07c6865f73a0daafeffaabe491b0a744825250b97f407962c4a6"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a283f7c0c2eaae07c6865f73a0daafeffaabe491b0a744825250b97f407962c4a6">SVF::SVFVar::FIObjNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00071">SVFVariables.h:71</a></div></div>
|
|
81
81
|
<div class="ttc" id="classSVF_1_1SVFVar_html_a9b00f9b5f8ad2422162f4396e2d8fa42"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a9b00f9b5f8ad2422162f4396e2d8fa42">SVF::SVFVar::hasOutgoingEdges</a></div><div class="ttdeci">bool hasOutgoingEdges(SVFStmt::PEDGEK kind) const</div><div class="ttdoc">Has outgoing SVFIR statements (edges) </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00183">SVFVariables.h:183</a></div></div>
|
|
82
82
|
<div class="ttc" id="classSVF_1_1ValVar_html"><div class="ttname"><a href="classSVF_1_1ValVar.html">SVF::ValVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00277">SVFVariables.h:277</a></div></div>
|
|
@@ -106,7 +106,7 @@ $(function() {
|
|
|
106
106
|
<div class="ttc" id="classSVF_1_1CloneFIObjVar_html"><div class="ttname"><a href="classSVF_1_1CloneFIObjVar.html">SVF::CloneFIObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00836">SVFVariables.h:836</a></div></div>
|
|
107
107
|
<div class="ttc" id="classSVF_1_1SVFVar_html_a283f7c0c2eaae07c6865f73a0daafeffabf9e21e7cbec690ad318a68cd5d756dc"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a283f7c0c2eaae07c6865f73a0daafeffabf9e21e7cbec690ad318a68cd5d756dc">SVF::SVFVar::CloneGepObjNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00074">SVFVariables.h:74</a></div></div>
|
|
108
108
|
<div class="ttc" id="classSVF_1_1SVFStmt_html_a8cd7b6c6fd8b030b1421d95a086359f4"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVF::SVFStmt::SVFStmtSetTy</a></div><div class="ttdeci">GenericNode< SVFVar, SVFStmt >::GEdgeSetTy SVFStmtSetTy</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00177">SVFStatements.h:177</a></div></div>
|
|
109
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_aa4fa7a1b86d66692ffffeaee0e187216"><div class="ttname"><a href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216">SVF::MemObj::getType</a></div><div class="ttdeci">const Type * getType() const</div><div class="ttdoc">Get obj type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
109
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_aa4fa7a1b86d66692ffffeaee0e187216"><div class="ttname"><a href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216">SVF::MemObj::getType</a></div><div class="ttdeci">const Type * getType() const</div><div class="ttdoc">Get obj type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00626">SymbolTableInfo.cpp:626</a></div></div>
|
|
110
110
|
<div class="ttc" id="classSVF_1_1RetPN_html_ac551c1aaf9ec3cb77814aa4664d61a23"><div class="ttname"><a href="classSVF_1_1RetPN.html#ac551c1aaf9ec3cb77814aa4664d61a23">SVF::RetPN::RetPN</a></div><div class="ttdeci">RetPN(const SVFFunction *val, NodeID i)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00613">SVFVariables.h:613</a></div></div>
|
|
111
111
|
<div class="ttc" id="classSVF_1_1GepValVar_html_a0aab756122dcce24faf556f0b7057dc1"><div class="ttname"><a href="classSVF_1_1GepValVar.html#a0aab756122dcce24faf556f0b7057dc1">SVF::GepValVar::classof</a></div><div class="ttdeci">static bool classof(const GenericPAGNodeTy *node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00415">SVFVariables.h:415</a></div></div>
|
|
112
112
|
<div class="ttc" id="classSVF_1_1SVFVar_html_a283f7c0c2eaae07c6865f73a0daafeffa8299ae0d09f1b19411cb07cd79a2bae8"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a283f7c0c2eaae07c6865f73a0daafeffa8299ae0d09f1b19411cb07cd79a2bae8">SVF::SVFVar::DummyValNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00072">SVFVariables.h:72</a></div></div>
|
|
@@ -134,7 +134,7 @@ $(function() {
|
|
|
134
134
|
<div class="ttc" id="classSVF_1_1SVFVar_html_a3b61042079a6c9dc395f38925c6a1271"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">SVF::SVFVar::isPointer</a></div><div class="ttdeci">virtual bool isPointer() const</div><div class="ttdoc">Whether it is a pointer. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00118">SVFVariables.h:118</a></div></div>
|
|
135
135
|
<div class="ttc" id="classSVF_1_1SVFStmt_html_a93fc6c4c991931c78c48500c2db50f66"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a93fc6c4c991931c78c48500c2db50f66">SVF::SVFStmt::KindToSVFStmtMapTy</a></div><div class="ttdeci">PAGEdgeToSetMapTy KindToSVFStmtMapTy</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00179">SVFStatements.h:179</a></div></div>
|
|
136
136
|
<div class="ttc" id="classSVF_1_1RetPN_html_a48c099d2b441b4cc298166e2c5866c8f"><div class="ttname"><a href="classSVF_1_1RetPN.html#a48c099d2b441b4cc298166e2c5866c8f">SVF::RetPN::getValueName</a></div><div class="ttdeci">const std::string getValueName() const</div><div class="ttdoc">Return name of a LLVM value. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00619">SVFVariables.h:619</a></div></div>
|
|
137
|
-
<div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a866085ff37b7841606c523817c621f49"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a866085ff37b7841606c523817c621f49">SVF::SymbolTableInfo::getOriginalFieldType</a></div><div class="ttdeci">const Type * getOriginalFieldType(const Type *baseType, u32_t field_idx)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
137
|
+
<div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a866085ff37b7841606c523817c621f49"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a866085ff37b7841606c523817c621f49">SVF::SymbolTableInfo::getOriginalFieldType</a></div><div class="ttdeci">const Type * getOriginalFieldType(const Type *baseType, u32_t field_idx)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00342">SymbolTableInfo.cpp:342</a></div></div>
|
|
138
138
|
<div class="ttc" id="classSVF_1_1SVFVar_html_a307c0f4d90308d5f77977d5635cad65d"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a307c0f4d90308d5f77977d5635cad65d">SVF::SVFVar::isATPointer</a></div><div class="ttdeci">bool isATPointer</div><div class="ttdoc">top-level pointer </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00085">SVFVariables.h:85</a></div></div>
|
|
139
139
|
<div class="ttc" id="classSVF_1_1GepValVar_html"><div class="ttname"><a href="classSVF_1_1GepValVar.html">SVF::GepValVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00392">SVFVariables.h:392</a></div></div>
|
|
140
140
|
<div class="ttc" id="classSVF_1_1SVFVar_html_a283f7c0c2eaae07c6865f73a0daafeffa2ca0654308fd181afcb1f20519a0247a"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a283f7c0c2eaae07c6865f73a0daafeffa2ca0654308fd181afcb1f20519a0247a">SVF::SVFVar::CloneFIObjNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00075">SVFVariables.h:75</a></div></div>
|
|
@@ -210,7 +210,7 @@ $(function() {
|
|
|
210
210
|
<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>
|
|
211
211
|
<div class="ttc" id="classSVF_1_1SVFVar_html_a283f7c0c2eaae07c6865f73a0daafeffab85277a3daeecc24c99b3da86108e482"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a283f7c0c2eaae07c6865f73a0daafeffab85277a3daeecc24c99b3da86108e482">SVF::SVFVar::CloneDummyObjNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00076">SVFVariables.h:76</a></div></div>
|
|
212
212
|
<div class="ttc" id="classSVF_1_1VarArgPN_html"><div class="ttname"><a href="classSVF_1_1VarArgPN.html">SVF::VarArgPN</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00631">SVFVariables.h:631</a></div></div>
|
|
213
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a3ab6f65ffbf6442daac4d3f70f2d3cb1"><div class="ttname"><a href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">SVF::MemObj::getId</a></div><div class="ttdeci">SymID getId() const</div><div class="ttdoc">Get the memory object id. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
213
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a3ab6f65ffbf6442daac4d3f70f2d3cb1"><div class="ttname"><a href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">SVF::MemObj::getId</a></div><div class="ttdeci">SymID getId() const</div><div class="ttdoc">Get the memory object id. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00452">SymbolTableInfo.h:452</a></div></div>
|
|
214
214
|
<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>
|
|
215
215
|
<div class="ttc" id="classSVF_1_1SVFVar_html_a0d918a6c8dd3b7b395d4c7161bcf9656"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a0d918a6c8dd3b7b395d4c7161bcf9656">SVF::SVFVar::InEdgeKindToSetMap</a></div><div class="ttdeci">SVFStmt::KindToSVFStmtMapTy InEdgeKindToSetMap</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00082">SVFVariables.h:82</a></div></div>
|
|
216
216
|
<div class="ttc" id="classSVF_1_1CloneGepObjVar_html_a5f46eff05b965deeeed531bd9a87b464"><div class="ttname"><a href="classSVF_1_1CloneGepObjVar.html#a5f46eff05b965deeeed531bd9a87b464">SVF::CloneGepObjVar::classof</a></div><div class="ttdeci">static bool classof(const CloneGepObjVar *)</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00804">SVFVariables.h:804</a></div></div>
|
|
@@ -122,7 +122,7 @@ $(function() {
|
|
|
122
122
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ae6ea391ac44dffeb6899bb44323c5361"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">SVF::PointerAnalysis::isHeapMemObj</a></div><div class="ttdeci">bool isHeapMemObj(NodeID id) const</div><div class="ttdoc">Whether this object is heap or array. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00325">PointerAnalysis.h:325</a></div></div>
|
|
123
123
|
<div class="ttc" id="classSVF_1_1VFGNode_html_a3c558955f60c237c558d8faafed781e8"><div class="ttname"><a href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">SVF::VFGNode::const_iterator</a></div><div class="ttdeci">VFGEdge::VFGEdgeSetTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00060">VFGNode.h:60</a></div></div>
|
|
124
124
|
<div class="ttc" id="classSVF_1_1FIFOWorkList_html"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html">SVF::FIFOWorkList< NodeID ></a></div></div>
|
|
125
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a41d85883d44ad77832b020455951c6fc"><div class="ttname"><a href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">SVF::MemObj::isFieldInsensitive</a></div><div class="ttdeci">bool isFieldInsensitive() const</div><div class="ttdoc">Return true if its field limit is 0. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
125
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a41d85883d44ad77832b020455951c6fc"><div class="ttname"><a href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">SVF::MemObj::isFieldInsensitive</a></div><div class="ttdeci">bool isFieldInsensitive() const</div><div class="ttdoc">Return true if its field limit is 0. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00656">SymbolTableInfo.cpp:656</a></div></div>
|
|
126
126
|
<div class="ttc" id="classSVF_1_1SaberSVFGBuilder_html_ad8f4f63d2071be4eb5f6fb2fdf29a10a"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#ad8f4f63d2071be4eb5f6fb2fdf29a10a">SVF::SaberSVFGBuilder::rmDerefDirSVFGEdges</a></div><div class="ttdeci">void rmDerefDirSVFGEdges(BVDataPTAImpl *pta)</div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00145">SaberSVFGBuilder.cpp:145</a></div></div>
|
|
127
127
|
<div class="ttc" id="SaberCheckerAPI_8h_html"><div class="ttname"><a href="SaberCheckerAPI_8h.html">SaberCheckerAPI.h</a></div></div>
|
|
128
128
|
<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>
|
|
@@ -98,7 +98,7 @@ $(function() {
|
|
|
98
98
|
<div class="ttc" id="WorkList_8h_html"><div class="ttname"><a href="WorkList_8h.html">WorkList.h</a></div></div>
|
|
99
99
|
<div class="ttc" id="classSVF_1_1SaberSVFGBuilder_html"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html">SVF::SaberSVFGBuilder</a></div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8h_source.html#l00040">SaberSVFGBuilder.h:40</a></div></div>
|
|
100
100
|
<div class="ttc" id="classSVF_1_1PointsTo_html"><div class="ttname"><a href="classSVF_1_1PointsTo.html">SVF::PointsTo</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00027">PointsTo.h:27</a></div></div>
|
|
101
|
-
<div class="ttc" id="classSVF_1_1SVFGBuilder_html_a26bc3b9c07472e454bc567cd8746caef"><div class="ttname"><a href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">SVF::SVFGBuilder::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="SVFGBuilder_8h_source.html#
|
|
101
|
+
<div class="ttc" id="classSVF_1_1SVFGBuilder_html_a26bc3b9c07472e454bc567cd8746caef"><div class="ttname"><a href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">SVF::SVFGBuilder::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="SVFGBuilder_8h_source.html#l00117">SVFGBuilder.h:117</a></div></div>
|
|
102
102
|
<div class="ttc" id="classSVF_1_1SaberSVFGBuilder_html_a411e168e2a6c27e15186c609c5e216b3"><div class="ttname"><a href="classSVF_1_1SaberSVFGBuilder.html#a411e168e2a6c27e15186c609c5e216b3">SVF::SaberSVFGBuilder::CollectPtsChain</a></div><div class="ttdeci">PointsTo & CollectPtsChain(BVDataPTAImpl *pta, NodeID id, NodeToPTSSMap &cachedPtsMap)</div><div class="ttdoc">Collect objects along points-to chains. </div><div class="ttdef"><b>Definition:</b> <a href="SaberSVFGBuilder_8cpp_source.html#l00101">SaberSVFGBuilder.cpp:101</a></div></div>
|
|
103
103
|
<div class="ttc" id="classSVF_1_1VFGNode_html"><div class="ttname"><a href="classSVF_1_1VFGNode.html">SVF::VFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00046">VFGNode.h:46</a></div></div>
|
|
104
104
|
</div><!-- fragment --></div><!-- contents -->
|
|
@@ -66,7 +66,7 @@ $(function() {
|
|
|
66
66
|
<div class="title">SrcSnkDDA.cpp</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="SrcSnkDDA_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">//===- SrcSnkDDA.cpp -- Source-sink analyzer --------------------------------//</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"> * SrcSnkDDA.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: Apr 1, 2014</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> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="SrcSnkDDA_8h.html">SABER/SrcSnkDDA.h</a>"</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="SVFGStat_8h.html">Graphs/SVFGStat.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="SVFIRBuilder_8h.html">SVF-FE/SVFIRBuilder.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>"</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1SrcSnkDDA.html#a8883b9a42106ed8c55835d2ba9a579cd"> 42</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#a8883b9a42106ed8c55835d2ba9a579cd">SrcSnkDDA::initialize</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module)</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html">SVFIRBuilder</a> builder;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = builder.<a class="code" href="classSVF_1_1SVFIRBuilder.html#aa6d56f9580f76fd09d25ce6cf7541e98">build</a>(module);</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>  <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>* ander = <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540">AndersenWaveDiff::createAndersenWaveDiff</a>(pag);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a5fb7733fd66ecad30eea8ced3839e590">Options::SABERFULLSVFG</a>)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  svfg = memSSA.buildFullSVFGWithoutOPT(ander);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  svfg = memSSA.buildPTROnlySVFGWithoutOPT(ander);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  setGraph(memSSA.getSVFG());</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  ptaCallGraph = ander-><a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>();</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="comment">//AndersenWaveDiff::releaseAndersenWaveDiff();</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment"></span> getPathAllocator()->allocate(getPAG()->getModule());</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  initSrcs();</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  initSnks();</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classSVF_1_1SrcSnkDDA.html#ac12d813bcba4ec70de5e9048bbe16afc"> 62</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#ac12d813bcba4ec70de5e9048bbe16afc">SrcSnkDDA::analyze</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  initialize(module);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <a class="code" href="classSVF_1_1ContextCond.html#a92e89bbae0f31bb9eb971ab3edcc8071">ContextCond::setMaxCxtLen</a>(<a class="code" href="classSVF_1_1Options.html#a21cbaab292e9f5bd39109f774fcc88d4">Options::CxtLimit</a>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SrcSnkDDA.html#ad6935e27bbd95d26a01b22b879efed58">SVFGNodeSetIter</a> iter = sourcesBegin(), eiter = sourcesEnd();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  iter != eiter; ++iter)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  setCurSlice(*iter);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Analysing slice:"</span> << (*iter)->getId() << <span class="stringliteral">")\n"</span>);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="classSVF_1_1ContextCond.html">ContextCond</a> cxt;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <a class="code" href="classSVF_1_1CxtDPItem.html">DPIm</a> item((*iter)->getId(),cxt);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  forwardTraverse(item);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">if</span> (getCurSlice()->isReachGlobal())</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Forward analysis reaches globals for slice:"</span> << (*iter)->getId() << <span class="stringliteral">")\n"</span>);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Forward process for slice:"</span> << (*iter)->getId() << <span class="stringliteral">" (size = "</span> << getCurSlice()->getForwardSliceSize() << <span class="stringliteral">")\n"</span>);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SrcSnkDDA.html#ad6935e27bbd95d26a01b22b879efed58">SVFGNodeSetIter</a> sit = getCurSlice()->sinksBegin(), esit =</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  getCurSlice()->sinksEnd(); sit != esit; ++sit)</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <a class="code" href="classSVF_1_1ContextCond.html">ContextCond</a> cxt;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <a class="code" href="classSVF_1_1CxtDPItem.html">DPIm</a> item((*sit)->getId(),cxt);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  backwardTraverse(item);</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"> 97</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Backward process for slice:"</span> << (*iter)->getId() << <span class="stringliteral">" (size = "</span> << getCurSlice()->getBackwardSliceSize() << <span class="stringliteral">")\n"</span>);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#ace1f2368a0a466f98c9e53def47db3ab">Options::DumpSlice</a>)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  annotateSlice(_curSlice);</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="keywordflow">if</span>(_curSlice->AllPathReachableSolve())</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  _curSlice->setAllReachable();</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>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Guard computation for slice:"</span> << (*iter)->getId() << <span class="stringliteral">")\n"</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="l00108"></a><span class="lineno"> 108</span>  reportBug(getCurSlice());</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  finalize();</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> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classSVF_1_1SrcSnkDDA.html#afc75e55af839ef535d80555fd422342c"> 119</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#afc75e55af839ef535d80555fd422342c">SrcSnkDDA::isInAWrapper</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src, <a class="code" href="classSVF_1_1SrcSnkDDA.html#a47a4be28c625bf4d079a04ac24132165">CallSiteSet</a>& csIdSet)</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordtype">bool</span> reachFunExit = <span class="keyword">false</span>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(src);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="classSVF_1_1SrcSnkDDA.html#a70cff8ea7c033c01400935c9e446f2c6">SVFGNodeBS</a> visited;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> step = 0;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</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="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">if</span>(visited.test(node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>())==0)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  visited.set(node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="comment">// reaching maximum steps when traversing on SVFG to identify a memory allocation wrapper</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">if</span> (step++ > <a class="code" href="classSVF_1_1Options.html#a0b82f16ee0c7e6566a6ae20662525e84">Options::MaxStepInWrapper</a>)</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">SVFGNode::const_iterator</a> it = node-><a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit =</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  node-><a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = (*it);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="comment">//assert(edge->isDirectVFGEdge() && "the edge should always be direct VF");</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="comment">// if this is a call edge</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">if</span>(edge-><a class="code" href="classSVF_1_1VFGEdge.html#a92e3da59f7f5a693945b9a93f169da04">isCallDirectVFGEdge</a>())</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="comment">// if this is a return edge</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(edge-><a class="code" href="classSVF_1_1VFGEdge.html#a49cbf2a714c9b965b19452d266cd8bdf">isRetDirectVFGEdge</a>())</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  reachFunExit = <span class="keyword">true</span>;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  csIdSet.insert(getSVFG()->getCallSite(SVFUtil::cast<RetDirSVFGEdge>(edge)->getCallSiteId()));</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="comment">// (1) an intra direct edge, we will keep tracking</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="comment">// (2) an intra indirect edge, we only track if the succ SVFGNode is a load, which means we only track one level store-load pair .</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="comment">// (3) do not track for all other interprocedural edges.</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">else</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* succ = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">if</span>(SVFUtil::isa<IntraDirSVFGEdge>(edge)){</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">if</span> (SVFUtil::isa<CopySVFGNode>(succ) || SVFUtil::isa<GepSVFGNode>(succ)</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  || SVFUtil::isa<PHISVFGNode>(succ) || SVFUtil::isa<FormalRetSVFGNode>(succ)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  || SVFUtil::isa<ActualRetSVFGNode>(succ) || SVFUtil::isa<StoreSVFGNode>(succ))</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  {</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(succ);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<IntraIndSVFGEdge>(edge))</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>(SVFUtil::isa<LoadSVFGNode>(succ))</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>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(succ);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  }</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>  <span class="keywordflow">else</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="l00181"></a><span class="lineno"> 181</span>  }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">if</span>(reachFunExit)</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="classSVF_1_1SrcSnkDDA.html#ad2203ca5bd08c6fbebd31a8a010edebb"> 192</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#ad2203ca5bd08c6fbebd31a8a010edebb">SrcSnkDDA::FWProcessOutgoingEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtDPItem.html">DPIm</a>& item, <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n##processing source: "</span> << getCurSlice()->getSource()->getId() <<<span class="stringliteral">" forward propagate from ("</span> << edge-><a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>());</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="comment">// for indirect SVFGEdge, the propagation should follow the def-use chains</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="comment">// points-to on the edge indicate whether the object of source node can be propagated</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dstNode = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <a class="code" href="classSVF_1_1CxtDPItem.html">DPIm</a> newItem(dstNode->getId(),item.<a class="code" href="classSVF_1_1CxtDPItem.html#a1dea25cd5d72c52cef1cff23b832a196">getContexts</a>());</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">if</span>(isGlobalSVFGNode(dstNode) || getCurSlice()->isReachGlobal())</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  {</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  getCurSlice()->setReachGlobal();</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">return</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> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="comment">// push context for calling</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">if</span> (edge-><a class="code" href="classSVF_1_1VFGEdge.html#a4352297ef44c4eff1efe2f348cce6fe9">isCallVFGEdge</a>())</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId = 0;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallDirSVFGEdge.html">CallDirSVFGEdge</a>* callEdge = SVFUtil::dyn_cast<CallDirSVFGEdge>(edge))</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  csId = callEdge->getCallSiteId();</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  csId = SVFUtil::cast<CallIndSVFGEdge>(edge)->getCallSiteId();</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>  newItem.pushContext(csId);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" push cxt ["</span> << csId << <span class="stringliteral">"] "</span>);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="comment">// match context for return</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-><a class="code" href="classSVF_1_1VFGEdge.html#a3937eef974c3953f1d1e7d64c5a24ff3">isRetVFGEdge</a>())</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId = 0;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetDirSVFGEdge.html">RetDirSVFGEdge</a>* callEdge = SVFUtil::dyn_cast<RetDirSVFGEdge>(edge))</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  csId = callEdge->getCallSiteId();</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  csId = SVFUtil::cast<RetIndSVFGEdge>(edge)->getCallSiteId();</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">if</span> (newItem.matchContext(csId) == <span class="keyword">false</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>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"-|-\n"</span>);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  }</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" pop cxt ["</span> << csId << <span class="stringliteral">"] "</span>);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">if</span>(forwardVisited(dstNode,newItem))</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>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" node "</span><< dstNode->getId() <<<span class="stringliteral">" has been visited\n"</span>);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">return</span>;</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">else</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  addForwardVisited(dstNode, newItem);</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>(pushIntoWorklist(newItem))</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" --> "</span> << edge-><a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>() << <span class="stringliteral">", cxt size: "</span> << newItem.getContexts().cxtSize() <<<span class="stringliteral">")\n"</span>);</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> }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div><div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="classSVF_1_1SrcSnkDDA.html#a1ea0d4c4e53ff6986dd50d624ba2bff5"> 257</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#a1ea0d4c4e53ff6986dd50d624ba2bff5">SrcSnkDDA::BWProcessIncomingEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtDPItem.html">DPIm</a>&, <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge)</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>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"backward propagate from ("</span> << edge-><a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>() << <span class="stringliteral">" --> "</span> << edge-><a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>() << <span class="stringliteral">")\n"</span>);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcNode = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>();</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">if</span>(backwardVisited(srcNode))</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  addBackwardVisited(srcNode);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <a class="code" href="classSVF_1_1ContextCond.html">ContextCond</a> cxt;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <a class="code" href="classSVF_1_1CxtDPItem.html">DPIm</a> newItem(srcNode->getId(), cxt);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  pushIntoWorklist(newItem);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classSVF_1_1SrcSnkDDA.html#ab35c0d1f02c83a2c10717905f1abf5cd"> 272</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#ab35c0d1f02c83a2c10717905f1abf5cd">SrcSnkDDA::setCurSlice</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src)</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">if</span>(_curSlice!=<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  {</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keyword">delete</span> _curSlice;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  _curSlice = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  clearVisitedMap();</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> </div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  _curSlice = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ProgSlice.html">ProgSlice</a>(src,getPathAllocator(), getSVFG());</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> }</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1SrcSnkDDA.html#a8817604b20724703121e9466e5cdb4cd"> 284</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#a8817604b20724703121e9466e5cdb4cd">SrcSnkDDA::annotateSlice</a>(<a class="code" href="classSVF_1_1ProgSlice.html">ProgSlice</a>* slice)</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>  getSVFG()->getStat()->addToSources(slice-><a class="code" href="classSVF_1_1ProgSlice.html#ac1dc48ea64a89ce37394a22e609a0cd0">getSource</a>());</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SrcSnkDDA.html#ad6935e27bbd95d26a01b22b879efed58">SVFGNodeSetIter</a> it = slice-><a class="code" href="classSVF_1_1ProgSlice.html#adf620c97daed49735d21b485c448b4a2">sinksBegin</a>(), eit = slice-><a class="code" href="classSVF_1_1ProgSlice.html#a27636f096ec825c4d5cb1dca608afb31">sinksEnd</a>(); it!=eit; ++it )</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  getSVFG()->getStat()->addToSinks(*it);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SrcSnkDDA.html#ad6935e27bbd95d26a01b22b879efed58">SVFGNodeSetIter</a> it = slice-><a class="code" href="classSVF_1_1ProgSlice.html#ae482fcb138aaf345586a39daa34ff895">forwardSliceBegin</a>(), eit = slice-><a class="code" href="classSVF_1_1ProgSlice.html#add10d8fd041ac7e6eb611df8a6b1384b">forwardSliceEnd</a>(); it!=eit; ++it )</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  getSVFG()->getStat()->addToForwardSlice(*it);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SrcSnkDDA.html#ad6935e27bbd95d26a01b22b879efed58">SVFGNodeSetIter</a> it = slice-><a class="code" href="classSVF_1_1ProgSlice.html#ab5810f8a7a994f0637c54b94d0367a89">backwardSliceBegin</a>(), eit = slice-><a class="code" href="classSVF_1_1ProgSlice.html#aed4bedc716a3e252e44a6f28e677d61c">backwardSliceEnd</a>(); it!=eit; ++it )</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  getSVFG()->getStat()->addToBackwardSlice(*it);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="classSVF_1_1SrcSnkDDA.html#acae985068ff1c20fb81c4c9ba730aaba"> 295</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#acae985068ff1c20fb81c4c9ba730aaba">SrcSnkDDA::dumpSlices</a>()</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> {</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#ace1f2368a0a466f98c9e53def47db3ab">Options::DumpSlice</a>)</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keyword">const_cast<</span><a class="code" href="classSVF_1_1SVFG.html">SVFG</a>*<span class="keyword">></span>(getSVFG())->dump(<span class="stringliteral">"Slice"</span>,<span class="keyword">true</span>);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</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"><a class="line" href="classSVF_1_1SrcSnkDDA.html#ae3d665ff1e796348131e797eb0283bfb"> 302</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#ae3d665ff1e796348131e797eb0283bfb">SrcSnkDDA::printBDDStat</a>()</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"BDD Mem usage: "</span> << getPathAllocator()->getMemUsage() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"BDD Number: "</span> << getPathAllocator()->getCondNum() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> }</div><div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
|
|
69
|
+
<a href="SrcSnkDDA_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">//===- SrcSnkDDA.cpp -- Source-sink analyzer --------------------------------//</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"> * SrcSnkDDA.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: Apr 1, 2014</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> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="SrcSnkDDA_8h.html">SABER/SrcSnkDDA.h</a>"</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="SVFGStat_8h.html">Graphs/SVFGStat.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="SVFIRBuilder_8h.html">SVF-FE/SVFIRBuilder.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>"</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1SrcSnkDDA.html#a8883b9a42106ed8c55835d2ba9a579cd"> 42</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#a8883b9a42106ed8c55835d2ba9a579cd">SrcSnkDDA::initialize</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module)</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html">SVFIRBuilder</a> builder;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = builder.<a class="code" href="classSVF_1_1SVFIRBuilder.html#aa6d56f9580f76fd09d25ce6cf7541e98">build</a>(module);</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>  <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>* ander = <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540">AndersenWaveDiff::createAndersenWaveDiff</a>(pag);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a5fb7733fd66ecad30eea8ced3839e590">Options::SABERFULLSVFG</a>)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  svfg = memSSA.buildFullSVFG(ander);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  svfg = memSSA.buildPTROnlySVFG(ander);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  setGraph(memSSA.getSVFG());</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  ptaCallGraph = ander-><a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>();</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="comment">//AndersenWaveDiff::releaseAndersenWaveDiff();</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment"></span> getPathAllocator()->allocate(getPAG()->getModule());</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  initSrcs();</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  initSnks();</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classSVF_1_1SrcSnkDDA.html#ac12d813bcba4ec70de5e9048bbe16afc"> 62</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#ac12d813bcba4ec70de5e9048bbe16afc">SrcSnkDDA::analyze</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  initialize(module);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <a class="code" href="classSVF_1_1ContextCond.html#a92e89bbae0f31bb9eb971ab3edcc8071">ContextCond::setMaxCxtLen</a>(<a class="code" href="classSVF_1_1Options.html#a21cbaab292e9f5bd39109f774fcc88d4">Options::CxtLimit</a>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SrcSnkDDA.html#ad6935e27bbd95d26a01b22b879efed58">SVFGNodeSetIter</a> iter = sourcesBegin(), eiter = sourcesEnd();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  iter != eiter; ++iter)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  setCurSlice(*iter);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Analysing slice:"</span> << (*iter)->getId() << <span class="stringliteral">")\n"</span>);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="classSVF_1_1ContextCond.html">ContextCond</a> cxt;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <a class="code" href="classSVF_1_1CxtDPItem.html">DPIm</a> item((*iter)->getId(),cxt);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  forwardTraverse(item);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">if</span> (getCurSlice()->isReachGlobal())</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Forward analysis reaches globals for slice:"</span> << (*iter)->getId() << <span class="stringliteral">")\n"</span>);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Forward process for slice:"</span> << (*iter)->getId() << <span class="stringliteral">" (size = "</span> << getCurSlice()->getForwardSliceSize() << <span class="stringliteral">")\n"</span>);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SrcSnkDDA.html#ad6935e27bbd95d26a01b22b879efed58">SVFGNodeSetIter</a> sit = getCurSlice()->sinksBegin(), esit =</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  getCurSlice()->sinksEnd(); sit != esit; ++sit)</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <a class="code" href="classSVF_1_1ContextCond.html">ContextCond</a> cxt;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <a class="code" href="classSVF_1_1CxtDPItem.html">DPIm</a> item((*sit)->getId(),cxt);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  backwardTraverse(item);</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"> 97</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Backward process for slice:"</span> << (*iter)->getId() << <span class="stringliteral">" (size = "</span> << getCurSlice()->getBackwardSliceSize() << <span class="stringliteral">")\n"</span>);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#ace1f2368a0a466f98c9e53def47db3ab">Options::DumpSlice</a>)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  annotateSlice(_curSlice);</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="keywordflow">if</span>(_curSlice->AllPathReachableSolve())</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  _curSlice->setAllReachable();</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>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Guard computation for slice:"</span> << (*iter)->getId() << <span class="stringliteral">")\n"</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="l00108"></a><span class="lineno"> 108</span>  reportBug(getCurSlice());</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  finalize();</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> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classSVF_1_1SrcSnkDDA.html#afc75e55af839ef535d80555fd422342c"> 119</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#afc75e55af839ef535d80555fd422342c">SrcSnkDDA::isInAWrapper</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src, <a class="code" href="classSVF_1_1SrcSnkDDA.html#a47a4be28c625bf4d079a04ac24132165">CallSiteSet</a>& csIdSet)</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordtype">bool</span> reachFunExit = <span class="keyword">false</span>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(src);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="classSVF_1_1SrcSnkDDA.html#a70cff8ea7c033c01400935c9e446f2c6">SVFGNodeBS</a> visited;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> step = 0;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</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="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">if</span>(visited.test(node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>())==0)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  visited.set(node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="comment">// reaching maximum steps when traversing on SVFG to identify a memory allocation wrapper</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">if</span> (step++ > <a class="code" href="classSVF_1_1Options.html#a0b82f16ee0c7e6566a6ae20662525e84">Options::MaxStepInWrapper</a>)</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">SVFGNode::const_iterator</a> it = node-><a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit =</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  node-><a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = (*it);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="comment">//assert(edge->isDirectVFGEdge() && "the edge should always be direct VF");</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="comment">// if this is a call edge</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">if</span>(edge-><a class="code" href="classSVF_1_1VFGEdge.html#a92e3da59f7f5a693945b9a93f169da04">isCallDirectVFGEdge</a>())</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="comment">// if this is a return edge</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(edge-><a class="code" href="classSVF_1_1VFGEdge.html#a49cbf2a714c9b965b19452d266cd8bdf">isRetDirectVFGEdge</a>())</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  reachFunExit = <span class="keyword">true</span>;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  csIdSet.insert(getSVFG()->getCallSite(SVFUtil::cast<RetDirSVFGEdge>(edge)->getCallSiteId()));</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="comment">// (1) an intra direct edge, we will keep tracking</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="comment">// (2) an intra indirect edge, we only track if the succ SVFGNode is a load, which means we only track one level store-load pair .</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="comment">// (3) do not track for all other interprocedural edges.</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">else</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* succ = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">if</span>(SVFUtil::isa<IntraDirSVFGEdge>(edge)){</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">if</span> (SVFUtil::isa<CopySVFGNode>(succ) || SVFUtil::isa<GepSVFGNode>(succ)</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  || SVFUtil::isa<PHISVFGNode>(succ) || SVFUtil::isa<FormalRetSVFGNode>(succ)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  || SVFUtil::isa<ActualRetSVFGNode>(succ) || SVFUtil::isa<StoreSVFGNode>(succ))</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  {</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(succ);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<IntraIndSVFGEdge>(edge))</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>(SVFUtil::isa<LoadSVFGNode>(succ))</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>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(succ);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  }</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>  <span class="keywordflow">else</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="l00181"></a><span class="lineno"> 181</span>  }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">if</span>(reachFunExit)</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="classSVF_1_1SrcSnkDDA.html#ad2203ca5bd08c6fbebd31a8a010edebb"> 192</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#ad2203ca5bd08c6fbebd31a8a010edebb">SrcSnkDDA::FWProcessOutgoingEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtDPItem.html">DPIm</a>& item, <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n##processing source: "</span> << getCurSlice()->getSource()->getId() <<<span class="stringliteral">" forward propagate from ("</span> << edge-><a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>());</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="comment">// for indirect SVFGEdge, the propagation should follow the def-use chains</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="comment">// points-to on the edge indicate whether the object of source node can be propagated</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dstNode = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <a class="code" href="classSVF_1_1CxtDPItem.html">DPIm</a> newItem(dstNode->getId(),item.<a class="code" href="classSVF_1_1CxtDPItem.html#a1dea25cd5d72c52cef1cff23b832a196">getContexts</a>());</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">if</span>(isGlobalSVFGNode(dstNode) || getCurSlice()->isReachGlobal())</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  {</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  getCurSlice()->setReachGlobal();</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">return</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> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="comment">// push context for calling</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">if</span> (edge-><a class="code" href="classSVF_1_1VFGEdge.html#a4352297ef44c4eff1efe2f348cce6fe9">isCallVFGEdge</a>())</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId = 0;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallDirSVFGEdge.html">CallDirSVFGEdge</a>* callEdge = SVFUtil::dyn_cast<CallDirSVFGEdge>(edge))</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  csId = callEdge->getCallSiteId();</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  csId = SVFUtil::cast<CallIndSVFGEdge>(edge)->getCallSiteId();</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>  newItem.pushContext(csId);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" push cxt ["</span> << csId << <span class="stringliteral">"] "</span>);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="comment">// match context for return</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-><a class="code" href="classSVF_1_1VFGEdge.html#a3937eef974c3953f1d1e7d64c5a24ff3">isRetVFGEdge</a>())</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId = 0;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetDirSVFGEdge.html">RetDirSVFGEdge</a>* callEdge = SVFUtil::dyn_cast<RetDirSVFGEdge>(edge))</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  csId = callEdge->getCallSiteId();</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  csId = SVFUtil::cast<RetIndSVFGEdge>(edge)->getCallSiteId();</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">if</span> (newItem.matchContext(csId) == <span class="keyword">false</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>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"-|-\n"</span>);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  }</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" pop cxt ["</span> << csId << <span class="stringliteral">"] "</span>);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">if</span>(forwardVisited(dstNode,newItem))</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>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" node "</span><< dstNode->getId() <<<span class="stringliteral">" has been visited\n"</span>);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">return</span>;</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">else</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  addForwardVisited(dstNode, newItem);</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>(pushIntoWorklist(newItem))</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" --> "</span> << edge-><a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>() << <span class="stringliteral">", cxt size: "</span> << newItem.getContexts().cxtSize() <<<span class="stringliteral">")\n"</span>);</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> }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div><div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="classSVF_1_1SrcSnkDDA.html#a1ea0d4c4e53ff6986dd50d624ba2bff5"> 257</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#a1ea0d4c4e53ff6986dd50d624ba2bff5">SrcSnkDDA::BWProcessIncomingEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtDPItem.html">DPIm</a>&, <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge)</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>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"backward propagate from ("</span> << edge-><a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>() << <span class="stringliteral">" --> "</span> << edge-><a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>() << <span class="stringliteral">")\n"</span>);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcNode = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>();</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">if</span>(backwardVisited(srcNode))</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  addBackwardVisited(srcNode);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <a class="code" href="classSVF_1_1ContextCond.html">ContextCond</a> cxt;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <a class="code" href="classSVF_1_1CxtDPItem.html">DPIm</a> newItem(srcNode->getId(), cxt);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  pushIntoWorklist(newItem);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classSVF_1_1SrcSnkDDA.html#ab35c0d1f02c83a2c10717905f1abf5cd"> 272</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#ab35c0d1f02c83a2c10717905f1abf5cd">SrcSnkDDA::setCurSlice</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src)</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">if</span>(_curSlice!=<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  {</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keyword">delete</span> _curSlice;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  _curSlice = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  clearVisitedMap();</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> </div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  _curSlice = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ProgSlice.html">ProgSlice</a>(src,getPathAllocator(), getSVFG());</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> }</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1SrcSnkDDA.html#a8817604b20724703121e9466e5cdb4cd"> 284</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#a8817604b20724703121e9466e5cdb4cd">SrcSnkDDA::annotateSlice</a>(<a class="code" href="classSVF_1_1ProgSlice.html">ProgSlice</a>* slice)</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>  getSVFG()->getStat()->addToSources(slice-><a class="code" href="classSVF_1_1ProgSlice.html#ac1dc48ea64a89ce37394a22e609a0cd0">getSource</a>());</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SrcSnkDDA.html#ad6935e27bbd95d26a01b22b879efed58">SVFGNodeSetIter</a> it = slice-><a class="code" href="classSVF_1_1ProgSlice.html#adf620c97daed49735d21b485c448b4a2">sinksBegin</a>(), eit = slice-><a class="code" href="classSVF_1_1ProgSlice.html#a27636f096ec825c4d5cb1dca608afb31">sinksEnd</a>(); it!=eit; ++it )</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  getSVFG()->getStat()->addToSinks(*it);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SrcSnkDDA.html#ad6935e27bbd95d26a01b22b879efed58">SVFGNodeSetIter</a> it = slice-><a class="code" href="classSVF_1_1ProgSlice.html#ae482fcb138aaf345586a39daa34ff895">forwardSliceBegin</a>(), eit = slice-><a class="code" href="classSVF_1_1ProgSlice.html#add10d8fd041ac7e6eb611df8a6b1384b">forwardSliceEnd</a>(); it!=eit; ++it )</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  getSVFG()->getStat()->addToForwardSlice(*it);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SrcSnkDDA.html#ad6935e27bbd95d26a01b22b879efed58">SVFGNodeSetIter</a> it = slice-><a class="code" href="classSVF_1_1ProgSlice.html#ab5810f8a7a994f0637c54b94d0367a89">backwardSliceBegin</a>(), eit = slice-><a class="code" href="classSVF_1_1ProgSlice.html#aed4bedc716a3e252e44a6f28e677d61c">backwardSliceEnd</a>(); it!=eit; ++it )</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  getSVFG()->getStat()->addToBackwardSlice(*it);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="classSVF_1_1SrcSnkDDA.html#acae985068ff1c20fb81c4c9ba730aaba"> 295</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#acae985068ff1c20fb81c4c9ba730aaba">SrcSnkDDA::dumpSlices</a>()</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> {</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#ace1f2368a0a466f98c9e53def47db3ab">Options::DumpSlice</a>)</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keyword">const_cast<</span><a class="code" href="classSVF_1_1SVFG.html">SVFG</a>*<span class="keyword">></span>(getSVFG())->dump(<span class="stringliteral">"Slice"</span>,<span class="keyword">true</span>);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</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"><a class="line" href="classSVF_1_1SrcSnkDDA.html#ae3d665ff1e796348131e797eb0283bfb"> 302</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SrcSnkDDA.html#ae3d665ff1e796348131e797eb0283bfb">SrcSnkDDA::printBDDStat</a>()</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"BDD Mem usage: "</span> << getPathAllocator()->getMemUsage() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"BDD Number: "</span> << getPathAllocator()->getCondNum() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> }</div><div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
|
|
70
70
|
<div class="ttc" id="classSVF_1_1ProgSlice_html_ac1dc48ea64a89ce37394a22e609a0cd0"><div class="ttname"><a href="classSVF_1_1ProgSlice.html#ac1dc48ea64a89ce37394a22e609a0cd0">SVF::ProgSlice::getSource</a></div><div class="ttdeci">const SVFGNode * getSource() const</div><div class="ttdoc">root and sink operations </div><div class="ttdef"><b>Definition:</b> <a href="ProgSlice_8h_source.html#l00112">ProgSlice.h:112</a></div></div>
|
|
71
71
|
<div class="ttc" id="classSVF_1_1SrcSnkDDA_html_a8817604b20724703121e9466e5cdb4cd"><div class="ttname"><a href="classSVF_1_1SrcSnkDDA.html#a8817604b20724703121e9466e5cdb4cd">SVF::SrcSnkDDA::annotateSlice</a></div><div class="ttdeci">void annotateSlice(ProgSlice *slice)</div><div class="ttdef"><b>Definition:</b> <a href="SrcSnkDDA_8cpp_source.html#l00284">SrcSnkDDA.cpp:284</a></div></div>
|
|
72
72
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aa6d56f9580f76fd09d25ce6cf7541e98"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aa6d56f9580f76fd09d25ce6cf7541e98">SVF::SVFIRBuilder::build</a></div><div class="ttdeci">virtual SVFIR * build(SVFModule *svfModule)</div><div class="ttdoc">Start building SVFIR here. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00047">SVFIRBuilder.cpp:47</a></div></div>
|